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
- PNG, JPEG or WebP for ad stills: measure file size with Pillow
Sume's Image API has no output_compression field. Request png, jpeg or webp, then re-encode locally and compare sizes before you upload.
- A policy snapshot file and a Python check before each AI ad batch
Keep platform AI rules in a JSON file with source and read date, and run a short Python check that flags rules older than 30 days before you queue a batch.
- 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.
- Dedupe Sume webhooks with Postgres ON CONFLICT DO NOTHING
Insert job_id or request_id with ON CONFLICT DO NOTHING RETURNING. A returned row means first delivery; no row means a duplicate. Includes the SQL.
Written by Sume