x-fal-needs-retry header: what Sume uses to signal a retry
fal marks retryable errors with X-Fal-Needs-Retry. Sume signals retry through error category and code, retry-after on 429, and the same idempotency key.

fal puts an X-Fal-Needs-Retry header on errors so a client knows whether to retry. The Sume pages I read describe no such header; a Sume client reads the error category and code, honors retry-after on 429, and reuses the same Idempotency-Key.
Sume details come from Errors and credits, Generation admission and Authentication, read 2026-10-01.
What does fal say the header means?
The fal errors page lists X-Fal-Needs-Retry among required headers and tells machine clients to check it for retry decisions. The concurrency page adds that a 429 with type concurrent_requests_limit carries X-Fal-needs-retry: 1 and should be retried with exponential backoff.
Which Sume signal tells me to retry?
Two signals together. First, the category: queue means retry later with the same idempotency key. Second, for 429 the code: queue_full means the workspace has no remaining accepted generation capacity, so wait for jobs to finish or cancel queued jobs, then retry with the same idempotency key. rate_limited means request volume passed an abuse-protection limit, so back off using retry-after when present.
| Status and code | Meaning | Documented action |
|---|---|---|
429 queue_full | No remaining accepted generation capacity | Wait for jobs to finish or cancel queued jobs, then retry with the same idempotency key |
429 rate_limited | Request volume exceeded an abuse-protection limit | Back off using retry-after when present |
409 idempotency_conflict | Key reused for a different operation or payload | Reuse keys only for exact retries |
What about rate-limit headers?
The authentication docs say to read ratelimit-remaining rather than counting requests yourself, and to back off on retry-after, which is sent on 429. Do not retry unsafe submit requests without an Idempotency-Key.
How do I translate a fal retry loop?
Replace if header == needs-retry with a switch on category and code. Retry queue_full only after capacity frees, sleep for retry-after on rate_limited, and keep one idempotency key per intended generation. For fal's concurrency model itself, see fal AI API rate limit and concurrency.
Sources
Related posts
More in Developers
- 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.
- Firefly Custom Models API vs Sume: references, no training
Firefly Custom Models trains subject or style models you call by asset ID. Sume offers no image model training; use up to 16 input references.
- Firefly Upscale API vs Sume's image_upscale_create tool
Firefly's Upscale API enhances resolution at 2x, 4x or 6x. Sume exposes upscaling as the image_upscale_create MCP tool: a paid job you poll.
Written by Sume