TTS voice.id: a UUID or a voi_ library id? What Sume accepts

Sume TTS voice.id takes a voice UUID or a voi_ library id. Any other shape fails with 400 invalid_voice_id before a job is queued or credits are reserved.

4 min readSume
All posts

Sume TTS voice.id accepts two shapes: a TTS voice UUID (8-4-4-4-12 hex characters) or a Voices library id, which is voi_ followed by 32 hex characters. Any other string is rejected at once with 400 and public_reason=invalid_voice_id, before a job is queued or credits are reserved. A library id is resolved to its stored TTS voice before the job runs.

What does the check cover?

The OpenAPI description for voice.id says the value must be a TTS voice UUID or a library id, "not a voice name from another TTS ecosystem", and that values of any other shape are rejected synchronously. It also says to copy the id verbatim, or to send avatar_id or avatar_handle and let Sume resolve the voice.

The check is on shape. It tells you that a string looks like an id, not that the id exists in your workspace, so a well-formed id you copied from somewhere else can still fail later.

voice.id values and the outcome described in the Sume OpenAPI, read 2026-10-02.
Value you sendShapeOutcome
db6b0ed5-d5d3-463d-ae85-518a07d3c2b4UUID, 8-4-4-4-12 hexAccepted by the shape check
voi_ plus 32 hex charactersVoices library idAccepted, resolved to the stored TTS voice
Skylar or RachelA voice name400 invalid_voice_id, nothing queued or reserved
voi_123Wrong length400 invalid_voice_id

Is a UUID from another vendor's page a Sume voice?

Do not assume so. Cartesia's Sonic 3.6 page (read 2026-10-02) lists featured voices by name with a UUID each, such as Skylar and Daniel. That UUID has the right shape for Sume's check, but the page does not say those voices are available in a Sume workspace, and the Sume reference does not either. Take ids from your own workspace, not from a vendor listing.

The reliable route is the avatar one: when an avatar's voice.status is ready, send its handle and skip the id.

What if I send both an avatar and a voice id?

They must agree. When voice.id comes with an avatar reference, it has to equal the avatar's resolved TTS voice id, or the request fails with 400. voice.mode has one value, id, and it is the default, so you can leave it out.

curl -X POST https://api.sume.com/v1/tts-1.0/generate \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: voice-id-001" \
  -d '{
    "transcript": "Checking the voice id.",
    "voice": { "id": "'"$SUME_VOICE_ID"'" },
    "language": "en"
  }'

Sources

Related posts

More in Developers

All Developers posts

Written by Sume