List budgets
GEThttps://
Returns the organisation's budgets, lowest position first, each with the number of kanban tasks the caller may see.
Access
- Token scope
- api:
read: budgets Without it:
403 insufficient-token-scope. - Permission
- budgets::
read Without it:
403 insufficient-permission. - Rate cost
- 1 unit, read bucket.
view=detailmakes it 3. Adds: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
There is no projects/{project}/budgets path: pass filter[project_id] to read one project's budgets, or filter[budget_group_id] to read one group's. Positions are numbered across the whole organisation and renumbered per project in plnnrly, so a page spanning several projects interleaves and ties break by id. Pass view=detail for the full payload at three read units instead of one; the two views are identical on this resource.
Query parameters
Unknown parameters are refused with 400, naming the parameter.
30 parameters in 5 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
Opt in to page-number paging: 1-based, at most 1000. Omit it, the default, to page by opaque cursor, which is what links.next hands you. Cannot be combined with cursor. Published only on collections that count their rows on every request. This collection's default sort is a display position that changes whenever someone drags the list into a new order in plnnrly, so a page number can skip or repeat a row if the list is reordered between two page requests. These collections rarely exceed one page; for a stable walk, send sort=id and follow links.next without page.
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
Budget group the budget is filed under.
A comma-separated list of at most 100 values.
Creation timestamp. Pair with sort=id for a stable full export.
Last day the budget covers.
Whether the field is null.
Whether the budget is open-ended, i.e. its spendable cap is ignored and the over-budget warning is skipped.
First day the budget covers.
Whether the field is null.
Lifecycle status of the budget.
A comma-separated list of at most 100 values.
activeinactiveblocked
New values may be added.
Search
Sorting
| Key | Sorts by |
|---|---|
order_column | Position within the project as arranged in plnnrly, lowest first. The values are numbered across the whole organisation and renumbered per project, so a page of budgets from several projects interleaves and ties are broken by id. |
start_date | First day the budget covers. |
end_date | Last day the budget covers. |
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.
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 BudgetList rows.
The rows, each a BudgetList.
per_page, next_cursor, prev_cursor, total, current_page, last_page.
self, next, prev.
Each row is a BudgetList: 18 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
Owning project. Settable at create time only; a budget cannot be moved to another project.
Position within the project as arranged in plnnrly. Set on create to the highest existing position plus one, and renumbered 1..n per project whenever the project's budget page is saved in plnnrly. Not writable.
Budget description as shown in the UI. This is the budget's label and the only field ?q= searches; a budget has no title.
The portion of the budget that may be allocated to tasks, in minutes. A stored value, never decremented by logged time.
Whether the budget is open-ended: when true the spendable cap is ignored, plnnrly shows "open" in place of a minute total and the over-budget warning is skipped.
The project this budget belongs to.
The budget group this budget is filed under.
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