# Developer API

Qixoo is designed to need no developer, but the content it stores is open to you.

## Content API

Every site's saved content is readable as JSON at a stable URL. Find it on the site
card under **Connect → Content API**, with examples under the Code tab. Authentication
uses the `X-API-Key` header, carrying the same Site ID value that sits in your embed
snippet.

The response has two arrays:

- **`edits`** — every text, link, photo and style change made in the editor, each as
  `{selector, type, content, updated_at}`. `type` is one of `text`, `html`, `image`,
  `link` or `style`; `selector` is the CSS selector the change is anchored to. Edits
  are site-wide: an edit applies wherever its selector matches.
- **`blocks`** — library blocks inserted from **+ Add**, as
  `{id, type, position, anchor, content.html, updated_at}`, where `type` is the
  template id.

`site.language` carries the language an AI-built site was generated in. For a site
connected with the snippet nothing is stored there, so it is `null`.

Responses are cached for 60 seconds. Translated language versions are not included —
they live in the Languages module's own storage.

## Webhooks

Register URLs that receive a POST with the event `content.updated` whenever a site's
content changes. Configure them under **Connect → Webhooks**. The payload has the same
shape as the `edits` array above. Useful for cache purges and rebuild triggers.

## MCP

Qixoo exposes an MCP endpoint, so an AI client such as Claude can list your sites and
read, add, update and delete content blocks with your token. This lets you manage site
content conversationally from an AI assistant.

## Use cases

Pulling edited content into a mobile app or a feed. Triggering a static site rebuild
when a client saves. Letting an AI assistant update a client's opening hours without
anyone opening a browser.
