Get a work item
Retrieve one work item by its UUID. This is the endpoint to use after a list call, or any time you already hold the work item's id.
Unlike the list endpoint, this response populates custom_fields — the work item type's custom property values, keyed by property name. If you only have a PROJ-142-style key and not the project UUID, use Get a work item by identifier instead.
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 work item belongs to.
pk:requiredstring (uuid)The work item's UUID. This lookup is UUID-only — a PROJ-142 identifier here returns 404.
Query Parameters
expand:optionalstringComma-separated relations to embed alongside the ids: state, type, parent, assignees, labels.
Expansion is separate-key — ?expand=state keeps state_id and adds a state object next to it. An unknown value is a 400.
Archived work items are not returned
An archived work item sits outside the default query set, so a read of one returns 404 — the same response as a work item that never existed. Unarchive it first if you need to read it again. See Archive a work item.
Scopes
projects.work_items:read
Errors
| Status | Code | Cause |
|---|---|---|
401 | unauthorized | Missing or invalid credentials. |
403 | forbidden | Your role or token scope can't read work items in this project. |
404 | resource_not_found | No such work item, it belongs to another project or tenant, or it's archived. |
429 | rate_limited | Throttled. Honor the Retry-After header before retrying. |
curl -X GET \
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/work-items/8f4c2b1e-0d3a-4f7b-9c21-6e5a8b7d4f13/" \
-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"
"/work-items/8f4c2b1e-0d3a-4f7b-9c21-6e5a8b7d4f13/",
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" +
"/work-items/8f4c2b1e-0d3a-4f7b-9c21-6e5a8b7d4f13/",
{
method: "GET",
headers: { "X-Api-Key": "your-api-key" },
}
);
const data = await response.json();{
"id": "8f4c2b1e-0d3a-4f7b-9c21-6e5a8b7d4f13",
"name": "Fix login redirect loop",
"identifier": "PROJ-142",
"sequence_id": 142,
"priority": "high",
"state_id": "f960d3c2-8524-4a41-b8eb-055ce4be2a7f",
"type_id": "2d9d1a97-5c6f-4a1e-9d5b-8c2f7e30b6a4",
"assignee_ids": ["16c61a3a-512a-48ac-b0be-b6b46fe6f430"],
"label_ids": ["c1b8f3d6-9a44-4e12-8f7a-2b6d5c9e1a03"],
"parent_id": null,
"start_date": "2026-01-12",
"target_date": "2026-01-20",
"is_draft": false,
"archived_at": null,
"created_at": "2026-01-14T09:22:41.478363Z",
"created_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"custom_fields": {
"severity": {
"id": "b52e7c18-4d3f-4a90-8e61-0f7a3c9d2b45",
"value": "Sev-1",
"value_detail": {
"id": "7c0a5f39-2e84-4b17-9a6c-1d8e4f2b60c9",
"name": "Sev-1",
"logo_props": {}
}
}
}
}{
"id": "8f4c2b1e-0d3a-4f7b-9c21-6e5a8b7d4f13",
"name": "Fix login redirect loop",
"identifier": "PROJ-142",
"sequence_id": 142,
"priority": "high",
"state_id": "f960d3c2-8524-4a41-b8eb-055ce4be2a7f",
"type_id": "2d9d1a97-5c6f-4a1e-9d5b-8c2f7e30b6a4",
"assignee_ids": ["16c61a3a-512a-48ac-b0be-b6b46fe6f430"],
"label_ids": ["c1b8f3d6-9a44-4e12-8f7a-2b6d5c9e1a03"],
"parent_id": null,
"start_date": "2026-01-12",
"target_date": "2026-01-20",
"is_draft": false,
"archived_at": null,
"created_at": "2026-01-14T09:22:41.478363Z",
"created_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"custom_fields": {},
"state": {
"id": "f960d3c2-8524-4a41-b8eb-055ce4be2a7f",
"name": "In Progress",
"color": "#3f76ff",
"group": "started"
},
"assignees": [
{
"id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"display_name": "ana",
"avatar_url": "https://assets.plane.so/avatars/ana.png",
"email": "ana@example.com"
}
]
}What you get here that a list doesn't give you
custom_fields— the work item type's custom property values. The list endpoint returnsnullfor this field on every row to avoid resolving properties per row; only single-item reads populate it.- Cheaper expansion —
?expand=works on both, but expanding one work item is a fixed cost while expanding a full page multiplies it.
Everything else — the field set, the sparse *_id shape — is identical to a row from List work items.

