Skip to content

Get a state

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

Retrieve one state by id. Reach for this when you already hold a state_id — from a work item, a webhook payload, or a stored mapping — and need its current name, color, or group.

Checking group before you act is the reliable way to tell whether a work item is finished: a state named Done in one project and Shipped in another both report group: "completed".

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. A state id from a different project returns 404, even inside the same workspace.

pk:requiredstring (uuid)

The id of the state to retrieve.

Scopes

projects.states:read

Errors

StatusCodeCause
401unauthorizedMissing or invalid credentials.
403forbiddenYour role or token scope can't read this project's states.
404resource_not_foundNo such state, project, or workspace — or it's outside your tenant.
429rate_limitedThrottled. Honor the Retry-After header before retrying.

The response is flat

The state object has no nested records. created_by_id is returned as an id, so fetch the user separately if you need their name.

Existence is never leaked

A state outside your tenant returns 404, not 403. If you are resolving a cached id and get a 404, re-read the project's workflow with List states instead of retrying.

Get a state
bash
curl -X GET \
  "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"
Response200
json
{
  "id": "f960d3c2-8524-4a41-b8eb-055ce4be2a7f",
  "name": "In Progress",
  "description": "Actively being worked on",
  "color": "#3f76ff",
  "group": "started",
  "sequence": 25000,
  "is_default": false,
  "is_triage": false,
  "external_id": null,
  "external_source": null,
  "created_at": "2026-01-14T09:22:41.478363Z",
  "created_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430"
}
Response404
json
{
  "type": "https://api.plane.so/errors/resource-not-found",
  "title": "Not Found",
  "status": 404,
  "code": "resource_not_found",
  "detail": "No State matches the given query."
}