Update a project
PATCHhttps://
Partially updates a project: absent keys are untouched and an empty body is rejected.
Access
- Token scope
- api:
write: projects Without it:
403 insufficient-token-scope. - Permission
- projects::
update Without it:
403 insufficient-permission. - Rate cost
- 1 unit, write bucket. A write costs the same whatever
viewyou ask for. - Also
- Accepts
If-Match. 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
Setting status to invoiced also finishes every task on every budget of the project, in the same write. account_manager_id and application_id are not accepted, and a project's workflow is changed in plnnrly. tag_ids replaces the tag set whole; an empty array clears it. Send If-Match with the ETag from your last read to detect a concurrent edit, which answers 412.
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.
Request body
Unknown keys are refused with 422, naming the key.
Lifecycle status. Setting it to invoiced finishes every task on every budget of the project.
active- Work is running.
finished- Delivered; nothing further is planned.
invoiced- Finished and billed. Setting this finishes every task on every budget of the project.
on-hold- Paused, and expected to resume.
inactive- Archived, kept for history and not worked on.
New values may be added.
Whether work is planned in sprints or on a simple board.
sprints- Work is planned in sprints, with a separate backlog and an active-sprint board.
simple- A single board with workflow columns, without sprints or a backlog.
New values may be added.
Owning customer.
Optional sub-customer.
Responsible project manager.
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.
Response 200
Returns a Project 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
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
412 Precondition failed.
415 Unsupported media type.
422 Unprocessable content.
7 errors every operation can return: 400, 401, 404, 406, 429, 500, 503
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