Content delivery API
Read published website content as JSON or HTML, plus sitemap, robots and AI index files, with no sign-in.
Content delivery is the public, read-only side of Content Studio. Your website or app reads the pages you have published, with no sign-in. Everything you publish is available as structured data (to render in your own design), as ready-made HTML, and as the files search engines and AI crawlers look for.
Authoring is covered in Content authoring.
Before you start
Delivery is closed by default. For a site to be readable, the workspace's role for visitors who are not signed in must grant content:deliver on that site (and on assets for images). See Public endpoints. Until then every URL below answers 404.
In the app, open the site's settings and use the For developers tab. It lists these addresses ready to copy.
Base address
https://axisiq.co/content/{orgId}/{siteKey}
{orgId} is the Organization ID from Settings. {siteKey} is the site's key (called the bucket key in the authoring API).
Endpoints
| Method | Path | Returns |
|---|---|---|
GET |
…/resolve?path= |
One published page, as JSON |
GET |
…/list?prefix=&tag= |
Published pages, as JSON summaries |
GET |
…/render/{path} |
A complete HTML page for crawlers and link previews |
GET |
…/sitemap.xml |
A sitemap of everything published |
GET |
…/robots.txt |
A robots.txt that points at the sitemap |
GET |
…/llms.txt |
An index of pages for AI tools |
GET |
…/llms-full.txt |
The same with every page's text included |
GET |
/content/{orgId}/assets/{key} |
An uploaded image or file |
HEAD works on all of them. These endpoints accept requests from any website (browser JavaScript on any origin may call them), and are limited to 240 requests per minute per IP address.
Only published pages appear. Drafts, unpublished and archived pages are never served, and a page that has been edited since publishing still shows its published version until you publish again.
GET …/resolve?path=
Returns the page that lives at a path. This is how a site turns a URL into content.
curl -s "https://axisiq.co/content/$ORG/website/resolve?path=/blog/hello"
{
"data": {
"path": "blog/hello",
"title": "Hello world",
"body": "# Hello\n\nFirst post.",
"html": "<h1>Hello</h1>\n<p>First post.</p>\n",
"seo": {
"title": "Hello world | Example",
"description": "Our first post",
"keywords": ["hello"],
"canonical_url": "",
"og_title": "",
"og_description": "",
"og_image": "https://axisiq.co/content/…/assets/2026/10/3fa9c1d2-hero.jpg",
"noindex": false,
"schema_type": "BlogPosting",
"author": "Asha Rao"
},
"tags": ["news"],
"meta": { "author_role": "Editor" },
"published_at": "2026-10-04T09:00:00Z"
}
}
pathmay start with a slash or not. An empty path or/is the site's home page.bodyis the Markdown.htmlis the same text already converted to safe HTML you can drop into a page, which helps stacks without a Markdown library (WordPress, Django, Liquid templates).- In
html, raw HTML typed into the Markdown is shown as text rather than run, and links that are nothttp,https,mailtoor relative are removed. - Image addresses inside the body and
seo.og_imageare made absolute. metaholds the values of the site's custom fields.- A path with no published page answers
404 NOT_FOUND.
GET …/list
Published pages without their text, for index pages and navigation.
| Parameter | Notes |
|---|---|
prefix |
Only pages under this folder, such as blog/ |
tag |
Only pages with this tag |
{ "data": { "documents": [ { "path": "blog/hello", "title": "Hello world", "seo": { … }, "tags": ["news"], "meta": {}, "published_at": "2026-10-04T09:00:00Z" } ] } }
Newest published first. Use resolve for a page's body.
GET …/render/{path}
The same published page as a complete, plain HTML document: title, description, social preview tags, structured data (schema.org JSON-LD), breadcrumbs, the page text and links to the site's sections. It has no design of its own.
It exists for visitors that do not run JavaScript, such as search engines other than Google, AI crawlers and link-preview scrapers, which would otherwise receive an empty app shell. A common setup is to send those visitors to render and everyone else to your normal site. An unknown path answers a real 404 with an HTML page, so crawlers do not index missing pages.
Discovery files
sitemap.xmllists every published page and every folder that has published pages.robots.txtallows crawling and links the sitemap.llms.txtis a Markdown index of your pages for AI tools;llms-full.txtincludes every page's text.
Links in these files are built from the site's Web address setting (in the site's General settings) if you set one, otherwise from the address that was requested. A site served from its own domain can proxy /sitemap.xml, /robots.txt and /llms.txt straight to these URLs.
They are generated on each request, so a newly published page appears at once (responses can be cached by browsers for a few minutes).
Assets
GET https://axisiq.co/content/{orgId}/assets/2026/10/3fa9c1d2-hero.jpg
Images and files uploaded through content authoring. They are served with caching headers, ETag and 304 support. Common image, PDF, audio and video types display inline; others download.
Private headless use
If you do not want content open to the world, leave the visitor role closed and read it through the signed-in authoring API with an access key that has content:read. That API returns drafts too.
Errors
Every failure on these endpoints is a plain 404 NOT_FOUND (or a rate-limit 429), so a visitor cannot tell a missing page from one that is simply not public.
Related
- Content authoring
- Public endpoints
- In the product: Content Studio