HeyGen stale_edit_version 409 vs Sume idempotency_conflict
HeyGen returns 409 stale_edit_version when a template edit is out of date. Sume's 409 is idempotency_conflict: one key reused on a different payload.

stale_edit_version is HeyGen's 409 for a template edit based on an old copy. If you send expected_edit_version to PUT /v3/templates/{template_id}/variables and someone else changed the template, you get the 409 instead of an overwrite. Sume has no template edit, so its 409 is a different thing: idempotency_conflict.
HeyGen facts are from its API changelog. Sume facts are from Generation admission and Errors and credits, read 2026-10-01.
What does stale_edit_version protect?
The changelog says the variables call accepts expected_edit_version, and GET /v3/templates/{template_id} returns an edit_version. It is optimistic concurrency: read the version, send it back with your edit, and a mismatch fails with 409 instead of overwriting a concurrent change. The fix is to re-read and re-apply.
When does Sume return a 409?
Sume's admission table lists 409 idempotency_conflict for the same idempotency key reused for a different operation or payload. The client behavior is to reuse keys only for exact retries. Nothing in the docs ties a 409 to concurrent edits.
| HeyGen | Sume | |
|---|---|---|
| Code | stale_edit_version | idempotency_conflict |
| Trigger | expected_edit_version is behind | Same key, different payload |
| Fix | Re-read, re-apply, resend | Use a new key for a new request; reuse only for exact retries |
How should I retry a paid Sume submit?
Use Idempotency-Key for every paid submit that may be retried, and do not resubmit just because a local worker timed out. The docs also say production integrations should prefer async submit with an idempotency key. More in HeyGen idempotency vs Sume 409.
What about failures after acceptance?
Failed jobs expose public error metadata such as category, stage, retryability, retry-after seconds, public reason and next action. Read retryability before deciding to retry.
Sources
Related posts
More in Developers
- Hookdeck passes gzip bytes unchanged: verify Sume on raw bytes
Hookdeck now forwards binary and gzip bodies byte for byte. Read the raw bytes before parsing and verify the Sume sume-v1 signature over them.
- Hume Octave 2 description field vs Sume TTS emotion controls
Hume lists a voice description field; acting instructions are coming soon. Sume TTS 1.0 has generation_config: emotion text, speed 0.6 to 1.5, volume 0.5 to 2.
- Hume Octave takes 5,000 characters per utterance in MP3, WAV or PCM
Hume's TTS overview lists 5,000 characters per utterance and MP3, WAV or PCM output. Sume TTS 1.0 takes 20,000 characters and mp3, wav or raw containers.
- Ideogram API 402 inflight_limit: fast vs slow queue, and Sume
Ideogram 4.5 returns 402 or 429 with reject_reason inflight_limit and a fast or slow queue. Sume queues jobs first, then returns 429 queue_full.
Written by Sume