HeyGen provides 300+ pre-built voices across dozens of languages, plus the ability to generate custom AI voices from a text description, clone an existing speaker, or synthesize speech directly. This guide walks the full browse → design → use workflow; deeper guides for each step live at Browse Voices, Design Voices, and Text to Speech.
Step 1: Browse Available Voices
Use GET /v3/voices to list available voices with cursor-based pagination. Filter by language, gender, type, or engine.
Query Parameters
| Parameter | Type | Description |
|---|
type | string | "public" for the shared library or "private" for your cloned voices. Defaults to "public". |
engine | string | Filter by voice engine (e.g. "starfish"). Only voices compatible with that engine are returned. |
language | string | Filter by language name (e.g. "English", "Spanish", "Japanese"). |
gender | string | Filter by "male" or "female". |
limit | integer | Results per page (1–100). Defaults to 20. |
token | string | Opaque cursor token for the next page. |
Response Fields
| Field | Type | Description |
|---|
voice_id | string | Pass this as voice_id to POST /v3/videos or POST /v3/video-agents. Inspect a single voice with GET /v3/voices/{voice_id}. |
name | string | Display name of the voice. |
language | string | Primary language. |
gender | string | Gender of the voice. |
preview_audio_url | string or null | URL to a short audio preview — play to audition the voice. |
support_pause | boolean | Whether the voice supports SSML pause/break tags. |
support_locale | boolean | Whether the voice supports locale variants. |
type | string | "public" or "private". |
Each voice includes a preview_audio_url — play these to audition voices before using one in your video.
Step 2: Design a Custom Voice (Optional)
If none of the pre-built voices fit, use POST /v3/voices to generate up to 3 AI voice options from a text description. The endpoint returns a ranked list — pick the one that fits best. For more detail and prompting patterns, see Design Voices. To clone an existing speaker from audio samples instead, use POST /v3/voices/clone.
Parameters
| Parameter | Type | Required | Description |
|---|
prompt | string | Yes | Text description of the desired voice — accent, tone, pace, gender, personality. Max 1000 characters. |
gender | string | No | Filter results by "male" or "female". |
locale | string | No | BCP-47 locale tag to filter by (e.g. "en-US", "pt-BR"). |
seed | integer | No | Controls which batch of results to return. 0 returns the top matches, 1 the next batch, etc. Same prompt + seed always returns the same voices. |
Prompting tips for voice design:
- Specify gender and approximate age (
"young woman in her 20s", "mature male voice")
- Describe the accent (
"American Midwest", "slight French accent")
- Set the tone (
"warm and friendly", "authoritative", "playful")
- Mention pacing (
"measured and calm", "energetic and fast")
- Reference a use case (
"suitable for corporate training", "good for storytelling")
Step 3: Use a Voice in Video Creation
Once you have a voice_id, pass it when creating a video. To render speech directly without an avatar, use Text to Speech (POST /v3/voices/speech).
With Video Agent
With Direct Video Creation
Set the voice alongside your avatar and script:
Voice Settings
When using POST /v3/videos, you can fine-tune playback via voice_settings:
| Field | Type | Range | Description |
|---|
speed | number | 0.5 – 1.5 | Playback speed multiplier. 1.0 is normal speed. |
pitch | number | -50 – +50 | Pitch adjustment in semitones. |
locale | string | BCP-47 | Locale/accent hint for multi-lingual voices. |