Wriven — Headless CMS / Delivery API v1

Author it once.
Read it from anywhere.

An AI-native headless CMS. Define content types, publish entries, and read them over a typed Delivery API. No auth UI, no writes — just fetch and render.

8 content types · 22 published entries · rendering now

How it works

Author in the dashboard. Read from anywhere.

  1. 01

    Define

    Model content types in the dashboard — text, media, richtext, references. No schema migrations, no server restarts.

  2. 02

    Publish

    Author entries and hit publish. Drafts stay hidden; the Delivery API only ever returns published content.

  3. 03

    Read

    Fetch over a typed read API. A wrk_live_ key is project-scoped and public-safe — ship it straight in the bundle.

What you get

A read surface for published content.

  • Content model

    Typed fields — text, number, boolean, date, select, media, richtext, reference. Compose flat, render-friendly types.

  • Delivery API

    Published-only, paginated, with select, filter, sort and reference expansion. One endpoint per content type.

  • Media, resolved

    Media fields arrive as { url, alt, width, height }. Render the CDN url directly — no extra lookup, no asset ids.

  • Rich text

    Bodies are ProseMirror JSON. Inline images hydrate with src and dimensions. Render with one component.

  • References

    Point one entry at another. Expand them inline with include=1..3 and skip the request waterfall.

  • Read keys

    A wrk_live_ key reads published content for one project. Public-safe, revocable, never writes.

The read loop

Fetch and render. That is the whole integration.

The official typed client — zero dependencies, retries on 5xx, and pass-through caching for Next.js ISR. That is this site's entire data layer, exactly as shipped.

npm i @wriven-ai/clientGET /v1/projects/…/content/…
import { createClient } from '@wriven-ai/client';const wriven = createClient({  projectId, token: process.env.WRIVEN_TOKEN,});const { items } = await wriven.getEntries(  'blog_post',  { sort: '-publishedAt', limit: 10, include: 1 },)
The publish loop

Edit in the dashboard. Refresh here. Done.

The Delivery API stamps every response with cache tags; this site fetches under the same tags and the webhook purges them on publish. One key space, three systems, zero staleness.

  1. 01

    Publish in the dashboard

    An editor hits publish on an entry. Wriven records the revision and purges its CDN cache tags — proj_…, type_…, entry_….

  2. 02

    Webhook, signed

    Wriven POSTs an HMAC-signed webhook to this site. The route (via @wriven-ai/next) verifies signature and timestamp — no CDN in front can forge it.

  3. 03

    revalidateTag

    The route purges the same type_… tags this site fetched under. Affected pages regenerate on the next request — no rebuild, no redeploy.

The short version

Define a content type. Publish an entry. Read it here.

Wriven is an AI-native headless CMS — author in the dashboard, read over a typed Delivery API. Every page beyond this one is rendered from live published content.