Dubbing
POST /v1/dub takes a video or audio file in one language and returns a dubbed Swahili track, with optional subtitles. Waridi Dub is built for filmmakers, broadcasters and digital platforms that want African audiences to hear content in their own language.
Dubbing runs as an asynchronous job. You create it, then poll it or wait for a webhook.
Preview. Dubbing is in closed preview. Source languages are English and Swahili. Targets are
sw-TZandsw-KE. Every job can be reviewed and edited in Waridi Studio before you export.
Create a dubbing job
from waridi import Waridi
client = Waridi()
job = client.dub.create(
source_url="https://example.com/media/episode-03.mp4",
source_language="en",
target_language="sw-TZ",
voices="auto",
outputs=["audio", "video", "srt"],
webhook_url="https://example.com/hooks/dub",
)
print(job.id, job.status)
import { Waridi } from "@waridi/sdk";
const client = new Waridi();
const job = await client.dub.create({
sourceUrl: "https://example.com/media/episode-03.mp4",
sourceLanguage: "en",
targetLanguage: "sw-TZ",
voices: "auto",
outputs: ["audio", "video", "srt"],
webhookUrl: "https://example.com/hooks/dub",
});
console.log(job.id, job.status);
curl https://api.waridi.io/v1/dub \
-H "Authorization: Bearer $WARIDI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"source_url": "https://example.com/media/episode-03.mp4",
"source_language": "en",
"target_language": "sw-TZ",
"voices": "auto",
"outputs": ["audio", "video", "srt"],
"webhook_url": "https://example.com/hooks/dub"
}'
Parameters
| Field | Type | Required | Description |
|---|---|---|---|
source_url |
string | yes | HTTPS link to MP4, MOV, WAV or MP3. Up to 3 hours |
source_language |
string | yes | en or sw |
target_language |
string | yes | sw-TZ or sw-KE |
voices |
string or object | no | auto picks preview voices per speaker. Or map speakers to voice IDs, for example {"spk_0": "baraka"} |
glossary |
object | no | Fixed translations for names and terms, for example {"Board of Directors": "Bodi ya Wakurugenzi"} |
outputs |
string[] | no | Any of audio, video, stems, srt, vtt. Default ["audio"] |
webhook_url |
string | no | Receives dub.completed or dub.failed |
To keep an actor's own voice in Swahili, clone it first with their verified consent (Voice cloning) and pass the cloned voice ID in voices.
Check status
curl https://api.waridi.io/v1/dub/dub_01J9ZF2W8P \
-H "Authorization: Bearer $WARIDI_API_KEY"
{
"id": "dub_01J9ZF2W8P",
"object": "dub",
"status": "completed",
"source_language": "en",
"target_language": "sw-TZ",
"duration_ms": 1325000,
"outputs": {
"audio": "https://files.waridi.io/dub_01J9ZF2W8P/audio.wav",
"video": "https://files.waridi.io/dub_01J9ZF2W8P/video.mp4",
"srt": "https://files.waridi.io/dub_01J9ZF2W8P/subtitles.srt"
},
"expires_at": "2026-10-21T08:00:00Z"
}
| Status | Meaning |
|---|---|
queued |
Waiting to start |
transcribing |
Separating speech from music and effects, then transcribing |
translating |
Translating and adapting lines to fit timing |
voicing |
Generating Swahili speech |
completed |
Output links are ready. They expire after 7 days |
failed |
See error.code and error.message |
Notes on quality
Translation for dubbing is adaptation, not word-for-word. Lines are shortened or reworded so they fit the speaker's timing and sound like everyday Swahili. For broadcast work we recommend a Swahili-speaking editor reviews each episode in Studio before export.