fal generation_timeout 504 error: what to do on Sume
fal returns generation_timeout as a 504 typed error. Sume has a generation_timeout category; the documented action is to poll status or retry later.

On fal, generation_timeout is a 504 error type returned when the operation took longer than the allowed time. Sume documents an error category with the same name, and its action is: poll status or retry later.
fal details are from its Model Errors page; Sume details from Errors and credits, read 2026-10-01.
What does the fal error look like?
The fal page describes a structured response: an HTTP status code, headers such as X-Fal-Needs-Retry, and a JSON body with a detail array. Each object carries loc, msg, type and url, with optional ctx and input. For generation_timeout the status is 504, the type is generation_timeout, and the page marks it retryable as true or false.
The same page tells clients to use type for conditional logic and not to parse msg.
What is Sume's generation_timeout?
Sume's errors page lists error categories with a recommended action. generation_timeout and worker_timeout both say: poll status or retry later. Compare that with internal, which says to inspect events and contact support with the request or job id.
| Sume category | Documented action |
|---|---|
queue | Retry later with the same idempotency key. |
generation_timeout | Poll status or retry later. |
worker_timeout | Poll status or retry later. |
runtime_unavailable | Retry later; do not retry aggressively. |
internal | Inspect events and contact support with request/job id. |
Why poll before retrying?
The job status vocabulary is queued, processing, completed, failed, canceled. A timeout category can describe a job whose state you can still read, so check GET /v1/jobs/:id/status first. Only when it is terminal and failed does a new attempt make sense, and then a paid retry needs its own deliberate Idempotency-Key; see failed run retry needs a new key.
How do I port fal error handling?
Switch on the error category rather than the HTTP status alone. Map fal's type-based branching to Sume's category: poll for the two timeout categories, retry with the same idempotency key for queue, and escalate with ids for internal. The two vendors name things alike, but the Sume docs define the action; do not assume fal's retryable flag carries over.
Sources
Related posts
- fal MCP "why did my request fail": the Sume job equivalent
- 409 job_not_completed: why the result call fails and what to poll
- x-fal-needs-retry header: what Sume uses to signal a retry
- x-fal-no-retry header: safe retries with a Sume Idempotency-Key
- Video generation API timeouts: Sume's wait caps, SDK defaults, expiry
More in Developers
- fal queue status IN_QUEUE IN_PROGRESS COMPLETED on Sume
Sume's status endpoint returns a queue-shaped status field with IN_QUEUE, IN_PROGRESS, COMPLETED, FAILED and CANCELED, mapped one-to-one onto sume_status.
- x-fal-billable-units header: WebSocket billing vs Sume receipts
fal bills WebSocket sessions via x-fal-billable-units headers. Sume has no such header: cost is a per-job ledger row you read back by job or run.
- FFmpeg 8.1 AV1 and ProRes encoding: Sume has no codec field
FFmpeg 8.1 adds D3D12 H.264/AV1 and Vulkan ProRes encoding. Sume compiles ffmpeg server-side and rejects codec and crf fields, so you cannot pick an encoder.
- FFmpeg 8.1 drawvg and vpp_amf: not on Sume's allowlist
FFmpeg 8.1 lists new drawvg and vpp_amf filters. Sume video-filter only runs allowlisted filters and refuses unknown names with unknown_filter.
Written by Sume