Audio detach in sync mode: 30 seconds, then a 202 you poll
Audio detach defaults to async. With mode sync it waits up to 30 seconds for a 200, or returns 202 to poll. Why a timeout is not a failure and how to retry.

Audio detach on Sume runs async by default; pass mode: "sync" and it waits up to 30 seconds for a finished 200 job, or returns 202 so you can poll. The audio detach docs, read 2026-10-03, say exactly that, and the jobs docs add the rule that matters: a sync wait that ends before the job is terminal is not a failure, so poll and do not submit a new paid job.
What does each mode return?
Every mode returns the job id in its first response, so you can always recover the job.
| Mode | First response | What you do next |
|---|---|---|
async (default) | 202 with the job envelope | Poll status_url, then read result_url |
sync | Envelope after up to 30 s | Terminal: read it. Not terminal: poll |
webhook | 202, callback stored | Verify the signature; keep polling as a backup |
How do I tell a timed-out wait from a failed job?
On a sync response, sync.timed_out is true when the wait returned before a terminal state, and sync.capacity_exhausted is true when Sume skipped the wait because its waiter budget was full. In both cases the response is still 2xx and carries the job id. Continue with GET status_url, honoring next_poll_after_seconds when present.
When is a retry safe?
- Retrying the submit is safe if you reuse the same
Idempotency-Key; the retry returns the original job instead of billing again. - Submitting a new job for the same intent is not safe, because detach is $0.01 per job and the first one is still running.
- Detach is ffmpeg work, usually quick, but the docs set no time target, so treat 30 seconds as a ceiling on waiting, not a promise.
Sources
Related posts
More in Developers
- Audio detach file size: 16 kHz mono WAV vs 48 kHz stereo
A 900-second Sume audio detach is about 29 MB as 16 kHz mono WAV, 173 MB as 48 kHz stereo WAV and 14 MB as 128 kbps MP3. The arithmetic and choices.
- "Avatar does not have a usable TTS voice": the 400 and its fixes
Sume TTS with avatar_id or avatar_handle returns 400 when the avatar has no TTS voice, or when voice.id disagrees with it. What each message means and the fix.
- Try Avatar 1.0 in the Sume playground before you write any code
Use the Sume Avatar playground to validate an avatar or avatar video payload, then move the same body into curl, the CLI or an agent without a rewrite.
- axios rejects Sume 409 and 429: read response.data.error.code
axios rejects any status outside 200-299 by default, so a Sume 409 or 429 throws. Read error.response.data.error.code, and use AbortSignal for timeouts.
Written by Sume