Skip to main content
Mode: "speed" (default) Best for: fast turnaround, batch jobs, and workflows where time matters more than perfect lip-sync. For higher fidelity at the cost of latency, see Precision mode. For dozens or hundreds of videos in one job, see Video Translation batches.

How Lip Sync and Video Translation Relate

Both APIs sit on top of one lip sync engine that runs in two modes — Speed and Precision — trading latency for fidelity. What differs is what each API does around that engine:
  • Lip Sync API — the engine on its own. You bring the video and your own audio; the engine redraws the mouth to match. No translation, no audio generation — dialogue replacement only.
  • Video Translation API — translation, optionally followed by the engine. It has two output modes:
    • Audio only (translate_audio_only: true) — transcribe, translate, and generate the translated audio, then stop. No lip sync. The output is just the new audio track (or the original video with swapped audio and an untouched mouth).
    • Video (audio + visual) — the same translation pipeline, then runs the lip sync engine so the mouth matches the translated speech.
The short version:
  • Lip Sync API = engine only — you bring the audio.
  • Video Translation API = translation, optionally followed by the engine. Audio-only mode skips the engine entirely; video mode adds it back.

Quick Start

1. List Supported Languages

Before translating, fetch the available target language codes via GET /v3/video-translations/languages:

2. Submit a Translation (Single Language)

Full schema: POST /v3/video-translations.

Batch (Multiple Languages)

Translate into several languages in one request:
Response returns one ID per language:

3. Poll for Status

Use GET /v3/video-translations/{video_translation_id}. Skip polling by passing callback_url — see Webhooks.

Source Video Input

The URL must be publicly accessible (test by opening in an incognito browser). To use an asset_id, upload first via POST /v3/assets — see the Upload Assets guide.

Speed Mode Options

These parameters are particularly relevant for Speed mode:

Stock Voice (Enterprise)

Use a preset “stock” voice for the translation instead of recreating the original speaker’s voice. By default, Video Translation clones the original speaker, so the translated video sounds like them. With this option enabled, the translation is spoken by a natural, preset voice that’s optimized for clear pronunciation and accent in the target language. The trade-off: the result won’t sound like the original speaker.
This is an Enterprise feature, available for selected accounts and languages and turned on by request. To use it, contact your HeyGen account team.
Pass stock_voice_config in the translation request:

Captions

To enable captions, set enable_caption: true in the translation request. Once completed, download them:
Supported formats: srt, vtt.

Proofread Before Finalizing

Speed mode supports the proofread workflow — review and edit subtitles before spending credits on final generation. Reference: Create · Get · Download SRT · Upload SRT · Generate Final Video.

Step 1 — Create Proofread Session

Full schema: POST /v3/video-translations/proofreads.
Returns proofread_ids — one per language.

Step 2 — Poll Until completed

GET /v3/video-translations/proofreads/{proofread_id}.

Step 3 — Download & Edit the SRT

Download via GET /v3/video-translations/proofreads/{proofread_id}/srt; upload the revised file via Upload Proofread SRT.
Edit the returned srt_url file locally, then upload the revised version:

Step 4 — Generate Final Video

POST /v3/video-translations/proofreads/{proofread_id}/generate.
Returns a video_translation_id to poll via GET /v3/video-translations/{video_translation_id}.

Other Operations

List All Translations

GET /v3/video-translations.
Uses has_more + next_token for pagination.

Delete a Translation

DELETE /v3/video-translations/{video_translation_id}.

When to Use Speed vs. Precision

For high-volume jobs across many source videos, see Video Translation batches.