List work items
GEThttps://
Returns the work items the caller may read, in each sprint's display order with the id as the tiebreaker.
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.
view=detailmakes it 3. Adds:with_total=1+2, each include +1 (to-many +3),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
The list covers the whole organisation and interleaves projects, because order is unique within a sprint only; narrow it with filter[project_id], and add filter[sprint_id][null]=true for a project's backlog or filter[resolved]=false for its open work. Pagination is cursor-only: a backlog drag rewrites order on the rows behind you, so an offset page would skip and repeat items. meta.page.total is null unless you pass with_total=1, which costs two rate units. Listing additionally requires project_management::manage_work_items. Defaults to the summary view, which omits description; pass view=detail for the full payload.
Query parameters
Unknown parameters are refused with 400, naming the parameter.
43 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
User the work is assigned to. Accepts me. Pass [null] for unassigned items.
A comma-separated list of at most 100 values.
Creation timestamp. Pair with sort=id for a stable full export.
Work items linked to a given drive document. The document must be one the caller may open; a document they cannot open matches nothing.
Also needs project_drive::access and a token with api:read:project_drive.
Due date, a zone-free calendar date. Combine [gte] and [lte] for a period; pass [null] for items with no due date.
Whether the field is null.
Parent work item. Pass a key for one item's children (sub-issues), or [null] for top-level items only.
A comma-separated list of at most 100 values.
Relative priority. One of highest, high, normal, low, lowest; there is no medium.
A comma-separated list of at most 100 values.
highesthighnormallowlowest
New values may be added.
Project the work item belongs to. This is how a client reproduces one project's backlog; combine it with the other filters to hit idx_work_items_project_sprint_order and its siblings.
A comma-separated list of at most 100 values.
User who filed the work item. Accepts me.
A comma-separated list of at most 100 values.
Whether the item sits in a workflow status marked as a resolution. Pass false for open work.
Also needs workflows::read and a token with api:read:workflows.
Sprint the item sits in. Pass [null] for the backlog, the items in no sprint.
A comma-separated list of at most 100 values.
Kanban task the item is booked against. Pass [null] for items booked against no task.
A comma-separated list of at most 100 values.
Last-write timestamp. Use for incremental sync.
Search
Sorting
| Key | Sorts by |
|---|---|
order | Position within the sprint or backlog, as ordered in plnnrly. The default sort, ascending. |
column_order | Position within the board column. |
title | Work item title, A→Z. |
due_date | Due date, earliest first. |
priority | Priority, ordered by its stored value rather than by severity: high, highest, low, lowest, normal. |
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.
Includes
| Path | Adds | Cost |
|---|---|---|
assignee | The user the work is assigned to. Requires the users prefix's read grant and a token scope covering it. | +1 |
comments | Comments on this work item, capped at 25 rows. Truncation emits an include_truncated warning; links.comments is the paginated continuation. | to-many · +3 |
drive_items | Drive documents linked to this work item, capped at 25 rows and narrowed to the ones you may open. links.drive_items is the paginated list of all of them. Requires the project_drive prefix's access grant and a token scope covering it. | to-many · +3 |
labels | Labels on this work item in the project's label order, capped at 25 rows. While the Sprints feature is enabled, links.labels is the paginated list of all of them. | to-many · +3 |
parent | The parent work item, on a sub-issue. | +1 |
reporter | The user who filed the work item. Requires the users prefix's read grant and a token scope covering it. | +1 |
sprint | The sprint this item sits in, when it is not in the backlog. | +1 |
subtasks | Checklist subtasks on this work item, capped at 25 rows. links.subtasks is the paginated continuation. | to-many · +3 |
work_type | The work type of this item. Requires the work_types prefix's read grant and a token scope covering it. | +1 |
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 WorkItemList rows.
The rows, each a WorkItemList.
per_page, next_cursor, prev_cursor, total.
self, next, prev.
Each row is a WorkItemList: 39 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
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, POST. Anything else answers 405.
Something wrong or missing on this page? Tell us