Skip to content
Get your keyGet a key

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.

Start a clipPOST/videos
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"
  }'
Response202 Accepted
{
  "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"
}
Read it againGET/jobs/{jobId}
curl https://vessero.com/api/v1/jobs/video.8f1c2d3e-4b5a-4789-8abc-def012345678 \
  -H "Authorization: Bearer $VESSERO_API_KEY"
Response200 OK
{
  "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=30 with 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-Applied says it waited.
  • Name a webhook. Put webhookUrl in 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.