Get started
Jobs: work that finishes later
Pictures and voiceovers come back in the answer, unless a picture takes longer than about 45 seconds. Clips, ads, music, stories and board runs answer at once with a job you can follow.
curl -X POST https://vessero.com/api/v1/videos \ -H "Authorization: Bearer $VESSERO_API_KEY" \ -H "Idempotency-Key: 47f8f6f5-ea00-4fb1-925f-76aac956a0ec" \ -H "Content-Type: application/json" \ -d '{ "model": "seedance-2.5", "prompt": "A slow push in on a steaming coffee cup on a café table", "durationSec": 5, "firstKey": "https://example.com/frames/coffee-cup.jpg", "confirmCredits": 58, "webhookUrl": "https://example.com/hooks/vessero" }'
{ "object": "job", "id": "video.8f1c2d3e-4b5a-4789-8abc-def012345678", "kind": "video", "status": "working", "stage": "Queued", "files": [], "credits": 58, "url": "/api/v1/jobs/video.8f1c2d3e-4b5a-4789-8abc-def012345678" }
curl https://vessero.com/api/v1/jobs/video.8f1c2d3e-4b5a-4789-8abc-def012345678 \ -H "Authorization: Bearer $VESSERO_API_KEY"
{ "object": "job", "id": "video.8f1c2d3e-4b5a-4789-8abc-def012345678", "kind": "video", "status": "done", "stage": "Finished", "files": [ { "kind": "video", "url": "https://vessero.com/f/Qm3xT8aLp2Vd9WcZ" } ], "url": "/api/v1/jobs/video.8f1c2d3e-4b5a-4789-8abc-def012345678" }
Made at once, or a job
A picture or a voiceover is made inside the call: the answer is 200, with what was made. A picture still being made after about 45 seconds — a slow model, a busy queue — answers 202 with a job instead (image.…), so no call runs long. Anything that takes longer from the start — a clip, a talking avatar, a UGC ad, music, a story, an upscale, a board run — answers 202 with a job as soon as it starts.
A job has an id (such as video.8f1c…), a kind, a status — working, done or failed — and a stage that says in words what is happening, such as "Rendering". There is no percentage or time estimate. Once it is done, files holds links to what it made; the links last about 7 days, and reading the job again gives fresh ones. A failed job has an error, saying whether it was charged.
Three ways to know when it’s ready
- Read it again.
GET /jobs/{jobId}answers the job as it is now. Every few seconds is fine. - Wait on the call. Send
Prefer: wait=30with the run, and the answer waits up to that many seconds, at most 60, for the job to end; no call runs past 80 seconds in all, so a picture’s own wait leaves less.Preference-Appliedsays it waited. - Name a webhook. Put
webhookUrlin the run’s body, and the job is posted there once it ends. See Webhooks.
Everything a job makes is also in your Library, and GET /work lists a studio’s recent work.