Deze referentie is alleen in het Engels. Naar het Nederlandse REST API-overzicht

Diese Referenz gibt es nur auf Englisch. Zur deutschen REST-API-Übersicht

Cette référence existe uniquement en anglais. Aller à la présentation de l'API REST en français

Esta referencia solo está en inglés. Ir a la introducción de la API REST en español

POST/budgets

Create a budget

POSThttps://<your-url>/api/v2/budgets

MCP id budgets.storeAlso on this path: GET List budgets

View as Markdown openapi.json

Creates a budget on the project named in the body and returns it with a Location header.

Access

Token scope
api:write:budgets

Without it: 403 insufficient-token-scope.

Permission
budgets::create

Without it: 403 insufficient-permission.

Rate cost
1 unit, write bucket. A write costs the same whatever view you ask for.
Also
Accepts Idempotency-Key. 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

project_id is settable here and nowhere else: a budget cannot be moved to another project afterwards. budget and spendable are minutes, not money. The position is set by the server to the highest existing position in the organisation plus one. The write also bumps the owning project's updated_at, so the project's ETag changes and it reappears in an incremental filter[updated_at][gte] window, and it is recorded in the project's activity timeline rather than a timeline of its own.

Query parameters

Unknown parameters are refused with 400, naming the parameter.

viewstring

Which field set to render.

summarydetaildefault

Request headers

X-Request-Idstringpattern

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.

Idempotency-Keystring≤ 255

A caller-chosen key that makes this POST safe to retry. Replaying it returns the original response with Idempotency-Replayed: true.

Request body

Unknown keys are refused with 422, naming the key.

project_idinteger → Project.idRequired

Owning project. Settable at create time only; a budget cannot be moved to another project.

descriptionstring≤ 255Required

Budget description as shown in the UI. This is the budget's label and the only field ?q= searches; a budget has no title.

budgetinteger≥ 0Required

Budgeted amount of work, in minutes.

spendableinteger≥ 0

The portion of the budget that may be allocated to tasks, in minutes. A stored value, never decremented by logged time.

statusstring

Lifecycle status of the budget.

active
The default: work is booked against this budget.
inactive
Retired, kept for history and no longer planned against.
blocked
Paused, usually because the project itself is on hold.

New values may be added.

is_openboolean

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.

is_billableboolean

Whether time logged on this budget is billable.

start_datedate (YYYY-MM-DD) or null

First day the budget covers, null when it has no start.

end_datedate (YYYY-MM-DD) or null

Last day the budget covers, null when it has no end.

Must be on or after start_date.

budget_group_idinteger or null → BudgetGroup.id

Budget group this budget is filed under, null when ungrouped.

Response 201

Returns a Budget in the detail view.

Headers

ETag
A strong validator of exactly this representation.
Idempotency-Replayed
true when this response was replayed from a stored Idempotency-Key rather than produced by a new write.
Location
The absolute URL of the created or queued resource.
RateLimit
The IETF httpapi-ratelimit-headers form 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

Errors

7 errors every operation can return: 400, 401, 404, 406, 429, 500, 503

This path allows GET, POST. Anything else answers 405.