Skip to content

Get a label ​

GET/api/v2/workspaces/{slug}/projects/{project_id}/labels/{pk}/

Retrieve one label by id. Use it when you already have a label id, for example from a work item's label_ids or a webhook payload, and need its current name, color, or parent.

If you only know the label by name or by your own identifier, use List labels with search or external_id instead.

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 label belongs to.

pk:requiredstring (uuid)

The label id.

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: color, created_at, created_by_id, description, external_id, external_source, id, name, parent_id, sort_order, updated_at, updated_by_id.

See Sparse fields.

Scopes ​

projects.labels:read

Errors ​

StatusCodeCause
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 read labels.
404not_foundNo such label in this project, or the workspace or project is outside your tenant.
406not_acceptableThe Accept header asks for a representation the API can't produce.
429rate_limitedThrottled. Honor the Retry-After header before retrying.

A label under the wrong project returns 404

Labels are project-scoped. Pairing a valid label id with a different project's project_id returns 404, the same response you get for an id that doesn't exist anywhere, so the API never reveals whether a label exists outside your reach.

Get a label
bash
curl -X GET \
  "https://api.plane.so/api/v2/workspaces/my-team/projects/4af68566-94a4-4eb3-94aa-50dc9427067b/labels/9c1f0b3d-6d2e-4c9a-8b41-2f7e5a0d6c88/" \
  -H "X-Api-Key: $PLANE_API_KEY"
Response200
json
{
  "id": "9c1f0b3d-6d2e-4c9a-8b41-2f7e5a0d6c88",
  "name": "Regression",
  "description": "Worked before the last release",
  "color": "#e5484d",
  "sort_order": 65535,
  "parent_id": "2b7d5e94-3c1a-4f60-9a8d-7e1c4b0f2d35",
  "external_id": null,
  "external_source": null,
  "created_at": "2026-01-14T09:22:41.478363Z",
  "updated_at": "2026-01-14T09:22:41.478363Z",
  "created_by_id": "16c61a3a-512a-48ac-b0be-b6b46fe6f430",
  "updated_by_id": null
}
Response404
json
{
  "type": "not_found",
  "code": "not_found",
  "detail": "No label matches the given query."
}