Where to find a voice ID for Sume text to speech: voices_list and voi_
Sume TTS wants a voice UUID or a voi_ library id, never a voice name like alloy. Where to copy it from, and the error you get for a name.

To find a voice ID for Sume text to speech, open Assets then Voices and copy the id, or call the voices_list and voices_get tools through the hosted MCP server. A valid voice.id is either a UUID (8-4-4-4-12 hex) or a Voices library id that starts with voi_ followed by 32 hex characters. A name such as alloy or ko-KR-SunHiNeural is rejected with invalid_voice_id.
What a valid selector looks like
The tool schema accepts exactly one way to name the voice. Either send voice: { "id": "..." } or send a ready avatar's avatar_id or avatar_handle, in which case Sume uses that avatar's ready TTS voice. When you send both, they must resolve to the same voice. Details are in MCP tools and gates.
| Selector | Form | Notes |
|---|---|---|
| voice.id (UUID) | 8-4-4-4-12 hex | Copy it verbatim |
| voice.id (library) | voi_ plus 32 hex | From Assets, Voices |
| avatar_id | Ready avatar id | Uses that avatar's TTS voice |
| avatar_handle | 2 to 31 characters | Must match avatar_id if both are sent |
| Voice name | alloy, korean_female | Rejected with invalid_voice_id |
Common ways it fails
Re-typing an id by eye is the usual cause. The schema's own advice is to copy the id verbatim and re-read it character by character. A second cause is a name copied from another vendor's voice list; those never synthesized on Sume.
A voice also carries a language tag. If you send a request language that differs from it, Sume warns you before creating a job, as the post on the language mismatch warning explains.
Sources
Related posts
More in Developers
- Find every Sora call left in your codebase: a retired-id scan
OpenAI's Videos API shut down 2026-09-24. A 20-line Python scan lists every file still naming a retired sora-2 model id so you can swap them.
- Flask webhook receiver for Sume: verify sume-v1, refuse empty secret
A Flask route that verifies the Sume signature on the raw body, takes either rotation entry, checks the replay window, and will not boot without a secret.
- FLUX 3 bounding box to a mask_url: Python region edit on Sume
FLUX 3 Image boxes use [top, left, bottom, right] on a 0-1000 grid. Convert one to an RGBA mask with Pillow and run the region edit on Sume's GPT Image 2.5.
- FLUX 3 Image on OpenRouter: n=1, seed, base64 vs Sume
OpenRouter lists FLUX.3 Image with one image per call, a seed and base64 PNG output. How each differs from Sume's POST /v1/images, where FLUX 3 is not listed.
Written by Sume