Skip to content
Jetrepo
Esc
navigateopen⌘Jpreview
On this page

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 parent to list all Terms;
  • set parent=TERM_ID for 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.

Was this page helpful?