Skip to main content
Every example uses the same headers:

A file in, cut, rendered, delivered

1. Upload. Request an upload URL, PUT the bytes, confirm.
upload_id is the item’s id from here on. 2. Transcribe. Media under five minutes is transcribed within the call. Longer media returns a job, and once get_jobs reports it done, the same call returns the stored words.
3. Build a timeline. Create one, then add the clip. source is the stretch of the file in seconds. Leaving out from places the clip after the last one on that track, and a fresh timeline has one visual track, visual-main. A fresh document nobody has edited accepts a write without if_revision.
4. Check, then render. check_timeline is free and reports what a render would show wrong. The render takes an idempotency key generated for this call.
5. Collect the result. Poll for it, or receive it on a webhook.
With a webhook registered, the same result arrives as a POST to your URL:

One call over many items

The CLI is the same API from a shell, and --json returns the full envelope. A read tool also answers GET with query parameters.
update_items applies item by item. A failure on one item is reported beside the results of the rest, and set names what changed on each. A page’s next_cursor, passed back with the same filters, continues the list.

A charged call, retried

A generation is charged when it is dispatched, so the idempotency key is what makes a retry safe.
A 503 unavailable or a dropped connection is retried with the same body and the same key. The answer is the job already dispatched, and nothing is charged twice. A 402 insufficient_credits is not retried. get_balance says what is left and where more can be added, and get_checkout_link returns a link where the user pays.
estimate_cost quotes the same call before it runs, free, from the same rates.