Update a task
PATCHhttps://
Partially updates a task: absent keys are untouched and an empty body is rejected.
Access
- Token scope
- api:
write: kanban Without it:
403 insufficient-token-scope. - Permission
- kanban::
manage_self Without it:
403 insufficient-permission. - Rate cost
- 1 unit, write bucket. A write costs the same whatever
viewyou ask for. - Also
- Accepts
If-Match. Never cached:private, no-store. Unknown body keys are refused, never dropped.
Both are checked, scope first. A token never does more than its user. How access is checked
A status change is a plain PATCH, not an action. Note that the response body can differ from the request body: status and is_finished are cross-synced on every write, so sending is_finished: true answers status: "finished", moving status off finished answers is_finished: false, and re-opening a finished task without naming a status answers status: "active". status wins when both are sent. budget_id is accepted at create time only, so a task cannot be re-budgeted or moved to another project here; user_id, team_id and order_column are not writable at all, which means a task cannot be reassigned to another employee through the API and there is no way to reorder a board. The write also bumps the owning project's updated_at, so the project's ETag changes and it reappears in an incremental filter[updated_at][gte] window, and it lands in that project's activity timeline rather than a timeline of its own. Send If-Match with the ETag from your last read to detect a concurrent edit, which answers 412.
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.
Request body
Unknown keys are refused with 422, naming the key.
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.
Kanban column the card sits in.
on-hold- Paused, waiting on something off the board.
new- The default for a new card: not picked up yet.
active- Being worked on.
internal-test- Awaiting internal review or testing.
external-test- With the customer for acceptance.
finished- Done. The only status for which
is_finishedis true.
New values may be added.
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.
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
412 Precondition failed.
415 Unsupported media type.
422 Unprocessable content.
7 errors every operation can return: 400, 401, 404, 406, 429, 500, 503
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