Start here
Overview and quickstart
Everything you can do in the Chasca app, you can do over HTTP: create a narrated whiteboard explainer from a prompt or a document, wait for it, and edit it scene by scene. The SDK, the CLI and the MCP server are thin layers over the same API.
https://app.trychasca.com/api 1. Get an API key
In the app, open Settings → API keys and create a key. Keys look like
chk_live_… and are shown once, so store yours somewhere safe (an environment variable is perfect).
- API access is included on Plus and above. Compare plans.
- Videos made through the API, the SDK and CLI, or an MCP client use your plan minutes at 2x: a 1-minute video uses 2 minutes.
2. Authenticate
Send the key as a bearer token on every request:
Authorization: Bearer chk_live_...
All request and response bodies are JSON. The API lives at https://app.trychasca.com/api.
3. Create an explainer
Send what you want explained as input: a topic, a question or the full text of a document. Pick a
length in 30-second steps up to 6:00, or leave it out and Chasca chooses.
curl -X POST https://app.trychasca.com/api/v1/explainer \
-H "Authorization: Bearer $CHASCA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": "Explain how vaccines train the immune system",
"length": "1:00",
"aspect": "16:9",
"preset": "marker"
}' The API answers 202 Accepted straight away with the queued record. Generation runs in the background.
{
"id": "0b9c6f2e-5d1a-4c3e-9a47-2f8e1c7d4b60",
"status": "queued",
"stage": null,
"progress": 0,
"prompt": "Explain how vaccines train the immune system",
"lengthSeconds": 60,
"voice": "chasca:sulafat",
"language": "en",
"aspect": "16:9",
"preset": "marker",
"videoUrl": null,
"createdVia": "api",
"createdAt": "2026-09-23T09:14:02.118Z"
} 4. Wait for it
Poll the explainer until status is ready. It moves through
queued → generating → rendering → ready (or failed, with a readable
error). Most videos are ready in under a minute. If you’d rather not poll, subscribe to the
event stream.
curl https://app.trychasca.com/api/v1/explainer/0b9c6f2e-5d1a-4c3e-9a47-2f8e1c7d4b60 \
-H "Authorization: Bearer $CHASCA_API_KEY"
A ready explainer carries videoUrl, posterUrl and subtitlesUrl, plus the full
editable sceneGraph, every version and per-scene timings. Media links are signed and expire after
about a week; fetch the explainer again for fresh ones.
5. Edit a scene
Describe a change in plain language. Chasca works out which scenes it touches, queues a new version and re-renders only those scenes. The first re-render of every video is free.
curl -X POST https://app.trychasca.com/api/v1/explainer/0b9c6f2e-5d1a-4c3e-9a47-2f8e1c7d4b60/edit \
-H "Authorization: Bearer $CHASCA_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "instruction": "Make the title scene shorter and punchier" }'
You can also send an edited sceneGraph instead of an instruction, and undo with
revert.
Prefer TypeScript?
The SDK wraps all of this, including waiting, retries and typed responses. See CLI and SDK. To let Claude, Cursor or another agent drive Chasca, see MCP setup.
import { ChascaClient } from '@chasca/sdk';
const chasca = new ChascaClient({ apiKey: process.env.CHASCA_API_KEY! });
const job = await chasca.createExplainer({ input: 'How compound interest snowballs', length: '1:00' });
const video = await chasca.waitForExplainer(job.id);
console.log(video.videoUrl); Limits at a glance
- Generation and edit requests: 20 per minute. Everything else: 200 per minute.
- Video length: 30 seconds to 6 minutes, in 30-second steps. Longer topics become a chaptered series in the app.
-
Errors always look the same:
{ "error": true, "code": "...", "message": "...", "status": 400 }. See errors.