Kling 4.0 is LIVE — Unbelievably Real Video | Try Now →

heygen/voice/turbo

HeyGen Voice Turbo Text-to-Speech converts text into expressive speech using public voices or reference recordings for instant voice cloning, supporting narration, voiceovers, multilingual content, digital humans, and scalable voice production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Text to Speech
Input

Drag & drop or click to upload

Idle

$0.005per run·~200 / $1

ExamplesView all

Related Models

README

HeyGen Voice Turbo

HeyGen Voice Turbo turns text into natural, expressive speech. Choose a public voice or provide a single-speaker recording for instant voice cloning, with language selection and adjustable expressiveness. The Turbo tier offers a lower-cost option for everyday speech generation.

Why Choose This?

  • 24 public voices — Choose a voice that fits your content.
  • Instant voice cloning — Use a reference recording instead of a public voice.
  • 39 supported languages — Select a language or let it be detected from the text.
  • Expression control — Adjust the delivery with an expressiveness setting.
  • WAV audio output — Generate speech as a 44.1 kHz WAV file.

Parameters

ParameterRequiredDescription
textYesText to speak, from 1 to 5,000 characters.
voiceNoSelect a public voice. Default: Jonah. Ignored when reference_audio is provided.
reference_audioNoSingle-speaker audio URL or upload for voice cloning. Only the first 3 minutes are used.
languageNoChoose a supported language code. Leave empty to detect the language from the text.
expressiveness_boostNoExpressiveness from 0 to 1. Default: 1.

How to Use

  1. Enter your text — Add the script you want spoken.
  2. Choose a voice — Select a public voice or upload a single-speaker reference recording.
  3. Adjust delivery — Optionally select the language and expressiveness.
  4. Generate — Submit the request and download the speech audio.

Pricing

$0.005 per 1,000 input characters, with a minimum charge of $0.005 per request.

Requests with fewer than 1,000 characters are billed as 1,000 characters. Above 1,000 characters, billing uses the actual text length, without rounding up to whole thousands.

Input CharactersPrice
100$0.005
1,000$0.005
1,500$0.0075
5,000$0.025

The same rate applies when using a public voice or a reference recording.

Best Use Cases

  • Narration — Create spoken explanations and stories.
  • Video voiceovers — Add speech to presentations and social content.
  • Multilingual content — Generate speech in supported languages.
  • Custom voices — Use a reference recording for voice consistency.

Pro Tips

  • Use punctuation to guide phrasing and pauses.
  • Provide a clear recording with one speaker for voice cloning.
  • Set the language explicitly when the text is short or ambiguous.

Notes

  • text is required and supports up to 5,000 characters.
  • A reference recording takes priority over the selected public voice.
  • Only the first 3 minutes of reference audio are used.
  • Omit language to detect it from the text.
  • Use only recordings you own or have permission to clone.
  • The output is a WAV audio file, not a reusable voice ID.

Related Models

  • HeyGen Avatar IV — Create talking-avatar videos from a portrait and speech audio.
  • HeyGen Avatar V — Create talking-avatar videos from a supported avatar and speech audio.
Note:This website uses AI models provided by third parties. Documentation prices are for reference and may be outdated. The Generate button shows an estimate; the final task charge prevails.

Voice Turbo API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/heygen/voice/turbo with your input as JSON. The endpoint returns a prediction id. Start polling the result endpoint around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. On completed, read output values from data.outputs. Examples for Voice Turbo below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "text": "A clear example input",
    "voice": "Jonah",
    "language": "ar",
    "expressiveness_boost": 1
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/heygen/voice/turbo" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $WAVESPEED_API_KEY" \
  -d "$REQUEST_BODY")

TASK=$(printf '%s' "$SUBMIT_RESPONSE" | jq 'if has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "$TASK" | jq -r '.id')
if [ -z "$PREDICTION_ID" ] || [ "$PREDICTION_ID" = "null" ]; then
  printf 'Submission response did not contain a prediction id
' >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/$PREDICTION_ID/result"

# 2. Poll until the prediction finishes.
while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body "$RESULT_URL" \
    -H "Authorization: Bearer $WAVESPEED_API_KEY")
  RESULT=$(printf '%s' "$RESPONSE" | jq 'if has("data") then .data else . end')
  STATUS=$(printf '%s' "$RESULT" | jq -r '.status')
  case "$STATUS" in
    completed) printf '%s\n' "$RESULT" | jq '.outputs'; break ;;
    failed|cancelled|timeout|deleted) printf '%s\n' "$RESULT" | jq . >&2; exit 1 ;;
    *) sleep 2 ;;
  esac
