REST
Read resources, envelopes, filters, pagination, locales, and OpenAPI.
REST exposes generated read-only resources. Relations, Assets, and Taxonomy assignments remain IDs; Components stay inline.
Access
Use delivery.readPublished or delivery.readPreview with matching Backend and Environment scopes. 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 |
Canonical OpenAPI 3.1 bytes |
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 bounded ids, generated deep filter, comma-separated sort, nearest, search, and first/after or last/before. URL-encode values in production clients.
curl --globoff '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.
Use repeated ids values to resolve up to 100 unique records of one type. ids may be combined only with locale and render; filters, search, sorting, parent selection, status, and cursor arguments return 400 when combined with it.
Generated field filters, field or relation sorts, and nearest apply to Published delivery. Candidate 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.
OpenAPI identity
/openapi.json requires either a Delivery key or a scoped Preview Bearer. Its exact canonical bytes are identified by ETag and X-JetRepo-OpenAPI-SHA256. Use the hash to detect schema drift before regenerating a frontend client.
The document describes API-key and Preview-Bearer alternatives, typed error bodies, field filters, sort values, Component discriminators, relationship targets, page envelopes, and Published/Candidate provenance headers.
Management Delivery inspection also returns the hash and an authorization-checked OpenAPI resource URI. This lets a delegated agent generate frontend code before requesting a runtime Delivery key.
Errors
REST errors use plain JSON:
{ "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.
Generate a typed client from the exact Backend contract instead of maintaining response interfaces by hand.