Skip to content

Update workspace features

PATCH/api/v2/workspaces/{slug}/features/

Turn workspace features on or off. The update is partial — send only the flags you want to change, and every field you omit keeps its current value. Omitting a field is not the same as sending null.

The response is the full feature object after the change, so you never need a follow-up GET to confirm what happened.

Toggling is_work_item_types_enabled moves the write surface

This flag decides whether work item types are managed at the workspace or the project level. Flipping it changes which endpoints accept type and property writes for every client in the workspace, and in-flight integrations start getting 409 from the surface they were using. Treat it as an administrative action, not a runtime decision. See Work item type modes.

Path Parameters

slug:requiredstring

The workspace slug. It appears in your Plane URLs — in https://app.plane.so/my-team/projects/, the slug is my-team.

Body Parameters

Every field is optional. id and created_at are read-only — sending them has no effect.

is_work_item_types_enabled:optionalboolean

Manage work item types at the workspace level (true) or per project (false). This is the work item type mode switch — read Work item type modes before changing it.

work_item_type_default_level:optionalinteger

The default level applied to work item types in this workspace. The schema declares no enum and no bounds, so it accepts any integer.

is_workitem_hierarchy_enabled:optionalboolean

Allow work items to be nested into a parent and child hierarchy. Note the spelling — no underscore between work and item.

is_project_grouping_enabled:optionalboolean

Allow projects to be organized into groups in the workspace.

is_teams_enabled:optionalboolean

Enable teamspaces for the workspace.

is_wiki_enabled:optionalboolean

Enable the workspace-level wiki.

is_initiative_enabled:optionalboolean

Enable initiatives, the layer that groups projects and epics toward a larger outcome.

is_customer_enabled:optionalboolean

Enable customers and customer requests.

is_release_enabled:optionalboolean

Enable releases.

is_state_duration_enabled:optionalboolean

Record how long work items spend in each state.

is_pi_enabled:optionalboolean

Enable Pi, Plane's AI assistant, in the workspace.

Scopes

workspaces.features:write

Errors

StatusCodeCause
400validation_errorA flag was sent with a non-boolean value, or work_item_type_default_level was not an integer. Includes an errors[] array naming the field.
401unauthorizedMissing or invalid credentials.
403forbiddenYour role or token scope can't change this workspace's features.
404resource_not_foundNo such workspace, or it's outside your tenant.
409conflictThe requested toggle conflicts with the workspace's current state and was not applied. Re-read the object before retrying.
429rate_limitedThrottled. Honor the Retry-After header before retrying.

Unknown keys are not toggles

A body key that is not one of the fields above is not a flag and does not change anything. Always compare the response object against what you sent rather than assuming a 200 means your flag moved; is_workitem_hierarchy_enabled in particular is easy to mistype as is_work_item_hierarchy_enabled.

Update workspace features
bash
curl -X PATCH \
  "https://api.plane.so/api/v2/workspaces/my-team/features/" \
  -H "X-Api-Key: $PLANE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "is_work_item_types_enabled": true,
  "is_state_duration_enabled": true
}'
Response200
json
{
  "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": true,
  "is_pi_enabled": false,
  "created_at": "2026-01-14T09:22:41.478363Z"
}
Response400
json
{
  "type": "https://api.plane.so/errors/validation_error",
  "title": "Validation Error",
  "status": 400,
  "code": "validation_error",
  "detail": "Invalid input.",
  "errors": [{ "field": "is_teams_enabled", "message": "Must be a valid boolean." }]
}

Confirm the mode after switching it

After a PATCH that changes is_work_item_types_enabled, read the value straight from the response and use it to pick your write surface. Anything you cached before this call is now wrong. Then follow Work item type modes — workspace mode also changes how types reach a project, since projects import workspace types instead of defining their own.