done
Node.js example
const submitUrl = "https://api.wavespeed.ai/api/v3/heygen/voice/turbo";
const apiKey = process.env.WAVESPEED_API_KEY;
if (!apiKey) throw new Error('Set WAVESPEED_API_KEY');

async function requestJson(url, options = {}) {
  const response = await fetch(url, options);
  if (!response.ok) throw new Error(await response.text());
  return response.json();
}

// 1. Submit the prediction.
const body = await requestJson(submitUrl, {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
        "text": "A clear example input",
        "voice": "Jonah",
        "language": "ar",
        "expressiveness_boost": 1
}),
});
const task = body.data ?? body;
if (!task.id) throw new Error("Submission response did not contain a prediction id");
const resultUrl = `https://api.wavespeed.ai/api/v3/predictions/${task.id}/result`;

// 2. Poll until the prediction finishes.
while (true) {
  const resultBody = await requestJson(resultUrl, {
    headers: { "Authorization": `Bearer ${apiKey}` },
  });
  const result = resultBody.data ?? resultBody;
  if (result.status === "completed") {
    console.log(result.outputs);
    break;
  }
  if (["failed", "cancelled", "timeout", "deleted"].includes(result.status)) throw new Error(JSON.stringify(result));
  await new Promise(resolve => setTimeout(resolve, 2000));
}
Python example
import json
import os
import time
from urllib.request import Request, urlopen

api_key = os.environ["WAVESPEED_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
payload = {
    "text": "A clear example input",
    "voice": "Jonah",
    "language": "ar",
    "expressiveness_boost": 1
}

def request_json(url, data=None):
    request = Request(url, data=data, headers=headers, method="POST" if data else "GET")
    with urlopen(request) as response:
        return json.load(response)

# 1. Submit the prediction.
body = request_json("https://api.wavespeed.ai/api/v3/heygen/voice/turbo", json.dumps(payload).encode())
task = body.get("data", body)
if not task.get("id"):
    raise RuntimeError("Submission response did not contain a prediction id")
result_url = f"https://api.wavespeed.ai/api/v3/predictions/{task['id']}/result"

# 2. Poll until the prediction finishes.
while True:
    result_body = request_json(result_url)
    result = result_body.get("data", result_body)
    status = result.get("status")
    if status == "completed":
        print(result.get("outputs", []))
        break
    if status in {"failed", "cancelled", "timeout", "deleted"}:
        raise RuntimeError(result)
    time.sleep(2)

Voice Turbo API — Frequently asked questions

What is the Voice Turbo API?

Voice Turbo is a Heygen model for speech synthesis, exposed as a REST API on WaveSpeedAI. HeyGen Voice Turbo Text-to-Speech converts text into expressive speech using public voices or reference recordings for instant voice cloning, supporting narration, voiceovers, multilingual content, digital humans, and scalable voice production workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing. You can call it programmatically or try it from the playground above.

How do I call the Voice Turbo API?

POST your input parameters to the model's REST endpoint (shown in the API tab of this playground) with your WaveSpeedAI API key in the Authorization header. Submission returns a prediction ID. Poll the result endpoint starting around every 2 seconds, increase the interval for long-running tasks, and stop on any terminal status. The playground generates Python, JavaScript, and cURL examples for submitting requests and polling results. Full request/response shape is documented at https://wavespeed.ai/docs/docs-api/heygen/heygen-voice-turbo.

How much does Voice Turbo cost per run?

Voice Turbo starts at $0.005 per run. That figure is the base price — the final charge scales with the parameters you set in the form (output size, length, count, references, or whatever knobs this model exposes), so a higher-quality or larger output costs more than a minimal one. The exact cost for your current input is shown live next to the Generate button before you submit, and the actual per-call charge is recorded on the prediction afterwards.

What inputs does Voice Turbo accept?

Key inputs: `expressiveness_boost`, `language`, `reference_audio`, `text`, `voice`. The full JSON schema (types, defaults, allowed values) is rendered above the Generate button and mirrored in the API reference at https://wavespeed.ai/docs/docs-api/heygen/heygen-voice-turbo.

How do I get started with the Voice Turbo API?

Sign up for a free WaveSpeedAI account to claim starter credits, copy your API key from /accesskey, then call the endpoint shown in the API tab of the playground. The playground also auto-generates a code sample in Python, JavaScript, or cURL for the parameters you've set.

Can I use Voice Turbo outputs commercially?

Commercial usage rights depend on the model's license, set by its provider (Heygen). Check the provider's applicable terms and WaveSpeedAI's Terms of Service before commercial use.

llms.txt — heygen/voice/turbo for AI agents and LLMs