List property contexts
Return every context defined on a workspace-level property, as a paginated list. This is how you see the full picture of where a property applies and what it does in each place, before deciding whether to add a new context or edit an existing one.
Read the whole list rather than a single context when you need to reason about precedence: a context's effect depends on which other contexts exist. Contexts are returned in sort_order by default.
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.
property_id:requiredstring (uuid)The workspace-level property whose contexts you want. A project-level property id is not addressable here and returns 404 resource_not_found.
Query Parameters
Check your spelling on order_by and paginate — neither is validated, so both fail silently. An unrecognized order_by value falls back to the default ordering, and anything other than paginate=cursor uses offset pagination. A typo shows up as an unexpected sort order or envelope, not as an error.
Ordering
order_by:optionalstringField to sort by. Prefix with - for descending.
sort_order,-sort_order— the property's own context order. This is the default.created_at,-created_at— when each context was addedid,-id
Pagination
per_page:optionalintegerPage size. Defaults to 50, maximum 200. A property usually has a handful of contexts, so one page is normally the whole set.
offset:optionalintegerNumber of rows to skip from the start of the result set. Maximum 10000. Read the next value from the response rather than computing offsets yourself.
paginate:optionalstringSet to cursor to opt into the COUNT-free keyset envelope, which returns next_cursor and has_more instead of next and total_count. Pair it with order_by=created_at or order_by=id — the default sort_order ordering is not unique, so it is not cursor-eligible and the request is rejected with ordering_not_cursor_eligible.
count:optionalbooleanDefaults to true. Set to false to skip the COUNT(*) behind total_count; the field is then omitted from the response.
Scopes
workspaces.work_item_properties:read
Errors
| Status | Code | Cause |
|---|---|---|
401 | unauthorized | Missing or invalid credentials. |
403 | forbidden | Your role or token scope can't read workspace property settings. |
404 | resource_not_found | No such workspace or property, or it's outside your tenant. |
429 | rate_limited | Throttled. Honor the Retry-After header before retrying. |
Reads work in either mode
Listing contexts does not depend on how the workspace manages work item types. Only POST, PATCH, and DELETE are mode-gated — see Work item type modes.
curl -X GET \
"https://api.plane.so/api/v2/workspaces/my-team/work-item-properties/d1f7a3c9-5b62-4e08-9a41-7c3e2f8b6d05/contexts/?order_by=sort_order&per_page=50" \
-H "X-Api-Key: $PLANE_API_KEY"import requests
response = requests.get(
"https://api.plane.so/api/v2/workspaces/my-team/work-item-properties/d1f7a3c9-5b62-4e08-9a41-7c3e2f8b6d05/contexts/",
headers={"X-Api-Key": "your-api-key"},
params={"order_by": "sort_order", "per_page": 50},
)
print(response.json())const params = new URLSearchParams({ order_by: "sort_order", per_page: "50" });
const response = await fetch(
`https://api.plane.so/api/v2/workspaces/my-team/work-item-properties/d1f7a3c9-5b62-4e08-9a41-7c3e2f8b6d05/contexts/?${params}`,
{
headers: {
"X-Api-Key": "your-api-key",
},
}
);
const data = await response.json();{
"data": [
{
"id": "2f8c40a6-9d13-4b7e-85c0-1e6a3f9b7d52",
"name": "Default",
"is_required": false,
"is_multi": false,
"is_default": true,
"default_value": [],
"settings": {},
"sort_order": 65535,
"applies_to_all_projects": true,
"applies_to_all_work_item_types": true,
"external_id": null,
"external_source": null,
"created_at": "2026-01-14T09:22:41.478363Z",
"project_ids": [],
"issue_type_ids": [],
"options": [
{
"id": "5d0a9e34-7c62-4f18-b93d-0a4e6f2c8b71",
"name": "Low",
"is_default": false,
"sort_order": 10000
},
{
"id": "81b4f27c-3a05-4e96-8d21-7f6c0b4a9e53",
"name": "High",
"is_default": false,
"sort_order": 20000
}
]
},
{
"id": "6e2b90d4-1c73-4f58-a09e-3d8b5c14e7f2",
"name": "Bug severity",
"is_required": true,
"is_multi": false,
"is_default": false,
"default_value": [],
"settings": {},
"sort_order": 75535,
"applies_to_all_projects": false,
"applies_to_all_work_item_types": false,
"external_id": null,
"external_source": null,
"created_at": "2026-02-03T11:05:17.204918Z",
"project_ids": ["4af68566-94a4-4eb3-94aa-50dc9427067b", "9c3d7e21-6b45-4a80-8f19-2e0c7b5d3a64"],
"issue_type_ids": ["b7e04a95-2f18-4c63-9d57-8a12e6b0f439"],
"options": [
{
"id": "c58e2f01-4d97-4b3a-8e26-1f0b7a9c5d34",
"name": "S1 — Critical",
"is_default": false,
"sort_order": 10000
},
{
"id": "a49b6c72-8e15-4d30-b57c-2f81e0a6d938",
"name": "S2 — Major",
"is_default": true,
"sort_order": 20000
},
{
"id": "f13c8a60-7d24-4e59-9b02-6a5f1c3e8d47",
"name": "S3 — Minor",
"is_default": false,
"sort_order": 30000
}
]
}
],
"next": null,
"previous": null,
"total_count": 2,
"pagination": {
"style": "offset"
}
}{
"data": [
{
"id": "2f8c40a6-9d13-4b7e-85c0-1e6a3f9b7d52",
"name": "Default",
"is_required": false,
"is_multi": false,
"is_default": true,
"default_value": [],
"settings": {},
"sort_order": 65535,
"applies_to_all_projects": true,
"applies_to_all_work_item_types": true,
"external_id": null,
"external_source": null,
"created_at": "2026-01-14T09:22:41.478363Z",
"project_ids": [],
"issue_type_ids": [],
"options": []
}
],
"next_cursor": "b3A9MTcx",
"has_more": true,
"pagination": {
"style": "cursor"
}
}Reading the scope of each row
Two fields decide coverage on each axis, and the list is only legible if you read them in the right order:
applies_to_all_projectsfirst,project_idssecond. The first row above covers every project — its emptyproject_idsis a consequence of the wildcard, not an empty scope.applies_to_all_work_item_typesfirst,issue_type_idssecond, on the same principle.
Ranking the rows you get back tells you which one a given work item will actually use. Most specific wins: listed projects and listed types beat listed projects and all types, which beat all projects and listed types, which beat all projects and all types. See Property contexts overview for the full precedence rules.

