Move a work item to a position
POSThttps://
Places a work item at a position in a list, the way a drag in plnnrly does.
Access
- Token scope
- api:
write: project_management Without it:
403 insufficient-token-scope. - Permission
- project_management::
manage_work_items Without it:
403 insufficient-permission. - Rate cost
- 1 unit, write bucket. A write costs the same whatever
viewyou ask for. - Also
- Accepts
Idempotency-Key. AcceptsIf-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
list: board positions it in the board column of its workflow status and writes column_order; list: backlog positions it in its sprint, or in the backlog when it is in no sprint, and writes order. The same call can change the status (workflow_status_id, validated against the project workflow like POST …/actions/transition, so an unreachable status is 409 state-conflict with conflict.reason illegal_transition) and the sprint (sprint_id, null for the backlog). after_work_item_id names the item to land directly below, by id or issue key; null puts the item at the top, and leaving it out keeps the item's place in a list it already sits in, or puts it at the end of a new one. The anchor must be in the target list, otherwise 422 at /after_work_item_id. A move to where the item already is writes nothing and leaves version as it is, so a retry is safe; any other move bumps version once. Positions are not consecutive: other items of the list only shift when there is no room, and keep their version. Returns the moved work item in the detail view with a fresh ETag.
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.
Which ordering to write: the board column (column_order) or the sprint/backlog list (order).
board- The board column of the item's workflow status. Writes
column_order. On a sprint project the board shows the running sprint only, so the item must be in it. backlog- The sprint the item sits in, or the backlog when it is in no sprint. Writes
order.
New values may be added.
Status to move the item to. Leave it out to keep the current status. It must be reachable from the current status in the project workflow.
Sprint to move the item to: a not-yet-completed sprint on the item's own project. Null moves it to the backlog. Leave it out to keep the current sprint.
Response 200
Returns a WorkItem in the detail view.
Headers
ETag- A strong validator of exactly this representation.
Idempotency-Replayedtruewhen this response was replayed from a storedIdempotency-Keyrather than produced by a new write.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
Human-readable key, e.g. ACM-123, allocated by the server from the project's customer code and a per-customer sequence. It also works in the path: GET work-items/ACM-123 works. This is one of the two fields ?q= searches.
Work item description. HTML from the rich editor, sanitised on read and on write. Mention spans are preserved verbatim, so pass them back unchanged. Detail view only.
Relative priority. Defaults to normal on create; null only on a legacy item that was never prioritised.
highesthighnormallowlowest
New values may be added.
Remaining estimate, in minutes. Null where none was entered, in which case plnnrly derives one from the estimate and the logged time.
Name of the place the work happens, as picked from the address search in plnnrly. Null when no location was set. Send it together with location_latitude and location_longitude; null all three to clear the location. Detail view only.
Formatted address of the location, when the place has one. Detail view only.
Latitude of the location in decimal degrees, -90 to 90. Detail view only.
Longitude of the location in decimal degrees, -180 to 180. Detail view only.
Position within the sprint or backlog, and the default sort. Not writable through PATCH: move an item with POST work-items/{work_item}/actions/move and list: backlog.
Position within the board column. Not writable through PATCH: move a card with POST work-items/{work_item}/actions/move and list: board.
Revision counter, bumped once per write. It is the ETag's revision: send it back as If-Match to detect a concurrent edit, which answers 412.
Project this work item belongs to. It cannot change: the issue key was allocated from the project's customer code.
Kanban task this work item is booked against, when it is booked against one. It must belong to the item's project. A sprint project books the running sprint's hours through it, so an item in that project's running sprint needs one; a simple-mode project does not. Setting it also makes the task's owner the assignee. Follow it to /api/v2/tasks/{task}.
Current workflow status. Not writable through PATCH: moving between statuses is POST work-items/{work_item}/actions/transition, because the move is validated against the project workflow.
User the work is assigned to. Null on an unassigned item. On a sprint project, setting it also moves the item to that user's only open task in the same budget, or in the project when the item has no task yet; with several or no candidates the task is left as it is.
User who filed the work item. Always the authenticated user at create time; there is no way to file on somebody else's behalf.
Absolute URL that opens this work item in plnnrly, on the organisation's own hostname. It is a stable link, safe to store: it redirects to the first of the project's backlog, all-work list or board the signed-in user may open, and opens the item there; it lands on the project page when none of them applies. Read-only.
The workflow status this item currently sits in. Always present.
The parent work item, on a sub-issue.
The user the work is assigned to. Expanding it additionally requires the users prefix's read grant and a token scope covering it.
The user who filed the work item. Expanding it additionally requires the users prefix's read grant and a token scope covering it.
The work type of this item. Expanding it additionally requires the work_types prefix's read grant and a token scope covering it.
The sprint this item sits in, when it is not in the backlog.
Number of linked drive documents the caller may open. Archived documents are not counted.
Show 8 child fields
Every label on this work item, paginated. Present only while the Sprints feature is enabled, as GET /labels is.
Labels on this work item. label_ids takes at most 50 ids and replaces the whole set: a label you leave out is removed. Build it from links.labels, which lists every label while the Sprints feature is enabled, not from include=labels, which stops at 25.
Wrapped in { data, meta }; meta.truncated says whether the cap was hit and meta.count is the full count.
Drive documents linked to this work item that you may open. drive_item_ids takes at most 25 ids and replaces the whole set: a document you leave out is unlinked, and so is every linked document you cannot open. Build it from links.drive_items, not from include=drive_items, which stops at 25. Expanding it additionally requires the project_drive prefix's access grant and a token scope covering it.
Wrapped in { data, meta }; meta.truncated says whether the cap was hit and meta.count is the full count.
Show 5 child fields
The kind of record owner points at; it says which branch of owner applies.
projectcustomerorganizationuser
New values may be added.
The project, customer, organisation or user whose drive this item lives in.
Which form you get depends on owner_type.
projectRefcustomerReforganizationRefuserRef
Comments on this work item, newest first, capped at 25. Follow links.comments for the rest.
Wrapped in { data, meta }; meta.truncated says whether the cap was hit and meta.count is the full count.
Checklist subtasks on this work item, capped at 25. Follow links.subtasks for the rest.
Wrapped in { data, meta }; meta.truncated says whether the cap was hit and meta.count is the full count.
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 POST. Anything else answers 405.
Something wrong or missing on this page? Tell us