Render finished video
straight from your code
One POST queues a render on our workers and a signed webhook hands you the mp4. No ffmpeg to install, no GPU to rent, no queue to babysit.
POSThttps://autostud.ai/api/v1/actions/renders.createThree calls, timeline to mp4
Create the video once, then render it as many times as you need.
- 1
Create the video
A video holds the timeline: layers, audio, subtitles, format. Create one in a single call, or reuse one your team built in the editor.
export AUTOSTUD_API_KEY="sk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # A video is the timeline. Create one, or skip this step and reuse # a video your team already built in the editor. curl -X POST https://autostud.ai/api/v1/actions/videos.create \ -H "Authorization: Bearer $AUTOSTUD_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "video_name": "Launch teaser", "video_format": "portrait", "video_lang": "en" }' - 2
Queue the render
Point renders.create at the video id, override whatever this job needs, and it goes to a worker straight away. The response is the job, not the file.
# The Idempotency-Key makes this call safe to retry: send it twice # and you get the same render back, never a second job. curl -X POST https://autostud.ai/api/v1/actions/renders.create \ -H "Authorization: Bearer $AUTOSTUD_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: launch-teaser-v3" \ -d '{ "video_id": "0f4c8b71-2d95-47a3-9e6c-15b8ad7f3c20", "render_settings": { "quality": "high" } }' - 3
Take the mp4
render.completed arrives with the output URL. If your stack prefers polling, read the renders back filtered on the video id instead.
# Register once. Every render reports itself from then on. curl -X POST https://autostud.ai/api/v1/webhooks \ -H "Authorization: Bearer $AUTOSTUD_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "url": "https://your-app.com/hooks/autostud", "events": ["render.started", "render.completed", "render.failed"], "description": "Rendering" }' # The signing secret comes back once, in this response. Store it.
What a render takes
Two fields to start one, one header to make it safe to retry, one id to follow it.
video_idThe video to render. Everything about the composition already lives on it.
render_settingsOptional overrides for this job: format, quality, the range of frames you want.
Idempotency-KeyA header. Send the same key twice and you get the first render back, never a duplicate.
render_idReturned by the call and carried by every webhook, so a finished mp4 always points back at the job that asked for it.
What comes out
Renders are H.264 mp4 in whatever format the video is set to. Vertical for TikTok and Reels, square for a feed, landscape for YouTube: the same timeline, a different output.
Stop polling
A render takes minutes, not milliseconds. Register one webhook and three events tell you when a worker picked the job up, when the file is ready, and when something broke.
render.startedrender.completedrender.failedQuestions developers ask first
How long does a render take?
Minutes, scaling with the length of the video and the number of layers. The call returns as soon as the job is queued, so nothing in your app blocks on it.
What does a render cost?
Renders are billed in credits and the ledger is readable over the API. A key can be scoped to renders:read alone, so a dashboard can watch spend without being able to start a job.
Is it safe to retry a failed call?
Yes. Send an Idempotency-Key header and a repeated call returns the original render instead of queueing a second one, the same guarantee every execute action on the API gives you.
Where is the file hosted?
On our CDN, and the URL sits on the render record and in the render.completed payload. Download it and store it yourself if you need it forever.
Ready to create?
Start generating viral videos in minutes. No credit card required for the free trial.