Skip to main content
Full schema: POST /v3/voices/speech. This endpoint synthesizes any voice from the voice catalog: stock voices and designed voices. Most stock voices run on the HeyGen Voice engine. For a HeyGen Voice clone, instant or professional, use Text to Speech on POST /v3/models/audio/tts instead.

Engines

Pick the engine per request with engine, or omit it to use the voice’s saved default. The response’s engine field reports which one ran. ElevenLabs models, set with settings.model_id: eleven_v4, eleven_v3, eleven_multilingual_v2, eleven_flash_v2_5, eleven_flash_v2, eleven_turbo_v2_5. Starfish takes locale (e.g. zh-HK); ElevenLabs takes language. Each voice lists the engines it can use in available_engines and its saved default in default_engine on GET /v3/voices. Filter the catalog with ?engine=orca, ?engine=starfish, or ?engine=elevenlabs.

Quick example

Pick a voice with GET /v3/voices (see Browse Voices), then pass its voice_id:
Response

Choose an engine

Set engine for this request only. For ElevenLabs, add settings.model_id:
The engine you ask for is the engine that runs. A 400 means the voice, your plan, or the requested language can’t use it; pick another from the voice’s available_engines. A 403 ai_vendor_access_restricted means a workspace admin has blocked ElevenLabs. The older engine: "elevenlabs_v3" still works; new integrations pass engine: "elevenlabs" with settings.model_id. text takes 1–5,000 characters. Optional fields: speed (0.5–2.0, default 1.0), language (base code such as en, auto-detected when omitted), locale (BCP-47 tag such as pt-BR, which overrides language), and force_regenerate (skip the speech cache for fresh audio). Keep input_type at its default text; <break> tags work directly in plain text.

Adding pauses

Insert <break> where you want a pause, with the time in seconds:
<break> is the only markup to include; wrapping the script in other tags such as <speak> can add spoken artifacts. Check support_pause on the voice in GET /v3/voices first. The same tag works in script text passed to POST /v3/videos.