Skip to main content

Create content

object
Requires content:write and an Idempotency-Key header. Costs 1 credit for type: "slideshow", charged only on success.
201
type: "illustrated" or "hook_video" returns 201 with notice: "generation_not_wired" and status: "failed" — the row is created (so you can see the gap explicitly) but no generation runs. Their pipelines are asynchronous Durable-Object state machines not yet integrated with this API. Use type: "slideshow" today.
A slideshow’s result never includes rendered slide images — only text. Image compositing is a separate, currently client-side-only step (see Scheduling). POST /v1/schedules will fail with 409 no_images on this content until that gap closes.
On insufficient credits: 402 with {"error": {"code": "insufficient_credits", "insufficient": true, ...}}.

List content

GET /v1/content — requires content:read. Up to 100 rows, newest first.

Get content

GET /v1/content/{id} — requires content:read.

Approve / reject

POST /v1/content/{id}/approve and POST /v1/content/{id}/reject — requires content:approve. Approve fails with 409 not_ready if status isn’t "ready" yet. See The approval gate.

Remix

POST /v1/content/{id}/remix — not yet wired (returns 501 not_implemented), for the same reason illustrated/hook_video generation isn’t. Mirrors the app’s own free remix (re-pick images, keep text) once it lands.