Nano Banana 2.1 is LIVE — Google's Latest | Try Now →

heygen/avatar-v

HeyGen Avatar V creates high-quality talking-avatar videos from a selected avatar and speech audio, with optional backgrounds and up to 4K output for presentations, training videos, product introductions, marketing content, and digital human workflows. Ready-to-use REST inference API, best performance, no coldstarts, affordable pricing.

Talking Avatar
Input

Drag & drop or click to upload

Loading…

Drag & drop or click to upload

Idle

$0.15per run·~66 / $10

ExamplesView all

Related Models

README

HeyGen Avatar V

HeyGen Avatar V creates talking-avatar videos from a selected presenter and your own speech recording. Choose an available avatar, upload the audio, and generate the final video at resolutions up to 4K.

Why Choose This?

  • Ready-to-use avatars — Choose a presenter from the available avatar selection.
  • Audio-driven video — Use your own speech recording to drive the presenter.
  • Up to 4K output — Choose 720p, 1080p, or 4k.
  • Multiple aspect ratios — Create landscape, portrait, square, and other supported formats.
  • Optional background — Add a background image to customize the presentation.

Parameters

ParameterRequiredDescription
avatarYesSelect an available avatar ID.
audioYesSpeech audio URL or upload used to drive the avatar.
resolutionNo720p, 1080p, or 4k. Default: 1080p.
aspect_ratioNo16:9, 9:16, 1:1, 5:4, or 4:5. Default: 16:9.
backgroundNoOptional background image URL or upload.

How to Use

  1. Choose an avatar — Select a presenter from the available options.
  2. Upload speech audio — Provide the recording the avatar should speak.
  3. Choose output settings — Set the resolution and aspect ratio.
  4. Add a background optional — Upload an image for the presentation background.
  5. Submit — Generate and retrieve the talking-avatar video.

Pricing

Pricing is based on the input audio duration at $0.15 per billed second.

Audio duration is rounded up to the next whole second, with billing capped at 600 seconds per request.

Audio LengthBilled DurationPrice
10s10s$1.50
10.2s11s$1.65
60s60s$9.00
600s600s$90.00

The same rate applies across all supported resolutions and aspect ratios.

Best Use Cases

  • Business presentations — Create presenter-led announcements, updates, and internal communications.
  • Training videos — Deliver lessons, onboarding content, and explanations.
  • Product introductions — Pair a presenter with prepared product narration.
  • Marketing content — Create avatar-led promotional and campaign videos.
  • Social content — Produce presenter videos for short-form and branded content.

Pro Tips

  • Choose an avatar that matches the tone and purpose of your content.
  • Use clear, well-paced speech audio with minimal background noise.
  • Select a background that keeps the presenter easy to see.
  • Use 720p for lighter workflows and higher resolutions when greater output detail is needed.
  • Match the aspect ratio to the platform or placement where the video will be used.

Notes

  • avatar and audio are required.
  • A presenter must be selected from the available avatar IDs; uploading a portrait instead is not supported.
  • Text scripts cannot replace the required speech audio.
  • resolution defaults to 1080p.
  • aspect_ratio defaults to 16:9.
  • Billing is based on the supplied audio duration, not the selected resolution.
  • This model is separate from HeyGen Avatar V Digital Twin.

Related Models

  • HeyGen Avatar IV — Create talking-avatar videos from a portrait image 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.

Avatar V API — Quick start

Grab a WaveSpeedAI API key, then call POST https://api.wavespeed.ai/api/v3/heygen/avatar-v 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 Avatar V below.

HTTP example
set -euo pipefail

: "${WAVESPEED_API_KEY:?Set WAVESPEED_API_KEY}"

REQUEST_BODY=$(cat <<'JSON'
{
    "avatar": "Abigail_sitting_sofa_front",
    "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
    "resolution": "1080p",
    "aspect_ratio": "16:9"
}
JSON
)

# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  -X POST "https://api.wavespeed.ai/api/v3/heygen/avatar-v" \
  -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/avatar-v";
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({
        "avatar": "Abigail_sitting_sofa_front",
        "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
        "resolution": "1080p",
        "aspect_ratio": "16:9"
}),
});
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 = {
    "avatar": "Abigail_sitting_sofa_front",
    "audio": "https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3",
    "resolution": "1080p",
    "aspect_ratio": "16:9"
}

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/avatar-v", 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)

Avatar V API — Frequently asked questions

What is the Avatar V API?

Avatar V is a Heygen model for talking-avatar generation, exposed as a REST API on WaveSpeedAI. HeyGen Avatar V creates high-quality talking-avatar videos from a selected avatar and speech audio, with optional backgrounds and up to 4K output for presentations, training videos, product introductions, marketing content, and digital human 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 Avatar V 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-avatar-v.

How much does Avatar V cost per run?

Avatar V starts at $0.15 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 Avatar V accept?

Key inputs: `audio`, `aspect_ratio`, `resolution`, `avatar`, `background`. 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-avatar-v.

How do I get started with the Avatar V 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 Avatar V 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/avatar-v for AI agents and LLMs