List a project's tasks
GEThttps://
Returns the kanban tasks on one project, lowest board position first.
Access
- Token scope
- api:
read: kanban Without it:
403 insufficient-token-scope. - Permission
- kanban::
manage_self Without it:
403 insufficient-permission. - Rate cost
- 1 unit, read bucket.
view=detailmakes it 3. Adds:with_total=1+2,q+2. - Also
If-None-Matchanswers304when nothing changed. Never cached:private, no-store. Unknown query parameters are refused, never ignored.
Both are checked, scope first. A token never does more than its user. How access is checked
There is no organisation-wide collection of tasks (a kanban board is per-user), so this nested path is the only way to list them, and filter[project_id] / filter[customer_id] do not exist: the project is the path segment. Tasks are per-user, so filter[user_id] defaults to the authenticated user and naming another user requires kanban::manage_for_others; without that permission you also do not see the cards left unassigned in plnnrly. Listing additionally requires projects::read on the parent project: the declared kanban::manage_self is only part of the requirement. A trashed project answers 404 unless trashed=with is passed. The summary and detail views are identical on this resource.
Path parameters
Query parameters
Unknown parameters are refused with 400, naming the parameter.
30 parameters in 6 groups
Views
Pagination
Cursor pagination only. Follow links.next.
Rows per page. At most 25 when include names a to-many relation; a larger value is 400 invalid-query-parameter.
Default: 25
Filters
- =
- equals
- [in]
- any of a comma-separated list
- [null]
trueorfalse: whether it is empty- [gte][lte][lt]
- at least, at most, less than
- [ne]
- not equal
Budget the task is filed under. Combine with the project in the path to narrow a board to one budget.
A comma-separated list of at most 100 values.
Creation timestamp. Pair with sort=id for a stable full export.
Day the task is due. null reaches the cards left undated in plnnrly.
Whether the field is null.
Whether the task is done. Kept in step with status automatically, so filter[is_finished]=true and filter[status]=finished select the same rows.
Kanban column the card sits in.
A comma-separated list of at most 100 values.
on-holdnewactiveinternal-testexternal-testfinished
New values may be added.
Team the task is filed under. Only plnnrly itself assigns one, so tasks created through the API always match filter[team_id][null]=true.
A comma-separated list of at most 100 values.
Last-write timestamp. Use for incremental sync.
Search
Sorting
| Key | Sorts by |
|---|---|
order_column | Position on the kanban board, lowest first. Server-assigned and changed when someone drags the card in plnnrly; ties are broken by id. |
due_date | Day the task is due. |
id | Id, ascending. An id never changes, so use this for a stable full export. |
updated_at | Last-write timestamp; pair with the id tiebreaker for sync. |
Prefix a key with - for descending.
Other
Request headers
A correlation id of your own. It is recorded in our logs next to the server's request id but never returned: the response header always carries the server's id. A value that does not match the pattern is discarded silently, never rejected.
Response 200
Returns a page of TaskList rows.
The rows, each a TaskList.
per_page, next_cursor, prev_cursor, total.
self, next, prev.
Each row is a TaskList: 17 fields.
Headers
ETag- A weak validator (
W/"…") of the rendered page. RateLimit- The IETF
httpapi-ratelimit-headersform of your remaining allowance on the tightest bucket this request touched. RateLimit-Policy- The ceiling and window of that bucket, as
<limit>;w=<seconds>. X-Request-Id- The server-generated ULID correlating this response with our logs.
Every response also carries Cache-Control, Vary, X-Content-Type-Options, X-Plnnrly-Api-Version, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Headers and versioning
Budget the task is filed under. This is the task's only link to a project (a task has no project_id of its own), and it is settable at create time only; a task cannot be re-budgeted through the API.
The employee the task belongs to. Always the authenticated user on create; not writable. Null on a task left unassigned in plnnrly.
Team the task is filed under. Nothing on the API path assigns it, so a task created through the API always carries null; plnnrly itself is the only place a team is set. Not writable, and there is no team object beside it.
Day the task is due. Required when creating a task through the API, and clearable afterwards; tasks created in plnnrly may carry null.
Short description shown on the kanban card. This is the task's label and the only field ?q= searches.
Whether the task is done. Cross-synced with status on every write: setting status to finished sets this true and any other status sets it false, while setting this false on a finished task moves status back to active. status wins when both are sent.
Whether time logged on this task is billable. Defaults to true when a task is created through the API, regardless of the budget's own setting.
Kanban column the card sits in.
on-holdnewactiveinternal-testexternal-testfinished
New values may be added.
Position on the kanban board, lowest first. Appended to the end of the board on create and changed when someone drags the card in plnnrly. Not writable.
The budget this task is filed under.
The employee the task belongs to.
Errors
8 errors every operation can return: 304, 400, 401, 404, 406, 429, 500, 503
304 Not modified.
400 Bad request.
idempotency-key-requiredinvalid-cursorinvalid-query-parametermalformed-requestunsupported-parameter
401 Unauthenticated.
404 Not found.
406 Not acceptable.
429 Too many requests.
500 Server error.
503 Service unavailable.
This path allows GET, POST. Anything else answers 405.
Something wrong or missing on this page? Tell us