List Supported Languages
Before translating a video, retrieve the list of supported target languages:output_languages values in translation requests.
Translate a Video
Submit a translation request with your source video and target language(s). The video is translated asynchronously — the response returns ID(s) you use to poll for status.Single Language
Multiple Languages (Batch)
Translate the same source video into multiple languages in a single request by passing additional language codes in the array:video_translation_id per target language:
Providing the Source Video
Thevideo field accepts two input types:
- URL — a publicly accessible HTTPS link to the video file:
- Asset ID — a HeyGen asset ID from
POST /v3/assets:
The URL must be publicly accessible — if you paste it into an incognito browser window, the video should play without any login.
Translation Options
| Parameter | Default | Description |
|---|---|---|
mode | "speed" | "speed" for faster results, "precision" for higher quality (uses avatar inference). |
translate_audio_only | false | When true, only the audio is translated — the original video is preserved. |
speaker_num | auto | Number of speakers in the video. Setting this improves speaker separation accuracy. |
enable_caption | false | Generate captions for the translated video. Required to later retrieve caption files. |
enable_dynamic_duration | true | Allow the translated video duration to differ from the source to match natural speech pacing. |
disable_music_track | false | Remove background music from the output. |
enable_speech_enhancement | false | Enhance speech quality in the output. |
brand_voice_id | — | Apply a custom brand voice. Requires prior brand voice setup. |
audio | — | Custom audio for dubbing, provided as {"type": "url", "url": "..."} or {"type": "asset_id", "asset_id": "..."}. |
srt | — | Custom subtitle file (same typed object format). Enterprise plan only. |
srt_role | — | "input" or "output" — which video the SRT applies to. Enterprise plan only. |
callback_url | — | Webhook URL to receive a notification when the translation completes or fails. |
callback_id | — | Your own identifier, echoed back in the webhook payload. |
Check Translation Status
Poll the translation status using the ID returned from the create request:| Status | Description |
|---|---|
pending | Translation is queued. |
running | Translation is in progress. |
completed | Done. The response includes video_url (and optionally audio_url). |
failed | Failed. Check failure_message for details. |
The presigned URL parameters are regenerated each time you call the status endpoint, so you can always get a fresh link.
List Translations
Retrieve a paginated list of all your video translations:has_more and next_token for cursor-based pagination. Pass token=<next_token> to fetch the next page.
Get Translation Captions
If you created the translation withenable_caption: true, download the caption file once the translation is complete:
srt and vtt.
Proofread Before Translating
The proofread workflow lets you review and edit subtitles before generating the final translated video. This is useful for ensuring translation accuracy before spending credits on video generation.1. Create a Proofread Session
proofread_ids — one per target language.
2. Poll Proofread Status
completed.
3. Download and Edit the SRT
srt_url (the editable translated SRT) and optionally original_srt_url. Download the file, make your edits, then upload the revised version:
4. Generate the Final Video
video_translation_id that you poll via GET /v3/video-translations/<id> as described above.

