Get a state
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:requiredstringThe 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
| Status | Code | Cause |
|---|---|---|
401 | unauthorized | Missing or invalid credentials. |
403 | forbidden | Your role or token scope can't read this project's states. |
404 | resource_not_found | No such state, project, or workspace — or it's outside your tenant. |
429 | rate_limited | Throttled. 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.
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"import requests
response = requests.get(
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/states/f960d3c2-8524-4a41-b8eb-055ce4be2a7f/",
headers={"X-Api-Key": "your-api-key"},
)
print(response.json())const response = await fetch(
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/states/f960d3c2-8524-4a41-b8eb-055ce4be2a7f/",
{
headers: {
"X-Api-Key": "your-api-key",
},
}
);
const data = await response.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"
}{
"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."
}
