API DOCS

Overview and quickstart

Generate a whiteboard explainer video with one API call. Authenticate with a Bearer key, POST a prompt, and poll for the finished video and its editable scene graph.

Animations turns a prompt or a document into a whiteboard explainer video, and hands you back both the rendered video and its editable scene graph. This is the reference for the HTTP API, the CLI, the TypeScript SDK, and the MCP server.

Get an API key ➜
THE SHAPE OF IT

What you get back

There is one generation endpoint behind four front doors: the HTTP API, the TypeScript SDK, the CLI, and an MCP server your agent can call as a tool. Whichever you use, a finished generation hands back two things: the rendered video, and the scene graph it was drawn from.

The scene graph is the part worth integrating against. It is JSON, every scene in it is addressable, and you can send an edit for a single scene and re-render only that scene. One wrong sentence in scene three costs you scene three, not the whole video.

API access is included on every paid plan. Create an API key from Settings in the app once you are on a plan. API generations draw from your plan minutes at the same rate as the app. There is no separate API price.

KEYS

Authentication

Every request is authenticated with your API key as a Bearer token. Create a key in the app under Settings, then send it on the Authorization header:

Request header
Authorization: Bearer sk_...

The key is shown once, at creation. Keep it secret. The base URL for every endpoint is:

Base URL
https://animations.snow66.com/api
TWO CALLS

Quickstart

1. Create an explainer

Send your topic as input and an optional target length as length (a friendly "M:SS" string like "0:30" or "1:00", in 30-second steps). Omit length for automatic length.

POST /v1/explainer
curl -X POST https://animations.snow66.com/api/v1/explainer \
  -H "Authorization: Bearer sk_..." \
  -H "Content-Type: application/json" \
  -d '{ "input": "Explain how DNS resolves a domain name", "length": "0:30" }'

The call returns 202 Accepted immediately with a queued record. Rendering runs in the background and takes a few minutes.

202 Accepted
{
  "id": "10f00eee-d2d6-4a1b-b708-f0391faaa85b",
  "status": "queued",
  "prompt": "Explain how DNS resolves a domain name",
  "lengthSeconds": 30,
  "voice": "animations:sulafat",
  "language": "en",
  "aspect": "16:9",
  "videoUrl": null,
  "sceneGraph": null
}

2. Poll for the result

Fetch the explainer by id until its status reaches a terminal state. The lifecycle is queued then generating then rendering then ready (done) or failed.

GET /v1/explainer/:id
curl https://animations.snow66.com/api/v1/explainer/10f00eee-d2d6-4a1b-b708-f0391faaa85b \
  -H "Authorization: Bearer sk_..."

When it is ready, the record carries the video URL and the editable scene graph:

200 OK
{
  "id": "10f00eee-d2d6-4a1b-b708-f0391faaa85b",
  "status": "ready",
  "videoUrl": "https://animations.snow66.com/media/....mp4",
  "sceneGraph": { "scenes": [ ... ] }
}

Friendly and classic field names. input and length are the friendly request fields. The older prompt (string) and lengthSeconds (a number, a positive multiple of 30) are still accepted as aliases, so existing integrations keep working. When both are sent, the friendly field wins.

KEEP READING

Where to go next

API referenceEvery endpoint, with request and response shapes./docs/api
VoicesThe default narrator, the six-voice catalog, and playable previews./docs/voices
LanguagesThe 34 supported narration languages./docs/languages
CLI and SDKThe animations command line and the @animations/sdk TypeScript client./docs/cli
MCP setupUse Animations as tools in Claude Desktop, Claude Code, and the Claude app./docs/mcp