The CMS pillar is what turns a static AI-generated site into a real, editable property. Every text node and image you mark up with our conventions becomes a field in the project’s admin — no schemas, no migrations, no glue code.Documentation Index
Fetch the complete documentation index at: https://docs.neuraldraft.io/llms.txt
Use this file to discover all available pages before exploring further.
What this gives you
- Translation keys — dot-namespaced keys (
hero.headline,pricing.tiers.0.title) with per-language values. One bulk endpoint feeds your build process. - Image keys —
data-image-key="hero.background"on an<img>. The customer can swap the image in the admin; your build resolves the URL. - Brand context — voice, colors, fonts, audience exposed as a single resource. Read once at build time, or hot-fetch per request.
- Register-component — turn AI-generated HTML into an admin-editable
section in one call, with
data-translatekeys auto-discovered.
Quick example
Bulk-fetch every key for a locale at build time. One request, one response.Common workflows
1. Build-time fetch for SSG
Static-site generators (Next.js, Astro, Nuxt, Hugo) call/v1/content/bulk
once per locale at build time. Cache the response — re-fetch only when the
content.changed webhook fires.
2. Click-to-edit overlay on a live site
Drop a tiny JS snippet into your HTML. It looks fordata-translate
attributes and turns them into inline-editable fields when the user is signed
into the admin in the same browser.
/v1/content/{key} on save. Same backend, no rebuild.
3. AI registers a generated section
When the AI in your editor generates a hero, it callsregister_component(html, intent) via MCP. The component appears in your
admin instantly:
hero.headline as an editable text field. No schema
work.
4. Translate a key into N languages
Job id. Poll /v1/jobs/{id} for the
result, or subscribe to the content.changed webhook event to get notified
once each language lands.
5. Brand context for AI prompts
Read brand once, pass it into your AI calls. The MCP server does this for you; if you’re calling the API directly:Conventions
The two attributes the AI uses everywhere:section.field.0.subfield.
Reference
| Endpoint | Tag |
|---|---|
GET /v1/content/bulk | Content |
GET /v1/content/{key} | Content |
PUT /v1/content/{key} | Content |
PUT /v1/content (batch) | Content |
POST /v1/content/{key}/translate | Content |
POST /v1/components/register | Components |
GET /v1/components | Components |
GET /v1/brand | Brand |
PATCH /v1/brand | Brand |
POST /v1/images/upload | Images |
POST /v1/images/generate | Images |
POST /v1/newsletters/subscribe (public) | Forms |
GET /v1/newsletters | Forms |
DELETE /v1/newsletters/{id} | Forms |
POST /v1/contact-forms (public) | Forms |
GET /v1/contact-forms | Forms |
DELETE /v1/contact-forms/{id} | Forms |
Forms — newsletter & contact
Most AI-built sites need two simple capture surfaces: an email-collector for newsletters and a free-form contact form. Neural Draft ships both as first-class endpoints — no schemas to design, no spam-handling glue, and free (no credits charged, since these are storage + delivery, not AI).Public submit
The submit endpoints are public. Authenticate the project with a server-side API key inX-NeuralDraft-Project-Key (or pass ?project_id= for
unauthenticated client-side embeds where you don’t want to ship a key):
Webhook events
Both submits fire webhook events through the standard fan-out so you can pipe them into Slack, a CRM, or your own automation:newsletter.subscribed—{ id, email, app_lead, subscribed_at }contact_form.submitted—{ id, email, subject, message, data, submitted_at }
Admin list & delete
Listing and deleting submissions requires an API key withforms:read /
forms:write scope (or *). Both list endpoints support ?page /
?page_size (max 200) and ?search=; the newsletter list also accepts
?app_lead=true to filter out trial leads from your real subscriber list.