Content ingestion

Waveform can accept structured content from outside the chat — a CMS export, a docs pipeline, or an editorial tool — and map it into pages and collections without a full redesign.

What you can push

Send markdown, HTML, or JSON to a project content slot:

  • Replace or merge into an existing page/section.
  • Attach assets when the payload references them.
  • Optionally dedupe with a stable dedupe_key so retries stay idempotent.

Ask in chat to wire a slot ("expose the blog body as an ingest target"), or manage sources from Settings when the ingest UI is enabled.

API

Authenticated projects expose:

  • GET /api/v1/projects/:id/content-slots — list ingest targets
  • POST /api/v1/projects/:id/ingest — push a payload (format, content, mode, optional target / assets / dedupe_key)

Use a session or personal API key. Ingest can be disabled per environment (INGEST_API=false).

Signed webhooks

For machine-to-machine pushes, create an ingest hook with a shared secret. Inbound requests must include an HMAC signature (sha256=<hex>). Invalid signatures are rejected; valid payloads run the same mapping and build path as the authenticated API.

After ingest

Successful writes update content in R2 and can enqueue a staging or production rebuild so the live site reflects the new copy. Check the Content tab or ask the assistant to review what changed.

Related

  • Content & CMS — native collections and headless adapters
  • Forms — lead capture (separate from content ingest)