List projects
GEThttps://
Returns the projects the caller may read, with their customer, sub-customer, project manager and account manager inlined.
Access
- Token scope
- api:
read: projects Without it:
403 insufficient-token-scope. - Permission
- projects::
read Without it:
403 insufficient-permission. - Rate cost
- 1 unit, read bucket.
view=detailmakes it 3. Adds: 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 default sort is title A→Z, not recent activity; pass sort=-last_activity for that. Defaults to the summary view; pass view=detail for the full payload at three read units instead of one. Pass include=logged_minutes for the worklog total the caller may see.
Query parameters
Unknown parameters are refused with 400, naming the parameter.
52 parameters in 7 groups
Views
Pagination
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
Responsible account manager. Accepts the literal me.
A comma-separated list of at most 100 values.
Linked application, managed by platform administrators.
A comma-separated list of at most 100 values.
Creation timestamp. Pair with sort=id for a stable full export.
Short code of the owning customer, e.g. ACM.
Also needs customers::read and a token with api:read:customers.
Last day of the project.
Whether the field is null.
Most recent write anywhere in the project.
Whether the field is null.
Responsible project manager. Accepts the literal me.
A comma-separated list of at most 100 values.
First day of the project.
Whether the field is null.
Lifecycle status of the project.
A comma-separated list of at most 100 values.
activefinishedinvoicedon-holdinactive
New values may be added.
Last-write timestamp. Use for incremental sync.
Workflow the project's work items move through.
A comma-separated list of at most 100 values.
Search
Sorting
| Key | Sorts by |
|---|---|
title | Project title, A→Z. |
status | Lifecycle status. |
start_date | First day of the project. |
end_date | Last day of the project. |
last_activity | Most recent write anywhere in the project. |
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 |
|---|---|---|
logged_minutes | Sum of the worklog minutes on this project that the caller may see. Null without hours::read and a token covering api:read:times. | +1 |
tags | Tags on this project. A project takes at most 50, so this is the whole set. | to-many · +3 |
Other
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 ProjectList rows.
The rows, each a ProjectList.
per_page, next_cursor, prev_cursor, total, current_page, last_page.
self, next, prev.
Each row is a ProjectList: 31 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
Application name plus title. Never carries the project number, even when the organisation shows numbers in plnnrly.
Lifecycle status. Setting it to invoiced finishes every task on every budget of the project.
activefinishedinvoicedon-holdinactive
New values may be added.
Whether work is planned in sprints or on a simple board.
sprintssimple
New values may be added.
Responsible account manager. Set to the creating user and not writable.
Linked application. Writable only while the organisation has the Infrastructure feature: sending a non-null value without it is a 422 prohibited. Null clears the link regardless.
Absolute URL that opens this project's work 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 to the project page when none of them applies. Read-only.
Owning customer.
Optional sub-customer.
Responsible project manager.
Responsible account manager.
Workflow modes this project may switch to. Empty until a workflow is linked.
sprintssimple
New values may be added.
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