Video job stuck in queued on Sume: limits by plan and queue_full
A queued video job is not a failure. Sume runs 1, 4, 8 or 20 jobs at once on Free, Pro, Startup and Scale, and queues the rest. 429 queue_full: queue full.

The short answer
An image-to-video job that sits in queued is waiting for a concurrency slot, not failing. Sume processes 1 generation at a time on Free, 4 on Pro, 8 on Startup and 20 on Scale. Extra valid jobs queue until a slot opens. Only a full queue returns 429 queue_full, and a missing balance returns 402 insufficient_credits.
What queued means
Concurrency is a dispatch limit, not a submit limit. A workspace at its limit can still accept more jobs as queued while queue capacity remains. The lifecycle is queued, then processing, then completed, failed or canceled. Store the job id, poll with backoff and fetch the result only when the job is complete.
Limits by plan
Defaults per plan, from the admission docs. The dashboard Concurrency tab and the generation_limits field in the submit response show your effective numbers, and they are the source of truth.
| Plan | Processing at once | Queue capacity | Accepted jobs |
|---|---|---|---|
| Free | 1 | 5 | 6 |
| Pro | 4 | 20 | 24 |
| Startup | 8 | 40 | 48 |
| Scale | 20 | 100 | 120 |
What does not change it
Prepaid top-ups do not raise the processing limit. It follows the plan.
Reading the status
On /v1/videos, the polling status reads pending before the job runs and in_progress while it runs, then completed, failed or cancelled. The job envelope at GET /v1/jobs/{id}/status shows the queued and processing stages. Send the Idempotency-Key on every submit so a retry does not make a second job.
curl https://api.sume.com/v1/jobs/$JOB_ID/status \
-H "Authorization: Bearer $SUME_API_KEY"Batches and queue_full
If a batch of 40 jobs hits a Pro workspace, 4 run, 20 wait, and the other 16 fail with 429 queue_full. Submit in waves instead. The generation_limits block in a submit response includes queue_capacity_remaining and a wave_size_hint, so use them to size the next wave. On queue_full, wait for jobs to finish, or cancel queued ones, then retry with the same idempotency key.
Sources
Related posts
More in Developers
- Timeline invalid_fit 400: fit must be cover, contain, stretch or blur
invalid_fit means video[].fit is not cover, contain, stretch or blur. Cover is the default, so omit the field if you want it. details.allowed lists values.
- Timeline invalid_fps 400: output.fps must be 24, 25, 30 or 60
invalid_fps rejects any output.fps outside 24, 25, 30 and 60. Omit the field to match the source frame rate; details.allowed lists the accepted values.
- Timeline invalid_transition_type: why xfade is rejected (use fade)
transition.type accepts fade, wipeleft, wiperight, slideup, slidedown and dissolve. xfade is the internal ffmpeg name, so it returns invalid_transition_type.
- Is Luma Ray3.2 on Sume? Check the video catalog ids in Python
Ray3.2 is not a Sume model. Rather than trust a blog, list GET /v1/video-router/models and test for an id. A short Python script that prints every id.
Written by Sume