List categories
Every help-center category that holds at least one published, public article.
GET /api/v1/public/categoriesReturns the organization's help-center categories, for building a category nav.
Authentication
Publishable key: Authorization: Bearer pk_….
Query parameters
None. This endpoint is not paginated and returns no meta — you get the whole list
in one call.
Response
200 OK. data is an array of categories.
| Field | Type | Description |
|---|---|---|
id | uuid | The category ID. Pass it as category_id to List articles. |
name | string | The display name. |
slug | string | URL-safe name, for your own routes. |
position | integer | The display order set in the dashboard. |
{
"success": true,
"request_id": "6d7979ce52075b24979cd5b415319339",
"data": [
{ "id": "019f2192-a314-7bd5-96f7-08192a3b4c5d", "name": "Billing", "slug": "billing", "position": 0 },
{ "id": "019f2193-b425-7ce6-a708-192a3b4c5d6e", "name": "Shipping", "slug": "shipping", "position": 1 }
]
}Sort by position when you render. It's the order the team arranged the categories
in, and it's the only field that carries their intent — name and id order are
meaningless to a reader.
Empty categories are never returned
Only categories holding at least one published, public article appear. A category that exists in the dashboard but whose articles are all drafts or all internal is absent from this response entirely.
This is usually what you want — it means the help-center nav you build from this list can never contain a link to an empty page. But it does mean the categories here are a subset of the categories your team sees, so don't treat the two as the same list.
Errors
| Status | error.code | When |
|---|---|---|
401 | UNAUTHORIZED | The key is missing, unknown, revoked, or is an sk_ key. |
429 | RATE_LIMITED | Your organization's publishable-key budget is exhausted. |
Examples
curl "{BASE_URL}/api/v1/public/categories" \
-H "Authorization: Bearer pk_example_k3Yb9wQ2rTfA8sLdN1vH"