Skip to content

Delete a state

DELETE/api/v2/workspaces/{slug}/projects/{project_id}/states/{pk}/

Remove a state from a project's workflow. A successful delete returns 204 with an empty body.

Two conditions block a delete, and you have to clear the condition before the state will go — see Before you delete.

Path Parameters

slug:requiredstring

The workspace slug. It appears in your Plane URLs — in https://app.plane.so/my-team/projects/, the slug is my-team.

project_id:requiredstring (uuid)

The project the state belongs to.

pk:requiredstring (uuid)

The id of the state to delete.

Scopes

projects.states:write

Errors

StatusCodeCause
401unauthorizedMissing or invalid credentials.
403forbiddenYour role or token scope can't delete states.
404resource_not_foundNo such state, project, or workspace — or it's outside your tenant.
409conflictThis is the project's default state.
409conflictThe state still holds work items.
429rate_limitedThrottled. Honor the Retry-After header before retrying.
Delete a state
bash
curl -X DELETE \
  "https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/states/f960d3c2-8524-4a41-b8eb-055ce4be2a7f/" \
  -H "X-Api-Key: $PLANE_API_KEY"
Response204

No response body.

Response409
json
{
  "type": "https://api.plane.so/errors/conflict",
  "title": "Conflict",
  "status": 409,
  "code": "conflict",
  "detail": "The default state cannot be deleted."
}
Response409
json
{
  "type": "https://api.plane.so/errors/conflict",
  "title": "Conflict",
  "status": 409,
  "code": "conflict",
  "detail": "This state still has work items in it."
}

Before you delete

Both protected cases return 409 conflict, so branch on the detail only for messaging — the fix differs:

  • The project's default state. Every project needs somewhere for work items to land when no state_id is supplied. Promote another state with Update a state and "is_default": true, which demotes the current default, then delete it.
  • A state that still holds work items. Deleting it would leave those work items without a status. Move them to another state first — filter the project's work items by this state, PATCH each one to the replacement state, then retry the delete.

A safe teardown is therefore: reassign work items, hand off the default flag if this state has it, delete.

Deletes are soft

The state stops appearing in the API and in Plane, but the row is retained. Treat the 204 as final for integration purposes — the states API has no restore operation.