Skip to content

Delete a work item type ​

DELETE/api/v2/workspaces/{slug}/projects/{project_id}/work-item-types/{pk}/

Remove a work item type from a project. A successful delete returns 204 with an empty body.

The API rejects the delete with 409 conflict when the type is the project default or still has work items on it. The delete never cascades, so existing work items are not left without a type.

To stop people picking a type, set is_active to false instead. That works regardless of how many work items already use the type, and it is reversible.

This write requires project mode

If the workspace manages types at the workspace level, this returns 409 work_item_types_managed_at_workspace. Delete the type with the workspace endpoint instead. 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.

project_id:requiredstring (uuid)

The project the type belongs to.

pk:requiredstring (uuid)

The id of the work item type to delete.

Response shaping ​

fields:optionalstring

Comma-separated list of fields to return. Fields you don't request are left out of the response instead of coming back as null, so a missing key means you didn't ask for it and null means the value is null. id is always included, whether or not you name it.

Pass all to get every requestable field. An unknown field name returns 400 with the list of valid names and the closest match, so a typo is caught instead of being silently ignored.

Requestable here: created_at, description, external_id, external_source, governance_mode, id, is_active, is_active_in_project, is_default, is_default_in_project, is_epic, level, logo_props, name, project_ids, rollout, updated_at, updated_by_id.

See Sparse fields.

Scopes ​

projects.work_item_types:write

Errors ​

StatusCodeCause
400invalid_requestThe request could not be processed as sent.
401unauthorizedMissing or invalid credentials.
402payment_requiredThe feature this endpoint belongs to isn't enabled on your plan, or is switched off.
403forbiddenYour role or token scope can't delete work item types.
404not_foundNo such type, project, or workspace, or the type belongs to another project.
406not_acceptableThe Accept header asks for a representation the API can't produce.
409conflictThe type is the project default, or work items still use it.
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.
Delete a work item type
bash
curl -X DELETE \
  "https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/work-item-types/d1e7a4c9-2b58-4f36-9a0e-7c3b5d81f240/" \
  -H "X-Api-Key: $PLANE_API_KEY"
Response204
text
(empty body)
Response409
json
{
  "type": "conflict",
  "code": "conflict",
  "detail": "A work item type with existing work items cannot be deleted."
}

Before a delete will succeed ​

Work through these in order:

  1. The type must not be the default. Promote another type with mark-default. Marking a new default clears the flag on this one in the same request.
  2. No work items may reference it. Move them to another type, or delete them. There is no force flag to skip this check.

Both failures come back as 409 conflict, distinguished by the detail string. Branch on the status and code; treat detail as text for humans.

Two 409s, two different meanings

conflict means the type is protected or in use, which you can fix. work_item_types_managed_at_workspace means you called the wrong endpoint. Call the workspace endpoint instead. Always read the code, not just the status.