Read a task
GEThttps://
Returns one kanban task with its budget and the employee it belongs to.
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.
- 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
Tasks are per-user: a caller sees only their own unless they hold kanban::manage_for_others, and an id outside that scope is 404 rather than 403, so the endpoint cannot be walked to discover a colleague's cards. Tasks are hard-deleted, so a deleted one is simply 404 and trashed is not an accepted parameter. The task's project is not in the payload (a task has no project_id of its own, and the budget object carries only id and description), so a client that needs the project follows GET /api/v2/budgets/{budget}. The summary and detail views are identical on this resource.
Path parameters
Query parameters
Unknown parameters are refused with 400, naming the parameter.
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 Task in the detail view.
Headers
ETag- A strong validator of exactly this representation.
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, PATCH, DELETE. Anything else answers 405.
Something wrong or missing on this page? Tell us