Delete a property option
Remove a choice from a project-level OPTION property. Use this when an option is no longer offered — a retired severity level, a team that no longer exists.
A successful delete returns 204 with an empty body. There is nothing to parse; branch on the status code.
If you only want to stop offering a choice without removing it from history, consider renaming it with Update a property option instead — a rename leaves every stored value intact because values reference the option id.
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.
project_id:requiredstring (uuid)The project that owns the property.
property_id:requiredstring (uuid)The OPTION property the option belongs to. See Work item properties.
pk:requiredstring (uuid)The id of the option to delete. Every ancestor in the path is enforced — an option id that belongs to a different property returns 404 rather than deleting anything.
Scopes
projects.work_item_properties:write
Errors
| Status | Code | Cause |
|---|---|---|
400 | validation_error | The request couldn't be processed as sent — for example a malformed identifier in the path. |
401 | unauthorized | Missing or invalid credentials. |
403 | forbidden | Your role or token scope can't write this project's properties. |
404 | resource_not_found | No such option, property, project, or workspace — or the option belongs to a different property. |
409 | work_item_types_managed_at_workspace | The workspace manages work item types at the workspace level, so this project-level write is rejected. |
429 | rate_limited | Throttled. Honor the Retry-After header before retrying. |
Wrong mode is a 409, not a 404
If the workspace manages work item types at the workspace level, this project-level DELETE returns 409 work_item_types_managed_at_workspace. Nothing was deleted, and the option still exists — the write belongs on the workspace surface. Delete it through Property options (workspace), and see Work item type modes for how to detect the mode before you write.
404 after a successful delete
A repeat DELETE of the same option returns 404 resource_not_found, not another 204. If you are reconciling state, treat 404 on delete as "already gone" rather than as a failure.
curl -X DELETE \
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/work-item-properties/c1a7f2d8-6b34-4e59-9f80-2d4a7c31e6b5/options/a84f1b60-95c2-4d37-8e5a-3b0f6d29c471/" \
-H "X-Api-Key: $PLANE_API_KEY" \
-iimport requests
response = requests.delete(
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/work-item-properties/c1a7f2d8-6b34-4e59-9f80-2d4a7c31e6b5/options/a84f1b60-95c2-4d37-8e5a-3b0f6d29c471/",
headers={"X-Api-Key": "your-api-key"},
)
print(response.status_code) # 204const response = await fetch(
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/work-item-properties/c1a7f2d8-6b34-4e59-9f80-2d4a7c31e6b5/options/a84f1b60-95c2-4d37-8e5a-3b0f6d29c471/",
{
method: "DELETE",
headers: {
"X-Api-Key": "your-api-key",
},
}
);
console.log(response.status); // 204(empty body){
"type": "https://api.plane.so/errors/work-item-types-managed-at-workspace",
"title": "Conflict",
"status": 409,
"code": "work_item_types_managed_at_workspace",
"detail": "Work item types are managed at the workspace level for this workspace."
}
