TTS request timed out: retry with the same Idempotency-Key

If a Sume TTS request times out, do not post a fresh one. Retry with the same Idempotency-Key and body to get the original job back, with no second charge.

4 min readSume
All posts

When a Sume TTS request times out on your side, retry it with the same Idempotency-Key and the same body. Sume returns the original job rather than creating and billing a second one. Posting a fresh request without a key is the way to pay twice for the same voiceover.

The key behavior and the polling steps are in the Sume API reference and Jobs and results (read 2026-10-06).

What should the client do?

TTS is an asynchronous job by default. The first response carries status_url and result_url. If your client times out after submitting, keep polling GET /v1/jobs/{id}/status until terminal is true, and read GET /v1/jobs/{id}/result only when the job completed. A failed or canceled job has no result and the result route answers 409 job_not_completed.

  • Create one key per intended voiceover, such as mug-voiceover-001.
  • Do not reuse a key with a different body.
  • Use mode: "sync" only for a short wait of up to 30 seconds. After that, the response still returns the job's state and you should poll.

What about a webhook?

Webhook mode stores a callback for terminal delivery only (completed, failed, canceled). Keep status polling as a backup, because there are no progress or partial callbacks.

How do I check for a duplicate?

The submit envelope has an idempotency_hit flag. If it is true, the response is the earlier job and no new reservation was made.

Sources

More in Developers

All Developers posts

Written by Sume