Skip to content

Update a project label ​

PATCH/api/v2/workspaces/{slug}/project-labels/{pk}/

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

The 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:optionalstring

New 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:optionalstring

Hex color used wherever the label is rendered. Maximum 255 characters. Can be empty.

description:optionalstring

Free-form note about what the label is for. Can be empty.

sort_order:optionalnumber

Ordering weight. Lower values sort first. Set it to reposition the label in the default list order.

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

StatusCodeCause
400invalid_requestA field failed validation, for example an empty name or a value over its length limit.
401unauthorizedMissing or invalid credentials.
402payment_requiredThe feature this endpoint belongs to isn't enabled on your plan, or is switched off.
403forbiddenOnly workspace owners and admins can update project labels, or your token lacks the scope.
404not_foundNo such project label or workspace, or it's outside your tenant.
406not_acceptableThe Accept header asks for a representation the API can't produce.
409conflictAnother project label already uses this name, in any letter case. The body carries its id.
409governance_migration_in_progressA governance migration is running, so the workspace is read-only. Retry after it finishes.
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.
Update a project label
bash
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"
}'
Response200
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"
}
Response409
json
{
  "type": "conflict",
  "code": "conflict",
  "detail": "A project label with this name already exists in this workspace.",
  "id": "2b6e9d14-7c3a-4f85-b0e2-9a1d5c8f6e37"
}