List alignment category facts
Verified statements about the brand that future Brand Alignment runs grade AI-stated claims
against, e.g. “Ships to 12 EU countries” or “Founded in 2016”. A fact with category_id null is
brand-wide — it applies to claims in every category, not just one.
Get category ids from List alignment categories for
the category_id filter. Create or edit a fact with
Create alignment category fact or
Update alignment category fact.
Requires the read:alignment scope. Writing facts needs write:alignment.
GET /v1/brands/{brand_id}/alignment/category-factsAuthorization
| Header | Type | Required |
|---|---|---|
Authorization | Bearer asky_sk_… | required |
Path parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
brand_id | uuid | required | From List brands |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | integer | optional | Rows per page, 1 to 100. Defaults to 20. |
cursor | string | optional | Opaque cursor from the previous response. Treat it as a token, never construct one. |
category_id | uuid | optional | Restrict to facts scoped to this category, from List alignment categories. Omit to see every fact, including brand-wide ones. |
Request
cURL
curl --request GET \
--url 'https://api.askylabs.com/v1/brands/242546de-4cee-4a7d-952e-f6aa60c63ef8/alignment/category-facts?limit=50' \
--header 'Authorization: Bearer <api-key>'Response
200
{
"data": [
{
"id": "3f8b0e6a-9c42-4e17-8f0b-6c951a2d7e40",
"category_id": "b19f3c02-8e41-4b6a-9c17-5d2a781fe346",
"fact_text": "Enterprise plans include SSO via SAML and OAuth 2.0 at no extra cost.",
"sort_order": 0,
"created_at": "2026-08-12T10:02:31.884Z",
"updated_at": "2026-08-12T10:02:31.884Z"
},
{
"id": "7a2c9e14-5b06-4f8a-9d31-0e46b7c8f293",
"category_id": null,
"fact_text": "The company has been GDPR compliant since it was founded in 2019.",
"sort_order": 1,
"created_at": "2026-08-15T14:41:09.220Z",
"updated_at": "2026-08-15T14:41:09.220Z"
}
],
"pagination": {
"limit": 20,
"has_more": false,
"next_cursor": null
},
"request_id": "req_2f7b90c14ae8471da3cd"
}Response fields
| Field | Type | Description |
|---|---|---|
data[].id | uuid | required. Use it as fact_id with Update / Delete alignment category facts |
data[].category_id | uuid | null | required. null means brand-wide — checked against claims in every category |
data[].fact_text | string | required. Up to 1000 characters |
data[].sort_order | integer | required. Display order within its scope (its category, or the brand-wide group) |
data[].created_at | timestamptz | required |
data[].updated_at | timestamptz | required |
request_id | string | required. Also returned as the x-request-id header. Quote it when contacting support |
Errors
| Status | Code | When |
|---|---|---|
| 400 | invalid_request | A parameter is unknown or malformed. The message names it |
| 401 | invalid_token | The key is missing, malformed, or does not exist |
| 401 | token_expired | The key passed its expiry date |
| 401 | token_revoked | The key was revoked |
| 404 | not_found | The brand does not exist, or this key is not allowed to reach it |
| 429 | rate_limited | Over 300 requests per minute |
Notes
category_id filters, it does not merge. Passing category_id returns only facts scoped to
that exact category — brand-wide facts (category_id null) are not included alongside them. Omit
category_id to see every fact, category-scoped and brand-wide together.
sort_order is per scope, not global. Ordering restarts at 0 within each category and again
within the brand-wide group; it is not a single ranking across the whole list.