Introduction
Video Translator dubs a talking clip into another language. Send the footage in video_url and choose target_language; the tool transcribes the speech, translates it, voices it again in time with the original lines and returns the same picture with the new audio. Turn on clone_voice and each speaker keeps a voice modelled on their own.
Key features & highlights
The speakers still sound like themselves
With clone_voice on, the dub is spoken in a voice built from each speaker's own: in our two-person test the woman and the man came back in Spanish with their own timbre, and each line started where the original line started.
Keep the score or strip it
keep_background_audio decides what sits under the dub. Left on, cellar ambience and room tone stay exactly where they were. Switched off, the returned clip carries only the translated voices with true silence between lines, ready for your own mix.
Your names stay your names
List terms in glossary as {term, translation} pairs and they are translated your way every time. In our test a phrase listed in the glossary was used verbatim in both lines where it occurred.
Request parameters
| Parameter | Required | Description |
|---|---|---|
video_url | Yes | The clip to translate, 1 second to 10 minutes. The picture comes back unchanged. at least 1 characters |
target_language | No | The language to dub into, one of 28. Default English. |
source_language | No | The language spoken in the clip. Default auto, which detects it. |
clone_voice | No | Off by default. On: each speaker is re-voiced in a voice modelled on their own. Default: |
keep_background_audio | No | On by default: the music and sound effects stay under the dub. Off: only the translated voices are returned, with silence between lines. Default: |
speaker_count | No | How many people speak in the clip, 1 to 4. Leave it out to let the tool count them. |
glossary | No | Names, brands and phrases with a fixed translation, as term / translation pairs, up to 100. at most 100 items |
Pricing
$0.005 / output second
Billed in whole minutes of the source clip, so a 70-second clip costs the same as 2 minutes. The clip must run 1 second to 10 minutes; the estimate before submission uses the actual length of a clip you uploaded, or the 10-minute maximum for a video URL, and any difference is released when the task settles. Options such as cloned voices or background removal do not change the price.
Use cases
Localising short-form video
Post the same clip for several language markets without booking a voice actor for each one. Clips under a minute cost one minute.
Dubbing characters from video models
Generated characters that speak English can be dubbed into your audience's language while keeping the character's voice.
Prompt guide & pro tips
Set the spoken language when there is music
Automatic detection is reliable on clean speech. On a clip with a guitar under a whispered French line it gave up and the task failed (refunded); the same clip with source_language set to French went through. If a task fails with a message about processing the video, set source_language and send it again.
Tell it how many people talk
speaker_count is optional, but setting it on a two-person dialogue keeps each line with the right voice.
Plan for the picture
Only the audio is replaced. For close-ups where the mouth matters, run the dubbed clip through the Lip Sync tool afterwards.
API quick start
# Generate the idempotency key once; reuse it when retrying after a lost response.
export SPICY_IDEMPOTENCY_KEY="${SPICY_IDEMPOTENCY_KEY:-$(uuidgen)}"
curl -X POST https://api.spicyapi.ai/api/v1/jobs/createTask \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $SPICY_IDEMPOTENCY_KEY" \
-d '{
"model": "spicyapi/video-translator-v1/video-translate",
"input": {
"source_language": "auto",
"target_language": "en",
"video_url": "https://example.com/reference.mp4"
}
}'
# Copy data.taskId from the response into TASK_ID, then poll the status.
TASK_ID="TASK_ID_FROM_RESPONSE"
curl "https://api.spicyapi.ai/api/v1/jobs/recordInfo?taskId=$TASK_ID" \
-H "Authorization: Bearer $SPICY_API_KEY"
See the API reference for authentication, the complete schema, polling, and error handling.




