# heygen/video-translate

> HeyGen Video Translate: translate videos into 70+ languages and 175+ dialects with voice preservation and lip sync. Choose Speed at $0.04/sec or Precision at $0.08/sec. Supports videos up to 120 seconds.

## Overview

- **Endpoint**: `https://api.wavespeed.ai/api/v3/heygen/video-translate`
- **Polling/result URL**: `https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result`
- **Model ID**: `heygen/video-translate`
- **Category**: video-dubbing

## API Information

This model can be used via our HTTP API or more conveniently via our client libraries.
The API is asynchronous: submit a prediction, then poll its result URL until it completes.

### Input Schema

The API accepts the following input parameters:

- **`video`** (`string`, _required_):
  The video to translate. Maximum duration: 120 seconds.

- **`output_language`** (`string`, _optional_):
  The target language in which the video will be translated
  - Default: `"English"`
  - Options: "English", "Spanish", "French", "Hindi", "Italian", "German", "Polish", "Portuguese", "Chinese", "Japanese", "Dutch", "Turkish", "Korean", "Danish", "Arabic", "Romanian", "Mandarin", "Filipino", "Swedish", "Indonesian", "Ukrainian", "Greek", "Czech", "Bulgarian", "Malay", "Slovak", "Croatian", "Tamil", "Finnish", "Russian", "Afrikaans (South Africa)", "Albanian (Albania)", "Amharic (Ethiopia)", "Arabic (Algeria)", "Arabic (Bahrain)", "Arabic (Egypt)", "Arabic (Iraq)", "Arabic (Jordan)", "Arabic (Kuwait)", "Arabic (Lebanon)", "Arabic (Libya)", "Arabic (Morocco)", "Arabic (Oman)", "Arabic (Qatar)", "Arabic (Saudi Arabia)", "Arabic (Syria)", "Arabic (Tunisia)", "Arabic (United Arab Emirates)", "Arabic (Yemen)", "Armenian (Armenia)", "Azerbaijani (Latin, Azerbaijan)", "Bangla (Bangladesh)", "Basque", "Bengali (India)", "Bosnian (Bosnia and Herzegovina)", "Bulgarian (Bulgaria)", "Burmese (Myanmar)", "Catalan", "Chinese (Cantonese, Traditional)", "Chinese (Jilu Mandarin, Simplified)", "Chinese (Mandarin, Simplified)", "Chinese (Northeastern Mandarin, Simplified)", "Chinese (Southwestern Mandarin, Simplified)", "Chinese (Taiwanese Mandarin, Traditional)", "Chinese (Wu, Simplified)", "Chinese (Zhongyuan Mandarin Henan, Simplified)", "Chinese (Zhongyuan Mandarin Shaanxi, Simplified)", "Croatian (Croatia)", "Czech (Czechia)", "Danish (Denmark)", "Dutch (Belgium)", "Dutch (Netherlands)", "English (Australia)", "English (Canada)", "English (Hong Kong SAR)", "English (India)", "English (Ireland)", "English (Kenya)", "English (New Zealand)", "English (Nigeria)", "English (Philippines)", "English (Singapore)", "English (South Africa)", "English (Tanzania)", "English (UK)", "English (United States)", "Estonian (Estonia)", "Filipino (Philippines)", "Finnish (Finland)", "French (Belgium)", "French (Canada)", "French (France)", "French (Switzerland)", "Galician", "Georgian (Georgia)", "German (Austria)", "German (Germany)", "German (Switzerland)", "Greek (Greece)", "Gujarati (India)", "Hebrew (Israel)", "Hindi (India)", "Hungarian (Hungary)", "Icelandic (Iceland)", "Indonesian (Indonesia)", "Irish (Ireland)", "Italian (Italy)", "Japanese (Japan)", "Javanese (Latin, Indonesia)", "Kannada (India)", "Kazakh (Kazakhstan)", "Khmer (Cambodia)", "Korean (Korea)", "Lao (Laos)", "Latvian (Latvia)", "Lithuanian (Lithuania)", "Macedonian (North Macedonia)", "Malay (Malaysia)", "Malayalam (India)", "Maltese (Malta)", "Marathi (India)", "Mongolian (Mongolia)", "Nepali (Nepal)", "Norwegian Bokmål (Norway)", "Pashto (Afghanistan)", "Persian (Iran)", "Polish (Poland)", "Portuguese (Brazil)", "Portuguese (Portugal)", "Romanian (Romania)", "Russian (Russia)", "Serbian (Latin, Serbia)", "Sinhala (Sri Lanka)", "Slovak (Slovakia)", "Slovenian (Slovenia)", "Somali (Somalia)", "Spanish (Argentina)", "Spanish (Bolivia)", "Spanish (Chile)", "Spanish (Colombia)", "Spanish (Costa Rica)", "Spanish (Cuba)", "Spanish (Dominican Republic)", "Spanish (Ecuador)", "Spanish (El Salvador)", "Spanish (Equatorial Guinea)", "Spanish (Guatemala)", "Spanish (Honduras)", "Spanish (Mexico)", "Spanish (Nicaragua)", "Spanish (Panama)", "Spanish (Paraguay)", "Spanish (Peru)", "Spanish (Puerto Rico)", "Spanish (Spain)", "Spanish (United States)", "Spanish (Uruguay)", "Spanish (Venezuela)", "Sundanese (Indonesia)", "Swahili (Kenya)", "Swahili (Tanzania)", "Swedish (Sweden)", "Tamil (India)", "Tamil (Malaysia)", "Tamil (Singapore)", "Tamil (Sri Lanka)", "Telugu (India)", "Thai (Thailand)", "Turkish (Türkiye)", "Ukrainian (Ukraine)", "Urdu (India)", "Urdu (Pakistan)", "Uzbek (Latin, Uzbekistan)", "Vietnamese (Vietnam)", "Welsh (United Kingdom)", "Zulu (South Africa)", "English - Your Accent", "English - American Accent"

