Create a workspace workflow
Add a workflow to the workspace catalog. A new workflow is always an inactive draft, with is_active and is_default set to false and an empty chain. No project or work item type resolves to it until a pick, a pin, or a mandate points at it.
Configure the chain, then activate the workflow with Update a workspace workflow. The overview lists the steps.
The first catalog workflow needs the Workflows plan feature. A second or later one also needs Multiple workflows. Without the required feature, the request returns 402 payment_required.
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.
Body Parameters
Plane ignores is_active on create because every new workflow starts inactive.
name:requiredstringDisplay name, unique among the workspace's catalog workflows. Maximum 255 characters. Plane trims leading and trailing whitespace. A reused name returns 409 conflict.
description:optionalstringFree-form description of the workflow. Nullable.
Response shaping
fields:optionalstringComma-separated list of fields to return. Unrequested keys are omitted from the response, not returned as null, so absent means "not requested" and null means "actually null". id always comes back whether or not you name it.
Pass all for every requestable field. An unknown name is a 400 that lists the valid set and suggests the closest match, so a typo can't silently cost you the saving.
Requestable here: created_at, created_by_id, description, id, is_active, is_default, name, project_ids, projects_count, referenced_resources, states, states_count, updated_at, updated_by_id, work_item_type_ids, work_item_types_count.
See Sparse fields.
Scopes
workspaces.workflows:write
Errors
| Status | Code | Cause |
|---|---|---|
400 | invalid_request | name is missing, empty, or longer than 255 characters. |
401 | unauthorized | Missing or invalid credentials. |
402 | payment_required | Workflows isn't on your plan, or the workspace already has a catalog workflow and Multiple workflows isn't on your plan. |
403 | forbidden | Your role or token scope can't create workspace workflows. |
404 | not_found | No such workspace, or it's outside your tenant. |
406 | not_acceptable | The Accept header asks for a representation the API can't produce. |
409 | conflict | Another catalog workflow already uses this name. |
409 | governance_migration_in_progress | A governance migration is running in this workspace, so writes are paused. Retry after it finishes. |
409 | states_managed_at_project | The workspace doesn't have governance turned on. Use the project's workflows instead. |
413 | payload_too_large | The request body is over the size limit. |
415 | unsupported_media_type | The Content-Type isn't one this endpoint accepts. |
429 | rate_limited | Throttled. Honor the Retry-After header before retrying. |
curl -X POST \
"https://api.plane.so/api/v2/workspaces/my-team/workflows/" \
-H "X-Api-Key: $PLANE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Delivery",
"description": "Engineering delivery flow with a review gate"
}'import requests
response = requests.post(
"https://api.plane.so/api/v2/workspaces/my-team/workflows/",
headers={"X-Api-Key": "your-api-key"},
json={
"name": "Delivery",
"description": "Engineering delivery flow with a review gate",
},
)
print(response.json())const response = await fetch("https://api.plane.so/api/v2/workspaces/my-team/workflows/", {
method: "POST",
headers: {
"X-Api-Key": "your-api-key",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Delivery",
description: "Engineering delivery flow with a review gate",
}),
});
const data = await response.json();{
"id": "9c1f0b3d-6d2e-4c9a-8b41-2f7e5a0d6c88",
"name": "Delivery",
"description": "Engineering delivery flow with a review gate",
"is_active": false,
"is_default": false,
"states_count": 0,
"projects_count": 0,
"work_item_types_count": 0,
"states": [],
"referenced_resources": {
"states": {},
"users": {}
},
"project_ids": [],
"work_item_type_ids": [],
"created_at": "2026-01-14T09:22:41.478363Z",
"updated_at": "2026-01-14T09:22:41.478363Z",
"created_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"updated_by_id": null
}{
"type": "payment_required",
"code": "payment_required",
"detail": "Multiple workflows is not enabled for this workspace."
}{
"type": "conflict",
"code": "conflict",
"detail": "A workflow with this name already exists in the workspace."
}
