Deep-dive reference for the /v1/text-to-voice/design endpoint and related voice creation flow.

🧠 Model IDs (Voice Design vs TTS)

ContextModel IDAudio TagsNotes
TTS (text-to-speech)eleven_v3βœ… YesStandard TTS endpoint
Voice Designeleven_ttv_v3βœ… Yes⚠️ Different ID than TTS!
Voice Design (old)eleven_multilingual_ttv_v2❌ NoDefault if model_id omitted β€” reads tags literally

⚠️ Critical: eleven_v3 β‰  eleven_ttv_v3 β€” different model IDs for different endpoints!

πŸ”— Voice Design Flow (3 steps)

1. POST /v1/text-to-voice/design     β†’ generates previews (base64 audio + generated_voice_id)
2. Listen & pick favorite preview
3. POST /v1/text-to-voice/create     β†’ saves voice to library using generated_voice_id

Alternative legacy endpoint: POST /v1/text-to-voice/create-previews (similar but fewer params)

πŸ“‘ POST /v1/text-to-voice/design

Design a voice via a text prompt. Returns voice previews with generated_voice_id + base64 audio.

Required

ParamTypeDescription
voice_descriptionstringVoice character description (age, tone, accent, pacing)
ParamTypeDefaultDescription
model_idstringeleven_multilingual_ttv_v2Use eleven_ttv_v3 for V3 audio tags!
textstringβ€”Preview text (100-1000 chars)
guidance_scalefloat~30Prompt adherence [0-100]. Lower = creative, higher = strict
loudnessfloat0Volume [-1, 1]. 0 β‰ˆ -24 LUFS

Optional

ParamTypeDefaultDescription
output_formatstringmp3_22050_32Audio format (e.g. mp3_44100_128)
should_enhanceboolfalseAI-enhance voice description for better results
qualityfloatβ€”Higher = better output, less variety
seedintrandomReproducible generation (same seed + inputs = same voice)
auto_generate_textboolfalseAuto-generate preview text from description
stream_previewsboolfalseReturn IDs only, stream via /v1/text-to-voice/:id/stream
reference_audio_base_64stringβ€”Reference audio (V3 model only)
prompt_strengthfloatβ€”Prompt vs reference balance [0-1] (V3 only)

Example Request

{
  "voice_description": "A warm British man in his 30s, conversational and relatable",
  "text": "[laughs] See, that is the thing about innovation...",
  "model_id": "eleven_ttv_v3",
  "guidance_scale": 35,
  "loudness": 0,
  "output_format": "mp3_44100_128"
}

Response

{
  "previews": [
    {
      "audio_base_64": "<base64 mp3>",
      "generated_voice_id": "abc123...",
      "media_type": "audio/mpeg",
      "duration_secs": 8.5
    }
  ]
}

πŸ’Ύ POST /v1/text-to-voice/create

Save a designed voice to your library.

{
  "voice_name": "British Entrepreneur",
  "voice_description": "Warm British conversational voice",
  "generated_voice_id": "abc123..."
}

🏷️ V3 Audio Tags (work in both TTS and Voice Design)

Emotions: [laughs] [sighs] [giggles] [crying] [curious] [mischievously] Delivery: [whispers] [shouts] [sarcastic] [excited] [sad] [angry] Pacing: [slowly] [quickly] [long pause] Reactions: [clears throat] [light chuckle] [gasps] Sounds: [door slam] [rain softly in the background] [crowd cheering]

Tags go inline with text in lowercase square brackets.

🎯 Prompting Best Practices (Voice Description)

Follow: age + tone/timbre + gender + accent + pacing

"An elderly man with a deep, warm, gravelly voice. Speaks slowly with a neutral accent."
"A high-energy female sports commentator with a thick British accent, very quick pace."

Tips:

  • Longer, detailed prompts β†’ lower guidance_scale (15-30)
  • Short prompts β†’ higher guidance_scale (35-50) or enable should_enhance
  • Include audio quality hints: β€œPerfect audio quality” / β€œStudio-quality recording”
  • Guidance > 60 can sound robotic β€” sweet spot is 20-40

⚠️ Common Pitfalls

PitfallSymptomFix
Missing model_idTags read aloud literallyAdd model_id: "eleven_ttv_v3"
Using eleven_v3 in designAPI errorUse eleven_ttv_v3 (different ID!)
Text < 100 chars400 errorPad preview text to 100+ chars
Text > 1000 chars400 errorTrim or chunk text
Guidance too high (>60)Robotic outputLower to 20-40 range
EndpointPurpose
POST /v1/text-to-voice/designGenerate voice previews (current)
POST /v1/text-to-voice/create-previewsGenerate previews (legacy, no model_id)
POST /v1/text-to-voice/createSave preview to library
GET /v1/text-to-voice/:id/streamStream a preview by ID
POST /v1/text-to-voice/:voice_id/remixRemix existing voice
POST /v1/text-to-speech/:voice_idTTS with saved voice