Update a project label
Change a project label's name, color, description, or position. Projects that carry the label keep it. Only workspace owners and admins can update project labels.
PATCH is partial. Send only the fields you want to change. Anything you omit keeps its current value.
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.
pk:requiredstring (uuid)The id of the project label to update.
Body Parameters
Every field is optional. Send the subset you are changing.
name:optionalstringNew display name. Maximum 255 characters. A name that another label uses, in any letter case, returns 409 conflict with that label's id. You can send the label's own name in any letter case.
color:optionalstringHex color used wherever the label is rendered. Maximum 255 characters. Can be empty.
description:optionalstringFree-form note about what the label is for. Can be empty.
sort_order:optionalnumberOrdering weight. Lower values sort first. Set it to reposition the label in the default list order.
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: color, created_at, created_by_id, description, id, name, sort_order, updated_at, updated_by_id.
See Sparse fields.
Scopes
workspaces.project_labels:write
Errors
| Status | Code | Cause |
|---|---|---|
400 | invalid_request | A field failed validation, for example an empty name or a value over its length limit. |
401 | unauthorized | Missing or invalid credentials. |
402 | payment_required | The feature this endpoint belongs to isn't enabled on your plan, or is switched off. |
403 | forbidden | Only workspace owners and admins can update project labels, or your token lacks the scope. |
404 | not_found | No such project label or 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 project label already uses this name, in any letter case. The body carries its id. |
409 | governance_migration_in_progress | A governance migration is running, so the workspace is read-only. Retry after it finishes. |
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 PATCH \
"https://api.plane.so/api/v2/workspaces/my-team/project-labels/d8a4f2c6-1e7b-4093-9c5a-6b2e0f8d3a71/" \
-H "X-Api-Key: $PLANE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Roadmap 2026",
"color": "#8e4ec6"
}'import requests
response = requests.patch(
"https://api.plane.so/api/v2/workspaces/my-team/project-labels/d8a4f2c6-1e7b-4093-9c5a-6b2e0f8d3a71/",
headers={"X-Api-Key": "your-api-key"},
json={
"name": "Roadmap 2026",
"color": "#8e4ec6",
},
)
print(response.json())const response = await fetch(
"https://api.plane.so/api/v2/workspaces/my-team/project-labels/d8a4f2c6-1e7b-4093-9c5a-6b2e0f8d3a71/",
{
method: "PATCH",
headers: {
"X-Api-Key": "your-api-key",
"Content-Type": "application/json",
},
body: JSON.stringify({
name: "Roadmap 2026",
color: "#8e4ec6",
}),
},
);
const data = await response.json();{
"id": "d8a4f2c6-1e7b-4093-9c5a-6b2e0f8d3a71",
"name": "Roadmap 2026",
"description": "Projects committed on this year's roadmap",
"color": "#8e4ec6",
"sort_order": 65535,
"created_at": "2026-01-14T09:22:41.478363Z",
"updated_at": "2026-02-03T16:45:12.904117Z",
"created_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
"updated_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430"
}{
"type": "conflict",
"code": "conflict",
"detail": "A project label with this name already exists in this workspace.",
"id": "2b6e9d14-7c3a-4f85-b0e2-9a1d5c8f6e37"
}
