REST
Read resources, envelopes, parameters, and differences from GraphQL.
REST exposes generated read-only resources. Relations, Assets, and Taxonomy assignments remain IDs; Components stay inline.
Access
Use delivery.readPublished or delivery.readPreview with Backend scope only. Preview Bearers apply live human authorization.
Resources
| Method and path | Result |
|---|---|
GET /rest/{typeKey} |
List a Content or Asset resource |
GET /rest/{typeKey}/{id} |
Read one resource |
GET /rest/taxonomy/{vocabularyKey} |
List Terms |
GET /rest/taxonomy/{vocabularyKey}/{id} |
Read one Term |
GET /openapi.json |
Generated OpenAPI 3.1 |
GET /docs |
REST API browser |
A record uses camel-case lifecycle metadata:
{
"_id": "018f-example",
"status": "Published",
"createdAt": "2026-07-01T09:00:00.000Z",
"updatedAt": "2026-07-02T10:30:00.000Z",
"publishedAt": "2026-07-02T10:30:00.000Z",
"title": "Red chair",
"category": "018f-term"
}
A list wraps records in snake-case connection metadata:
{
"items": [{ "_id": "018f-example", "title": "Red chair" }],
"total_count": 1,
"page_info": {
"has_next_page": false,
"has_previous_page": false,
"start_cursor": "CURSOR",
"end_cursor": "CURSOR"
}
}
Query lists
Content and Asset lists accept generated deep filter, comma-separated sort, nearest, search, and first/after or last/before. URL-encode values in production clients.
curl 'https://delivery.example.com/rest/product?filter[price][gt]=50&sort=price_desc,title_asc&first=25' \
-H 'x-api-key: YOUR_DELIVERY_KEY'
Continue with after=END_CURSOR while leaving locale, filters, search, and sort unchanged. Requested page sizes above 100 are capped at 100, and Content accepts at most three sort plans.
Generated field filters, field or relation sorts, and nearest apply to Published delivery. Draft and Release Preview supports search, cursors, and ID or timestamp sorts only; field filters and nearest are unavailable.
Both list and single routes accept locale and render=html. HTML rendering applies recursively to Components and eligible Term custom fields.
Query Terms
Term lists accept search, pagination, status, eligible custom-field filters, zero or one sort, and parent:
- omit
parentto list all Terms; - set
parent=TERM_IDfor direct children; - set
parent=for root Terms.
Errors
REST errors are plain JSON, not GraphQL errors:
{ "error": "Unknown type: missing" }
Unknown types, Vocabularies, and IDs return 404. Invalid filters, sorts, or cursors return 400. A malformed REST page size falls back to the default. Preview responses use Cache-Control: private, no-store.
REST has no populate or expand option.