Read a work item
GEThttps://
Returns one work item in the detail view, addressed by numeric id or by its issue key: work-items/41 and work-items/ACM-123 are the same record.
Access
- Token scope
- api:
read: project_management Without it:
403 insufficient-token-scope. - Permission
- project_management::
view_backlog 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
The strong ETag is derived from version, so If-None-Match answers 304 on an unchanged item and the same value works as If-Match on a write. Reading additionally requires project_management::manage_work_items. Comments, subtasks, links, attachments, child work items, labels and linked drive documents are reached through data.links; comments, subtasks, labels and drive documents can also be expanded inline with include, up to 25 of each.
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 WorkItem 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
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
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