Delivery API
Read published content with plain GET requests under /api/p/{ref}/. No auth, open CORS, only published (non-archived) content is exposed. {ref} is a project id or slug.
Nodes
GET /api/p/{ref}/nodes/by-path/*
Resolve a node by its slug path, e.g. /nodes/by-path/blog/about. Accepts ?locale=xx (defaults to the project’s default_locale; 400 invalid_locale otherwise).
Returns the renderable node:
{ "data": {
"id", "parent_id?", "slug", "type", "title", "locale", "path",
"blocks": [ { "id", "type", "order", "data" } ], // locale overrides merged
"seo": { canonical, robots, og, twitter, hreflang, jsonld, breadcrumbs },
"translated": true|false
} }GET /api/p/{ref}/nodes/{id}
Same renderable shape, resolved by node id. Also accepts ?locale.
GET /api/p/{ref}/nodes
List all published nodes (raw rows).
Collection entries
GET /api/p/{ref}/entries
Paginated published entries of a collection. Query: collection (required, slug path), page (1), per_page (20, max 100), q, sort.
{ "data": [ { "id", "slug", "title", "path", "updated_at" } ],
"total", "page", "per_page" }Localised read (translations module)
GET /api/p/{ref}/translations/nodes/{nodeId}
The published node merged with a locale’s meta + per-block overrides. Query ?locale=xx (required).
SEO & branding
GET /api/p/{ref}/sitemap.xml
A urlset (or a sitemapindex referencing sitemap-{n}.xml shards above 5000 nodes). One entry per locale with hreflang alternates. Needs the project’s public_base_url.
GET /api/p/{ref}/robots.txt
Standard robots with a Sitemap: line when a base URL is set.
GET /api/p/{ref}/theme
Tenant brand for the login screen (pre-auth): { logo_url, favicon_url, accent_color, name_override }.