Content Delivery API Reference
BetaAnonymous, edge-cached read and form-submission API served directly from each Kanorio site (https://{site}/api/v1, including permanent system hosts https://s-xxx.kanorio.com/api/v1). Generated directly from packages/shared/openapi/delivery.json.
Before you start
- No API key is required for published content. Browser fetch is supported via CORS allowed origins.
- Every response carries weak ETag, X-Kanorio-Cache-Tags, X-Request-Id, and X-RateLimit-* headers.
- To read unpublished drafts on your server, send X-Kanorio-Preview: knr_pv_<token> (or ?preview=1 with a server-held PAT).
- Collections items and pages return a top-level assets map with CDN URL, width, height, and 16px WebP LQIP placeholder.
Base URL
Endpoint descriptions match what AI assistants read.
Site Meta, Search & OpenAPI
/openapi.jsondelivery_openapi
BetaRead-onlyOpenAPI 3.1 specification for this site's Content Delivery API
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
curl -X GET "https://{site}/api/v1/openapi.json"/sitedelivery_site
BetaRead-onlyPublic site meta
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
curl -X GET "https://{site}/api/v1/site"/searchdelivery_search
BetaRead-onlySite search
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Query parameters
qstringRequiredkindstringlimitinteger
curl -X GET "https://{site}/api/v1/search"Header & Footer Globals
/globals/headers/{key}delivery_globals_header_get
BetaRead-onlyGlobal header navigation by key ('primary' or secondary header key) with siteSettings and assets
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Path parameters
keystringRequired
Query parameters
localestring
curl -X GET "https://{site}/api/v1/globals/headers/{key}"Pages & Redirects
/redirectsdelivery_redirects
BetaRead-onlyEnabled redirect rules (owner-defined and system 301s from page renames) for the external front end to apply
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
curl -X GET "https://{site}/api/v1/redirects"/pagesdelivery_pages_list
BetaRead-onlyPublished pages and hierarchy tree (paths, parentSlug, breadcrumbs, SEO)
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Query parameters
localestring
curl -X GET "https://{site}/api/v1/pages"/pages/{slug}delivery_page_get
BetaRead-onlyOne published page by slug (supports 2-level path and 'home' alias) with sections and assets map
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Path parameters
slugstringRequired
Query parameters
localestring
curl -X GET "https://{site}/api/v1/pages/{slug}"Collections & Blog Items
/collectionsdelivery_collections_list
BetaRead-onlyCollections and their fields (self-describing). System collections also list virtualFields (projection-only fields such as blog segments/toc/contentHtml and taxonomy counts) with scope item|fieldData and a TypeScript type literal.
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
curl -X GET "https://{site}/api/v1/collections"/collections/{key}/itemsdelivery_collection_items
BetaRead-onlyPublished items of a collection
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Path parameters
keystringRequired
Query parameters
limitintegeroffsetintegercursorstringfieldsstringexpandstringformatsstringComma-separated blog content formats: markdown, html, plaintext
previewstring
curl -X GET "https://{site}/api/v1/collections/{key}/items"/collections/{key}/items/{slug}delivery_collection_item
BetaRead-onlyOne published item by slug
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Path parameters
keystringRequiredslugstringRequired
Query parameters
fieldsstringexpandstringformatsstringComma-separated blog content formats: markdown, html, plaintext
previewstring
curl -X GET "https://{site}/api/v1/collections/{key}/items/{slug}"Forms & Anti-Abuse Challenge
/forms/{id}delivery_form_get
BetaRead-onlyPublic online form definition (fields, availability, consent)
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Path parameters
idstringRequired
curl -X GET "https://{site}/api/v1/forms/{id}"/forms/{id}/challengedelivery_form_challenge
BetaRead-onlyFetch a server-signed anti-spam challenge for form submission
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Path parameters
idstringRequired
curl -X GET "https://{site}/api/v1/forms/{id}/challenge"/forms/{id}/submitdelivery_form_submit
BetaSubmit answers to an online form
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Path parameters
idstringRequired
curl -X POST "https://{site}/api/v1/forms/{id}/submit" \
-H "Content-Type: application/json" \
-d '{"answers":null,"consent":true,"consentTextId":"string","locale":"string","pagePath":"string","_hp":"string","_challenge":{"nonce":"string","ts":1,"sig":"string"}}'Products & Catalog
/productsdelivery_products_list
BetaRead-onlyPublished products listed in the shop (no deliverable outline)
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Query parameters
pageintegerlimitintegercategorystringlocalestring
curl -X GET "https://{site}/api/v1/products"/products/{slug}delivery_products_get
BetaRead-onlyOne product, including the public outline of its deliverables
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Path parameters
slugstringRequired
Query parameters
localestring
curl -X GET "https://{site}/api/v1/products/{slug}"Free Preview Units
/units/{id}/opendelivery_units_open_preview
BetaOpen a free-preview unit anonymously (isPreview only)
- Permission
- none
- Rate limit
- 20 misses/s per site (burst 100), 10/s per IP; cache hits are unlimited
Path parameters
idstringRequired
curl -X POST "https://{site}/api/v1/units/{id}/open" \
-H "Content-Type: application/json" \
-d '{"mode":"read"}'Error codes
{
"error": {
"code": "ITEM_NOT_FOUND",
"message": "Item not found."
}
}| Code | HTTP |
|---|---|
| BAD_REQUEST / QUERY_INVALID | 400 |
| UNAUTHORIZED / PREVIEW_UNAUTHORIZED | 401 |
| FORBIDDEN / NO_ENTITLEMENT / NOT_YET_RELEASED | 403 |
| NOT_FOUND / COLLECTION_NOT_FOUND / ITEM_NOT_FOUND | 404 |
| RATE_LIMITED | 429 |