List a website's routes, paginated, with effective block IDs.
List a website's routes, paginated and optionally filtered by state and pattern. Routes with empty block_ids are backfilled from the matching dynamic-default route, so the returned block_ids are the effective blocks to render.
Auth: API key (x-api-key header or api_key query param).
| Param | Type | Required | Notes |
|---|---|---|---|
websiteId | uuid | yes | Target website. |
api_key | string | no | Alternative to the x-api-key header. |
state | string | no | Filter by route state (exact match). |
pattern | string | no | Substring match on the route pattern (LIKE, wildcards escaped). |
limit | integer | no | Page size, default 50, clamped to 1β100. |
offset | integer | no | Rows to skip, default 0. |
Results are ordered by updated_at DESC.
{
"routes": [
{
"website_id": "...",
"path": "/docs/getting-started",
"pattern": "/docs/getting-started",
"label": "Getting Started",
"tags": [],
"block_ids": ["..."],
"template_block_ids": ["..."],
"override_mode": "merge",
"state": "Live",
"param_bindings": {},
"created_at": "2026-06-23T18:34:16Z",
"updated_at": "2026-06-23T20:36:55Z"
}
],
"total": 42,
"hasMore": true
}
total is the full filtered count; hasMore is offset + limit < total. label, param_bindings, template_block_ids, and override_mode are omitted or null when unset.
curl '{CMS_API_URL}/routes?websiteId=<uuid>&limit=20' \
-H 'x-api-key: <key>'
400 β missing or invalid websiteId401 β invalid API key (or missing when the server requires one)