Get workspace features
Read the workspace's feature flags. There is one feature record per workspace, so this returns a single object rather than a list.
Call it during client start-up. is_work_item_types_enabled tells you which surface accepts work item type and property writes, and the remaining flags tell you which parts of your UI or sync are worth showing at all.
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.
Query Parameters
None. This endpoint takes no filters, no pagination, and no ?expand= — passing one is not a supported way to widen the response.
Scopes
workspaces.features:read
Errors
| Status | Code | Cause |
|---|---|---|
401 | unauthorized | Missing or invalid credentials. |
403 | forbidden | Your role or token scope can't read this workspace's features. |
404 | resource_not_found | No such workspace, or it's outside your tenant. |
429 | rate_limited | Throttled. Honor the Retry-After header before retrying. |
This is the mode check
is_work_item_types_enabled: true means the workspace manages work item types at the workspace level; false means each project does. Writes sent to the other surface return 409, with work_item_types_managed_at_workspace or work_item_types_managed_at_project. Reads are unaffected. See Work item type modes.
Cache it, but not forever
The flags change rarely, so caching the response for the life of a request batch is reasonable. Re-read it whenever a write returns 409 work_item_types_managed_at_workspace or work_item_types_managed_at_project — that code means your cached mode is stale.
curl -X GET \
"https://api.plane.so/api/v2/workspaces/my-team/features/" \
-H "X-Api-Key: $PLANE_API_KEY"import requests
response = requests.get(
"https://api.plane.so/api/v2/workspaces/my-team/features/",
headers={"X-Api-Key": "your-api-key"},
)
features = response.json()
if features["is_work_item_types_enabled"]:
base = "https://api.plane.so/api/v2/workspaces/my-team" # workspace mode
else:
base = "https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b"const response = await fetch("https://api.plane.so/api/v2/workspaces/my-team/features/", {
headers: {
"X-Api-Key": "your-api-key",
},
});
const features = await response.json();
const workspaceMode = features.is_work_item_types_enabled;{
"id": "a72f1c40-5b8e-4d19-9f2a-3c6d8e1b7a55",
"is_work_item_types_enabled": true,
"work_item_type_default_level": 0,
"is_workitem_hierarchy_enabled": false,
"is_project_grouping_enabled": false,
"is_teams_enabled": true,
"is_wiki_enabled": true,
"is_initiative_enabled": false,
"is_customer_enabled": false,
"is_release_enabled": false,
"is_state_duration_enabled": false,
"is_pi_enabled": false,
"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 Workspace matches the given query."
}Related
- Update workspace features
- Workspace features overview — every flag, one line each
- Work item type modes

