Skip to content

Create a workspace workflow ​

POST/api/v2/workspaces/{slug}/workflows/

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: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 ​

Plane ignores is_active on create because every new workflow starts inactive.

name:requiredstring

Display name, unique among the workspace's catalog workflows. Maximum 255 characters. Plane trims leading and trailing whitespace. A reused name returns 409 conflict.

description:optionalstring

Free-form description of the workflow. Nullable.

Response shaping ​

fields:optionalstring

Comma-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 ​

StatusCodeCause
400invalid_requestname is missing, empty, or longer than 255 characters.
401unauthorizedMissing or invalid credentials.
402payment_requiredWorkflows isn't on your plan, or the workspace already has a catalog workflow and Multiple workflows isn't on your plan.
403forbiddenYour role or token scope can't create workspace workflows.
404not_foundNo such workspace, or it's outside your tenant.
406not_acceptableThe Accept header asks for a representation the API can't produce.
409conflictAnother catalog workflow already uses this name.
409governance_migration_in_progressA governance migration is running in this workspace, so writes are paused. Retry after it finishes.
409states_managed_at_projectThe workspace doesn't have governance turned on. Use the project's workflows instead.
413payload_too_largeThe request body is over the size limit.
415unsupported_media_typeThe Content-Type isn't one this endpoint accepts.
429rate_limitedThrottled. Honor the Retry-After header before retrying.
Create a workspace workflow
bash
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"
}'
Response201
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
}
Response402
json
{
  "type": "payment_required",
  "code": "payment_required",
  "detail": "Multiple workflows is not enabled for this workspace."
}
Response409
json
{
  "type": "conflict",
  "code": "conflict",
  "detail": "A workflow with this name already exists in the workspace."
}