Skip to main content

Overview

Audio to Video turns a recorded audio track into a talking video: you supply the audio, pick who says it, and HeyGen handles the lip-sync and render. It’s the same POST /v3/videos endpoint used for script-driven videos — the difference is that you pass audio_url (or audio_asset_id) instead of script, and the video’s length follows your audio. Two subject choices, both accepting the same audio fields: Use it when the voice already exists: preserving a real person’s recorded voice on their digital twin, dubbing localized audio onto one presenter, or lip-syncing audio produced by another tool.

Quick Example

Lip-sync an audio file onto an avatar:
Response
Generation is asynchronous. Poll GET /v3/videos/{video_id} until status is completed, then download video_url — or pass a callback_url to receive a webhook instead.

Audio Sources

Provide exactly one audio source per request — audio fields are mutually exclusive with script:
Have text and a voice instead of a recording? Two options: pass script + voice_id directly (skip the audio step entirely), or synthesize audio first with POST /v3/voices/speech — its response audio_url can be passed straight into audio_url here. The TTS route is handy when you want to reuse the same generated narration across several videos or archive it separately.

With an Avatar or Digital Twin

"type": "avatar" works with any avatar ID you own — a digital twin trained from real footage, a studio avatar, or a photo avatar look.

With an Image

"type": "image" animates any single-person image with lip-sync to your audio — no avatar creation step. It’s Image to Video with your own soundtrack.

Output Settings

Both subject types share the same output controls:

Full Example

Record-to-video in one script: upload the audio, lip-sync it onto an avatar, and wait for the result.
Swap the json payload for the image shape to drive the same pipeline from a photo instead of an avatar.