Delete a work item property
Remove a custom property definition from a project. The response is 204 with an empty body — there is nothing to parse, so branch on the status code.
Deleting a property removes the field itself, along with the choices defined for it and its attachments to work item types. If you only want the field to stop being offered, set is_active: false with Update a work item property instead — that keeps the definition and everything recorded against it, and it is reversible.
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 the property belongs to. A property id from a different project returns 404, even inside the same workspace.
pk:requiredstring (uuid)The id of the property to delete.
Scopes
projects.work_item_properties:write
Errors
| Status | Code | Cause |
|---|---|---|
400 | validation_error | A malformed identifier in the path. |
401 | unauthorized | Missing or invalid credentials. |
403 | forbidden | Your role or token scope can't delete properties. |
404 | resource_not_found | No such property, project, or workspace — or it's outside your tenant. |
409 | work_item_types_managed_at_workspace | This workspace manages work item types at the workspace level. Delete the property on the workspace endpoint instead. |
429 | rate_limited | Throttled. Honor the Retry-After header before retrying. |
A 409 means wrong surface, not missing permission
If the workspace manages work item types at the workspace level, this project endpoint returns 409 work_item_types_managed_at_workspace. The delete belongs on Delete a workspace work item property. Reading the same property through this path still works — only writes are mode-specific. See Work item type modes.
204 has no body
A successful delete returns 204 No Content. Calling .json() on the response throws. Check response.status === 204 (or response.ok) instead.
curl -X DELETE \
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/work-item-properties/9d2f0b74-6a51-4c8e-b3d7-2f1a8c05e964/" \
-H "X-Api-Key: $PLANE_API_KEY"import requests
response = requests.delete(
"https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/work-item-properties/9d2f0b74-6a51-4c8e-b3d7-2f1a8c05e964/",
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/9d2f0b74-6a51-4c8e-b3d7-2f1a8c05e964/",
{
method: "DELETE",
headers: {
"X-Api-Key": "your-api-key",
},
}
);
console.log(response.status); // 204No response body.
{
"type": "https://api.plane.so/errors/conflict",
"title": "Conflict",
"status": 409,
"code": "work_item_types_managed_at_workspace",
"detail": "Work item types are managed at the workspace level for this workspace."
}{
"type": "https://api.plane.so/errors/resource-not-found",
"title": "Not Found",
"status": 404,
"code": "resource_not_found",
"detail": "No IssueProperty matches the given query."
}Delete or deactivate?
| You want to… | Do this |
|---|---|
| Stop offering the field but keep its history | PATCH with is_active: false |
Take a choice out of an OPTION field, keep the field | Delete a property option |
| Remove the field from one type but keep it elsewhere | Detach a type property |
| Remove the definition from the project entirely | DELETE this endpoint |
Deleting is the only one of these you cannot undo by flipping a flag back.

