Create a project
POSThttps://
Creates a project and returns it in the detail view with a Location header.
Access
- Token scope
- api:
write: projects Without it:
403 insufficient-token-scope. - Permission
- projects::
create Without it:
403 insufficient-permission. - Rate cost
- 1 unit, write bucket. A write costs the same whatever
viewyou 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
The account manager defaults to the authenticated user and cannot be set directly. workflow_mode is required even on an organisation that does not use sprints, and the project's workflow itself is configured in plnnrly rather than here. Pass tag_ids to set the project's tags; the set is written whole.
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 201
Returns a Project in the detail view.
Headers
ETag- A strong validator of exactly this representation.
Idempotency-Replayedtruewhen this response was replayed from a storedIdempotency-Keyrather than produced by a new write.Location- The absolute URL of the created or queued resource.
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
409 Conflict.
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, POST. Anything else answers 405.
Something wrong or missing on this page? Tell us