Pin a TTS model id: sonic-latest or sonic-3.6 on Sume
Voice vendors move aliases under you. How sonic-latest and sonic-3.6 behave on the Sume TTS router, and why to send an explicit id in production.

Send sonic-3.6 in production, not sonic-latest. On the Sume TTS router, sonic-latest is an alias that points at sonic-3.6 today and can point somewhere else later. An explicit id keeps your audio reproducible; the alias keeps you current without a deploy. Pick on purpose.
Why this matters this month
xAI's Think Fast 2.0 announcement states that on 5 August 2026 grok-voice-latest moved to version 2.0, and existing users were upgraded automatically unless they had pinned the earlier version. Anyone who treated the alias as stable got a different voice model without a code change. The same trap exists with any "latest" id.
| Model value | What it is |
|---|---|
| sonic-3.6 | Current explicit version |
| sonic-3.5 | Previous explicit version |
| sonic-3 | Older explicit version |
| sonic-latest | Alias for sonic-3.6; never resolves to sonic-preview |
| sonic-preview | Beta channel; not compatible with pro voice clones (voice_model_mismatch) |
What the API tells you
List the catalog with GET /v1/tts-router/models and read one entry with GET /v1/tts-router/models/{model_id}. Submit with POST /v1/tts-router/generate. The job's model field echoes the id you requested, so a job created with sonic-latest records sonic-latest, not the version it ran on. If you need to answer "which engine made this file" later, log an explicit id yourself. An unknown id returns a 400 model_not_found with a link to the catalog.
A pinning habit
- Hard-code
sonic-3.6in the request body. - Store the id next to each generated file in your own database.
- Re-listen to a sample before changing the pin, since a new version can change pacing.
- Use
sonic-latestonly in a staging job that flags differences.
Limits
Pinning protects against alias moves, not against a version being retired. Check the catalog before a launch. Pro voice clones are incompatible with sonic-preview, so keep clones on a stable id. Full request fields are in the API reference. Related: voice API deadlines through February 2027.
Sources
More in Developers
- Poll a Sume bulk-run queue in Python and list items not completed
A short asyncio script that polls GET /v1/format-run-queues/{id} until the queue is completed, prints the counts and lists every item that did not complete.
- Python preflight for a YouTube Short: length and shape check
A short Python script that reads Sume's video inspect probe and flags a clip over 180 seconds or not square or vertical, including 90 degree rotation.
- Python 3.15 TaskGroup.cancel: stop at the first Sume job done
Python 3.15 adds TaskGroup.cancel. Watch several Sume jobs and stop the other watchers when the first one completes, without cancelling the paid jobs.
- Python asyncio.timeout around a Sume job poll: a hard budget
Wrap a Sume status loop in asyncio.timeout so it stops at a fixed budget and returns still_running, leaving the job alone. A short version, run against a mock.
Written by Sume