- **`mode`** (`string`, _optional_):
  Translation mode. Speed is optimized for faster turnaround; precision is optimized for higher-quality lip sync.
  - Default: `"precision"`
  - Options: "speed", "precision"



**Required Parameters Example**:

```json
{
  "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"
}
```

**Full Example**:

```json
{
  "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
  "output_language": "English",
  "mode": "precision"
}
```

### Result Data Schema

The `data` object returned by the API has the following fields:

- **`created_at`** (`string (date-time)`, _optional_):
  ISO timestamp of when the request was created (e.g., "2023-04-01T12:34:56.789Z").

- **`id`** (`string`, _optional_):
  Unique identifier for the prediction, the ID of the prediction to get.

- **`model`** (`string`, _optional_):
  Model ID used for the prediction.

- **`outputs`** (`array of string | object`, _optional_):
  Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model.

- **`status`** (`string`, _optional_):
  Status of the task: created, processing, completed, or failed.

- **`urls`** (`object`, _optional_):
  Object containing related API endpoints.



**Example `data` Object**:

```json
{
  "created_at": "example",
  "id": "example",
  "model": "example",
  "outputs": [],
  "status": "example",
  "urls": {}
}
```

## Usage Examples

The examples use `jq` to read JSON. Set your API key first:

```bash
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
```

### 1. Submit a prediction

```bash
REQUEST_BODY=$(cat <<'JSON'
{
  "video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4"
}
JSON
)

SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
  --request POST \
  --url https://api.wavespeed.ai/api/v3/heygen/video-translate \
  --header "Authorization: Bearer ${WAVESPEED_API_KEY}" \
  --header "Content-Type: application/json" \
  --data "${REQUEST_BODY}")

printf '%s\n' "${SUBMIT_RESPONSE}" | jq .
```

The response contains the prediction ID in `data.id`.

### 2. Poll until complete and read `outputs`

```bash
PREDICTION_ID=$(printf '%s' "${SUBMIT_RESPONSE}" | jq -r '.data.id')
if [ -z "${PREDICTION_ID}" ] || [ "${PREDICTION_ID}" = "null" ]; then
  printf 'Submission response did not contain data.id\n' >&2
  exit 1
fi
RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"

while true; do
  RESPONSE=$(curl --silent --show-error --fail-with-body \
    --request GET \
    --url "${RESULT_URL}" \
    --header "Authorization: Bearer ${WAVESPEED_API_KEY}")

  RESULT=$(printf '%s' "${RESPONSE}" | jq -e '.data')
  STATUS=$(printf '%s' "${RESULT}" | jq -er '.status')
  case "${STATUS}" in
    completed)
      # Generated files are returned in the outputs array.
      printf '%s\n' "${RESULT}" | jq '.outputs'
      break
      ;;
    failed|cancelled|timeout|deleted)
      printf '%s\n' "${RESULT}" | jq '{status, error, code}'
      exit 1
      ;;
    *)
      sleep 2
      ;;
  esac
done
```

## Additional Resources

### Documentation

- [Model Playground](https://wavespeed.ai/models/heygen/video-translate)
- [API Documentation](https://wavespeed.ai/docs/docs-api/heygen/heygen-video-translate)
