generate-video 409s: preview_not_ready vs preview_image_not_ready
generate-video on an avatar preview can return two 409s: the job is unfinished, or a public preview image is missing. How to tell them apart.

Two checks before the final render
POST /v1/avatar-video-previews/:id/generate-video turns an approved preview into the final video. Before it submits, the API runs two checks, and each has its own 409.
| Code | Trigger | Details returned |
|---|---|---|
| avatar_video_preview_not_ready | The preview job is not completed | avatar_video_preview_id and the job status |
| avatar_video_preview_image_not_ready | Preview finished but no public preview image yet, or a multi-scene preview misses an image for some scene | avatar_video_preview_id |
Reading the first one
The message is: Avatar video preview must be completed before generating the final video. The status in details tells you whether the job is still queued or processing, or ended failed. If failed, regenerate the preview rather than waiting.
Reading the second one
The message is: Avatar video preview does not include a public preview image yet. For multi-scene plans the check is stricter: with more than one scene, every scene needs its own public image. Fetch the preview resource again after a short delay and retry when preview_image_url is present.
curl https://api.sume.com/v1/avatar-video-previews/$PREVIEW_ID \
-H "Authorization: Bearer $SUME_API_KEY"Retry rule
Both errors are about timing, not a bad request. Read the preview, wait for completion and an image URL, then call generate-video again with the same Idempotency-Key you intended to use.
Sources
Related posts
More in Developers
- generation_spend_cap_usd: null means $500, 0 is a 400, per ad variant
What the per-run spend cap does on Sume Format runs for a number, null, 0 and a value over 500, and why every ad variant should set its own.
- Alert when a new TTS model id lands in the Sume router catalog
September and October brought new voice models. A 20-line script diffs GET /v1/tts-router/models against yesterday's ids and tells you when a row is added.
- GitHub Actions: submit a 30 s video, jobs watch, upload the artifact
A workflow that posts to Sume.s /v1/videos, runs sume jobs watch with a timeout, downloads the clip and uploads it as a build artifact.
- GitHub wants a 2XX in 10 seconds, Sume times out at 10: dedupe both
GitHub and Sume both give a webhook receiver 10 seconds. GitHub reuses X-GitHub-Delivery on redelivery; with Sume, use job_id as the dedupe key.
Written by Sume