fal queue retries up to 10 times: who counts attempts on Sume
fal retries failed queue requests on new runners, up to 10 attempts. Sume's docs put retries with the caller, guarded by an Idempotency-Key.

fal's docs say a queue request that fails on infrastructure is retried automatically on a new runner, up to 10 attempts, while 4XX responses are never retried and direct run() or stream() calls are not retried at all. In the Sume pages I read, retrying is the caller's job, and the Idempotency-Key is what makes a resend safe.
fal text is from its retries page and changelog; Sume text from Errors and rate limits and Errors and spend. All read 2026-10-01.
What exactly does fal retry?
Three conditions: a server error (a 503, a disconnected runner, an incomplete response, or a 504), a request timeout, and a connection error. A 4XX is never retried. Since July 8, an app can set retry_config with a budget per condition, and the total is bounded by the platform ceiling of 10 attempts.
How are retries handled on Sume?
The docs describe client behavior: back off on 429 and use retry-after; never retry unsafe submits without an Idempotency-Key. I found no statement of an automatic multi-attempt retry of a submitted job, so plan to count attempts yourself.
| Situation | Documented behavior |
|---|---|
Job category queue | Retry later with the same idempotency key |
409 idempotency_key_in_use | retryable: true; wait about a second and resend |
409 idempotency_conflict | Same key, different body: fix your key derivation, do not retry as is |
4xx at create | Nothing ran, nothing charged: fix the call |
429 | Wait retry-after |
Why does the key matter more when you retry yourself?
With a platform-side retry, the platform tracks the attempts. With a client-side retry, a timeout can hide a request that actually arrived. Resending it with the same key lets Sume treat it as the same request; an idempotent replay costs nothing on a Format run. Details in safe submit retries.
What retry budget should I set?
Pick your own: a small count, a growing delay, and a stop on any 4xx. Honor retry_after_seconds when the error carries it. fal's 10 is its platform ceiling, not a number to copy.
Sources
Related posts
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.
- fal error_type request_timeout: which Sume field to monitor
fal exposes error_type in the body and X-Fal-Error-Type as a header. Sume puts category, stage and code in the error body; the request id is also a header.
- FastMCP client auth: pass the Sume API key as a string
In FastMCP, pass your Sume API key as a plain string to auth, with no Bearer prefix. The client adds the header; send only one credential.
Written by Sume