Get a work item property
Retrieve one property definition by id. Reach for this when you already hold a property id — from a type's property list, a stored mapping, or a create response — and need its current shape before reading or writing values.
The response includes the resolved options array, so a single request tells you both what the field is and which choices it offers. Check property_type before you build a value: it decides what the field can hold, and relation_type narrows it further for RELATION properties.
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 property belongs to. A property id from a different project returns 404, even inside the same workspace.
pk:requiredstring (uuid)The id of the property to retrieve.
Scopes
projects.work_item_properties:read
Errors
| Status | Code | Cause |
|---|---|---|
401 | unauthorized | Missing or invalid credentials. |
403 | forbidden | Your role or token scope can't read this project's properties. |
404 | resource_not_found | No such property, project, or workspace — or it's outside your tenant. |
429 | rate_limited | Throttled. Honor the Retry-After header before retrying. |
Reads ignore the mode
This endpoint works whether the workspace manages work item types at the project or workspace level — only writes are mode-specific, and only writes return a 409. See Work item type modes.
No expansion on properties
Work item properties don't accept ?expand=. The response is the object shown here, with options already resolved inline.
Existence is never leaked
A property outside your tenant returns 404, not 403. If a cached id starts returning 404, re-read the catalog with List work item properties rather than retrying.
curl -X GET \
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/work-item-properties/9d2f0b74-6a51-4c8e-b3d7-2f1a8c05e964/" \
-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-item-properties/9d2f0b74-6a51-4c8e-b3d7-2f1a8c05e964/",
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-item-properties/9d2f0b74-6a51-4c8e-b3d7-2f1a8c05e964/",
{
headers: {
"X-Api-Key": "your-api-key",
},
}
);
const data = await response.json();{
"id": "9d2f0b74-6a51-4c8e-b3d7-2f1a8c05e964",
"name": "severity",
"display_name": "Severity",
"description": "How badly this affects customers",
"property_type": "OPTION",
"relation_type": null,
"is_multi": false,
"is_required": true,
"is_active": true,
"default_value": [],
"options": [
{
"id": "3e7a5c19-42b8-4d06-9f3e-7c1b8a0d2456",
"name": "Critical",
"description": "Production is down",
"is_default": false,
"sort_order": 15000,
"external_id": null,
"external_source": null
},
{
"id": "b6c04f83-1d29-4e57-8a3b-90e2f5c7d418",
"name": "Major",
"description": "A core workflow is broken",
"is_default": true,
"sort_order": 25000,
"external_id": null,
"external_source": null
},
{
"id": "7f52d3a8-0e14-4c69-b28d-a1f6e903c5b7",
"name": "Minor",
"description": "Cosmetic or low impact",
"is_default": false,
"sort_order": 35000,
"external_id": null,
"external_source": null
}
],
"settings": {},
"validation_rules": {},
"logo_props": {},
"external_id": null,
"external_source": null,
"created_at": "2026-01-14T09:22:41.478363Z"
}{
"type": "https://api.plane.so/errors/resource-not-found",
"title": "Not Found",
"status": 404,
"code": "resource_not_found",
"detail": "No IssueProperty matches the given query."
}name is the stable key, display_name is the label
People rename fields. If you are storing a mapping between a Plane property and a field in your own system, key it on id — and use name when you need something human-legible that changes less often than the label. display_name is the one that shows up in the UI, and the one you send when you want to change it.

