API ReferenceText-to-Speech ModelsHeyGen
HeyGen Voice
HeyGen Voice — studio-quality voices that each speak 39 languages. Paid plans and PAYG.
HeyGen's studio-quality voices. Natural, expressive delivery, and one voice reads your text in any of 39 languages. Requires a paid plan or PAYG credits.
| Endpoint | POST /api/v1/tts/synthesize |
Model ID (ttsModel) | heygen-voice |
| Provider | HeyGen (paid access) |
| Character Limit | 5,000 |
| Cost | 1,000 / 1K chars |
Shared conventions
Auth, the voice→provider rule, rate limits, and the full error table live on the Speech API page. Below is only what's specific to HeyGen Voice.
Model-specific notes
- 24 voices, each speaking 39 languages. List them with GET /api/v1/tts/voices?provider=heygen; a voice is not tied to one language.
- Pick the spoken language with
language_code. When you leave it out, the language is detected from the text. - Output is MP3.
speed,pitchand the ElevenLabs voice settings are not supported and are ignored.
Supported language_code values: ar, be, bg, ca, cs, da, de, el, en, es, fa, fi, fr, he, hi, hr, hu, id, it, ja, ko, mk, ms, nl, pl, pt, ro, ru, sk, sl, sr, sv, ta, th, tl, tr, uk, vi, zh.
Request body
| Parameter | Type | Required | Description |
|---|---|---|---|
text | string | Yes | Text to synthesize (max 5,000 chars) |
voice | string | Yes | A HeyGen voice ID from GET /api/v1/tts/voices?provider=heygen |
ttsModel | string | Yes | Must be "heygen-voice" |
language_code | string | No | Spoken language, one of the codes above · Default: detected from the text |
title | string | No | Title for the saved project |
{
"text": "Welcome to SonnaLabs. Your audio is ready to download.",
"voice": "voice-uuid-heygen",
"ttsModel": "heygen-voice",
"language_code": "en"
}Response (200 OK)
{
"url": "https://cdn.sonnalabs.app/sonna/api-ephemeral/tts/paid/user123/pqr678.mp3",
"remainingCredits": 9850,
"projectCreated": true
}Errors (400 TEXT_TOO_LONG, 403 PAID_ACCESS_REQUIRED, plus 402, 409, 429, 503) follow the shared Speech API table.