H3 Max Recast job failed: what Sume refunds and what to retry
A failed Recast job releases its hold on Sume. Read the error category, fix input errors, retry queue errors with the same Idempotency-Key, never double-submit.

When an H3 Max Recast job fails on Sume, its hold is released: per the admission docs, failed jobs and failed queue admission release or refund the reservation where applicable. What to do next depends on the error category on the job. Fix validation and generation_rejected problems in your input, retry queue errors with the same Idempotency-Key and generation_unavailable later, and never resubmit a job that is still processing.
Where do I read why it failed?
Three reads, all authenticated with the key that created the job. GET /v1/jobs/{id}/status shows the status and the public error metadata: category, stage, whether it is retryable, retry-after seconds, a public reason and a next action. GET /v1/jobs/{id}/events shows the event history, which Sume's docs name as the place to look for generation_rejected and internal errors. GET /v1/jobs/{id}/result answers 409 until the job is completed, so an empty result is not a failure.
curl https://api.sume.com/v1/jobs/job_123/status \
-H "Authorization: Bearer $SUME_API_KEY"
curl https://api.sume.com/v1/jobs/job_123/events \
-H "Authorization: Bearer $SUME_API_KEY"Which failures should I fix, and which should I retry?
The categories below are from Sume's error docs, read 2026-10-03, with Recast examples that are our reading of them:
- Most shape errors are caught before the job exists: Sume rejects bad Recast bodies at submit with an error response, so they never become a job and never bill. See the rejected-field list.
- If the failure points at the clip, check shot lengths first. fal's schema forbids a single shot over 15 seconds.
| Category | Sume's next action | Recast example |
|---|---|---|
| validation | Fix input | Duration outside 5 to 30 s, five photos, a signed URL |
| quota | Add funds or lower request cost | 402 insufficient_credits; use 768p or a shorter clip |
| queue | Retry later with the same idempotency key | Workspace queue is full |
| generation_rejected | Inspect events and fix unsupported input | A source the provider will not accept, such as a shot over 15 s |
| generation_timeout | Poll status or retry later | The job ran past the provider window |
| generation_unavailable | Retry later | Provider is busy |
| internal | Inspect events and contact support with the request or job id | Anything unexplained |
How do I tell a failure from a slow job?
queued is a normal state. Sume accepts a valid paid job as queued while the workspace's concurrency is full and starts it when there is room, so a job that waits is not stuck. processing means it is running or being finalized. Only failed and canceled are terminal failures, and completed is the terminal success.
Poll with backoff and stop on a terminal status. Read the video only when the job is completed, because the result endpoint answers with a conflict before then. If a job seems to sit for a long time, read /status once more and look at next_poll_after_seconds rather than opening a second job.
When must I not resubmit?
Do not resubmit because your own process timed out, your connection dropped, or your wait expired. Sume's docs say not to resubmit the original paid request in those cases: the first job is still running, and still billing. A sync or subscribe submit that returns before the job finishes is a normal 2xx with the current state, not a failure; keep polling the status URL and honour next_poll_after_seconds.
Cancelling is a separate path. POST /v1/jobs/{id}/cancel works only before generation starts. Once it has started it returns 409 job_generation_already_started, and the job completes or fails normally, so a clip you have changed your mind about can still bill if it ran.
How do I retry safely?
A retry of the same intent reuses the same Idempotency-Key; Sume's docs say to retry queue and capacity errors that way once capacity opens, using retry-after when it is present. A retry that changes the input, such as a trimmed clip or a different photo, is a new intent and gets a new key, because it is a different job with a different price. Keep the key, the job id and the request id from the error body together; Sume asks for the request id when you report an issue, and asks you not to include keys or signed URLs.
The price of a retry that runs to the end is a full clip: $0.375 a second at 768p, so $3.75 for 10 seconds. Fix a rejected input on a 5 second slice first. It is the cheapest way to learn whether the fix worked, at $1.88 on Sume.
Sources
Related posts
More in Developers
- H3 Max Recast seed: fal has one, Sume does not send it
fal's Recast API takes and returns a seed. Sume's Video Router accepts none, so each run is a new take. How to re-roll, what to vary, and what it costs.
- Ideogram 4 download: Hugging Face gate, login and first image
To run Ideogram 4 locally: accept the gate on Hugging Face, log in with hf, pip install the repo, run run_inference.py. The flags and the nf4 or fp8 choice.
- Is AI avatar video real time? How long a Sume job takes
A Sume avatar video is a job, not a live stream: it queues, renders, and you poll or take a webhook. What the sync wait caps at, and a Python polling loop.
- Latin American Spanish text to speech: es or es-MX on Sume?
Sume's TTS language is a free string and its voice library tags voices with plain es. What that means for Mexican, Argentine or Spain Spanish, and how to test.
Written by Sume