Get a template category
Retrieve one template category by id. Use it to resolve an id from a project template's category_ids to a name and slug.
The catalog is global, so the path has no workspace. An inactive category returns 404 unless the request includes ?is_active=false, the same filter that List template categories uses.
Path parameters
pk:requiredstring (uuid)The id of the template category to retrieve.
Query parameters
is_active:optionalbooleanSet to false to retrieve an inactive category. With false, an active category's id returns 404. Leave it out, or send true, to retrieve active categories only.
Response shaping
fields:optionalstringComma-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: created_at, description, id, is_active, logo_props, name, slug, sort_order, updated_at, updated_by_id.
See Sparse fields.
Scopes
template_categories:read
Errors
| Status | Code | Cause |
|---|---|---|
400 | invalid_request | ?fields= names an unknown field. |
401 | unauthorized | Missing or invalid credentials. |
402 | payment_required | Declared on every operation. The catalog has no feature gate, so this endpoint doesn't return it. |
403 | forbidden | Your token scope can't read template categories. |
404 | not_found | No category with this id, or the category is inactive and the request has no ?is_active=false. |
406 | not_acceptable | The Accept header asks for a representation the API can't produce. |
429 | rate_limited | Throttled. Honor the Retry-After header before retrying. |
curl -X GET \
"https://api.plane.so/api/v2/template-categories/0c6e2a8f-4d1b-4e93-b7a5-9f3c1d8e2b60/" \
-H "X-Api-Key: $PLANE_API_KEY"import requests
response = requests.get(
"https://api.plane.so/api/v2/template-categories/0c6e2a8f-4d1b-4e93-b7a5-9f3c1d8e2b60/",
headers={"X-Api-Key": "your-api-key"},
)
print(response.json())const response = await fetch(
"https://api.plane.so/api/v2/template-categories/0c6e2a8f-4d1b-4e93-b7a5-9f3c1d8e2b60/",
{
headers: {
"X-Api-Key": "your-api-key",
},
},
);
const data = await response.json();{
"id": "0c6e2a8f-4d1b-4e93-b7a5-9f3c1d8e2b60",
"name": "Engineering",
"slug": "engineering",
"description": "Templates for software teams",
"logo_props": {},
"sort_order": 10000.0,
"is_active": true,
"created_at": "2025-11-04T08:15:27.640912Z",
"updated_at": "2025-11-04T08:15:27.640912Z",
"updated_by_id": null
}{
"type": "not_found",
"code": "not_found",
"detail": "The requested resource was not found."
}
