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"
  }
}
  • path may start with a slash or not. An empty path or / is the site's home page.
  • body is the Markdown. html is 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 not http, https, mailto or relative are removed.
  • Image addresses inside the body and seo.og_image are made absolute.
  • meta holds 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.xml lists every published page and every folder that has published pages.
  • robots.txt allows crawling and links the sitemap.
  • llms.txt is a Markdown index of your pages for AI tools; llms-full.txt includes 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.