Trusted by over 500,000+ users
Powerful API features
Everything you need to integrate professional AI dubbing into your applicationsGlobal reach
33+ languages
Support for the world's most popular languages including English, Portuguese, Spanish, French, German, Chinese, Japanese, and more.Authentic voices
Voice cloning
Preserve original speaker voices with advanced AI voice cloning technology for authentic dubbing results.Fast & Reliable
Fast processing
Complete your dubbing projects in minutes, not hours. Get results quickly with our optimized AI processing pipeline.99.9%
Uptime
<300ms
Response time
24/7
Support
AI Dubbing API workflow
Integrate AI dubbing into your application with just a few API calls01
Get upload URL & upload file
Get a presigned URL via API, then upload your video file using PUT request. Support for MP4, MOV, AVI, and more formats.API Request
# 1. Get upload URL
curl -X GET "https://dubsmart.ai/api/v1/upload" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"region": "EU",
"fileExtension": "mp4"
}'
# 2. Upload file using returned URL
curl -X PUT "PRESIGNED_URL_FROM_STEP_1" \
-H "Content-Type: video/mp4" \
--data-binary @video.mp402
Create project
Create a dubbing project with target languages and voice settings. Support for multiple languages in one request.API Request
curl -X POST "https://dubsmart.ai/api/v1/project" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {"path": "uploaded_file_key"},
"targetLanguages": ["es", "fr", "de"],
"voice": "voiceCloning"
}'03
Edit project
Modify project settings, title, speakers, and background volume as needed.API Request
curl --request PUT \
--url https://dubsmart.ai/api/v1/project \
--header 'Accept: application/json' \
--header 'Authorization: Bearer YOUR_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"title": "Updated Project Title",
"speakers": [
"Speaker 1",
"Speaker 2"
],
"backgroundVolume": 0.5,
"id": "64f8a2b1c3d4e5f6a7b8c9d0"
}'04
Download results
Download your dubbed video or audio files. Get individual segments or complete dubbed content.API Request
curl -X GET "https://dubsmart.ai/api/v1/project/PROJECT_ID" \
-H "Authorization: Bearer YOUR_API_KEY"AI Dubbing API endpoints
Complete API reference with examples for all endpointsGET
/uploadGet upload file URL
Get presigned URL for file upload and return file keyRequest
JSON
{
"region": "EU",
"fileExtension": "mp4"
}Response
JSON
{
"url": "https://storage.dubsmart.ai/...",
"key": "uploads/user_id/filename.mp4"
}POST
/voicesGet voices
Retrieve available AI voices with filtering optionsRequest
JSON
{
"limit": 50,
"filter": {
"language": "en",
"gender": "female",
"accent": "american"
}
}Response
JSON
{
"items": [
{
"id": "voice_id_1",
"name": "Anna",
"value": "anna_en_v2",
"language": "en",
"provider": "elevenlabs"
}
],
"nextCursor": "next_cursor_value"
}POST
/custom-voicesGet custom voices
Retrieve user-created custom voicesRequest
JSON
{
"limit": 10,
"cursor": "cursor_value"
}Response
JSON
{
"items": [
{
"id": "custom_voice_id",
"name": "My Custom Voice",
"examplePath": "https://..."
}
],
"nextCursor": "next_cursor_value"
}POST
/projectCreate project
Create a new dubbing project with video file and target languagesRequest
JSON
{
"input": {
"path": "uploaded_file_key",
"type": "LOCAL_FILE",
"voice": "voiceCloning",
"textCheck": false
},
"targetLanguages": ["es", "fr", "de"],
"title": "My Dubbing Project",
"speakersAmount": 2
}Response
JSON
{
"id": "64f8a2b1c3d4e5f6a7b8c9d0",
"groupId": "64f8a2b1c3d4e5f6a7b8c9d1",
"base": {
"title": "My Dubbing Project",
"state": "Pending",
"progress": 0
},
"targetLanguage": "es",
"groupProjects": [
{"id": "64f8a2b1c3d4e5f6a7b8c9d0", "targetLanguage": "es"},
{"id": "64f8a2b1c3d4e5f6a7b8c9d2", "targetLanguage": "fr"},
{"id": "64f8a2b1c3d4e5f6a7b8c9d3", "targetLanguage": "de"}
]
}GET
/projectGet projects
Retrieve list of all dubbing projects with paginationRequest
JSON
{
"cursor": "64f8a2b1c3d4e5f6a7b8c9d0",
"limit": 10
}Response
JSON
{
"items": [
{
"id": "64f8a2b1c3d4e5f6a7b8c9d0",
"base": {
"title": "My Dubbing Project",
"state": "Done",
"progress": 100
},
"targetLanguage": "es",
"createdAt": "2024-01-15T10:30:00Z"
}
],
"nextCursor": "64f8a2b1c3d4e5f6a7b8c9d4"
}PUT
/projectEdit project
Update project settings, title, speakers, and background volumeRequest
JSON
{
"title": "Updated Project Title",
"speakers": [
"Speaker 1",
"Speaker 2"
],
"backgroundVolume": 0.5,
"id": "64f8a2b1c3d4e5f6a7b8c9d0"
}Response
JSON
trueDELETE
/projectDelete project
Permanently delete a dubbing projectRequest
JSON
{
"id": "64f8a2b1c3d4e5f6a7b8c9d0"
}Response
JSON
trueGET
/project/{id}Get project by ID
Get detailed information about a specific project including segmentsRequest
JSON
GET /project/64f8a2b1c3d4e5f6a7b8c9d0Response
JSON
{
"id": "64f8a2b1c3d4e5f6a7b8c9d0",
"base": {
"title": "My Dubbing Project",
"state": "Done",
"progress": 100
},
"segments": [
{
"id": "64f8a2b1c3d4e5f6a7b8c9d5",
"text": "Hello world",
"translatedText": "Hola mundo",
"start": 0.0,
"end": 1.5,
"speakerId": 0,
"resultUrl": "https://..."
}
],
"videoResult": {
"value": "https://...",
"state": "Done"
}
}POST
/project/regenerateRegenerate project
Regenerate audio for entire project or specific segmentsRequest
JSON
{
"id": "64f8a2b1c3d4e5f6a7b8c9d0",
"segmentsForRegenerating": ["segment_id_1", "segment_id_2"],
"cloneVoice": true
}Response
JSON
truePOST
/project/speakerAdd speaker
Add a new speaker to the projectRequest
JSON
{
"projectId": "64f8a2b1c3d4e5f6a7b8c9d0",
"voice": "voice_id"
}Response
JSON
200 OKDELETE
/project/speakerRemove speaker
Remove a speaker from the projectRequest
JSON
{
"projectId": "64f8a2b1c3d4e5f6a7b8c9d0",
"speakerId": 0
}Response
JSON
200 OKPOST
/segmentCreate segment
Add a new speech segment to an existing projectRequest
JSON
{
"projectId": "64f8a2b1c3d4e5f6a7b8c9d0",
"text": "New segment text",
"translatedText": "Texto del nuevo segmento",
"start": 10.5,
"end": 12.0,
"speakerId": 0,
"voice": "voiceCloning"
}Response
JSON
{
"id": "64f8a2b1c3d4e5f6a7b8c9d6",
"projectId": "64f8a2b1c3d4e5f6a7b8c9d0",
"text": "New segment text",
"translatedText": "Texto del nuevo segmento",
"start": 10.5,
"end": 12.0,
"speakerId": 0,
"state": "Pending"
}PUT
/segmentEdit segment
Update segment text, timing, or voice parametersRequest
JSON
{
"id": "64f8a2b1c3d4e5f6a7b8c9d6",
"projectId": "64f8a2b1c3d4e5f6a7b8c9d0",
"text": "Updated segment text",
"translatedText": "Texto actualizado del segmento",
"start": 10.0,
"end": 12.5,
"speakerId": 0,
"voice": "voiceCloning"
}Response
JSON
{
"id": "64f8a2b1c3d4e5f6a7b8c9d6",
"text": "Updated segment text",
"translatedText": "Texto actualizado del segmento",
"start": 10.0,
"end": 12.5,
"speakerId": 0,
"state": "Pending"
}DELETE
/segmentDelete segment
Remove a speech segment from a project by IDRequest
JSON
{
"id": "64f8a2b1c3d4e5f6a7b8c9d6",
"projectId": "64f8a2b1c3d4e5f6a7b8c9d0"
}Response
JSON
trueAI Dubbing API code examples
Ready-to-use code examples in multiple programming languagesJavaScript Example
// JavaScript/Node.js Example
const axios = require('axios');
const fs = require('fs');
const API_KEY = 'your_api_key_here';
const BASE_URL = 'https://dubsmart.ai/api/v1';
async function createDubbingProject() {
try {
// 1. Get upload URL
const uploadResponse = await axios.get(`${BASE_URL}/upload`, {
params: {
region: 'EU',
fileExtension: 'mp4'
},
headers: { 'Authorization': `Bearer ${API_KEY}` }
});
// 2. Upload file using presigned URL
const fileBuffer = fs.readFileSync('video.mp4');
await axios.put(uploadResponse.data.url, fileBuffer, {
headers: {
'Content-Type': 'video/mp4'
}
});
// 3. Create dubbing project
const projectResponse = await axios.post(`${BASE_URL}/project`, {
input: {
path: uploadResponse.data.key,
type: 'LOCAL_FILE',
voice: 'voiceCloning',
textCheck: false
},
targetLanguages: ['es', 'fr', 'de'],
title: 'My Multilingual Video'
}, {
headers: { 'Authorization': `Bearer ${API_KEY}` }
});
console.log('Project created:', projectResponse.data);
return projectResponse.data;
} catch (error) {
console.error('Error:', error.response?.data || error.message);
}
}
// Monitor project status
async function checkProjectStatus(projectId) {
const response = await axios.get(`${BASE_URL}/project/${projectId}`, {
headers: { 'Authorization': `Bearer ${API_KEY}` }
});
return response.data;
}Python Example
# Python Example
import requests
import time
API_KEY = 'your_api_key_here'
BASE_URL = 'https://dubsmart.ai/api/v1'
def create_dubbing_project():
headers = {'Authorization': f'Bearer {API_KEY}'}
try:
# 1. Get upload URL
upload_params = {
'region': 'EU',
'fileExtension': 'mp4'
}
upload_response = requests.get(
f'{BASE_URL}/upload',
params=upload_params,
headers=headers
)
upload_response.raise_for_status()
# 2. Upload file using presigned URL
with open('video.mp4', 'rb') as file:
upload_file_response = requests.put(
upload_response.json()['url'],
data=file,
headers={'Content-Type': 'video/mp4'}
)
upload_file_response.raise_for_status()
# 3. Create dubbing project
project_data = {
'input': {
'path': upload_response.json()['key'],
'type': 'LOCAL_FILE',
'voice': 'voiceCloning',
'textCheck': False
},
'targetLanguages': ['es', 'fr', 'de'],
'title': 'My Multilingual Video'
}
project_response = requests.post(
f'{BASE_URL}/project',
json=project_data,
headers=headers
)
project_response.raise_for_status()
print('Project created:', project_response.json())
return project_response.json()
except requests.exceptions.RequestException as e:
print(f'Error: {e}')
return None
def monitor_project(project_id):
headers = {'Authorization': f'Bearer {API_KEY}'}
while True:
response = requests.get(
f'{BASE_URL}/project/{project_id}',
headers=headers
)
response.raise_for_status()
project = response.json()
status = project['base']['state']
print(f'Project status: {status}')
if status == 'Done':
print('Project completed!')
return project
elif status == 'Error':
print('Project failed!')
return None
time.sleep(30) # Check every 30 secondscURL Example
# cURL Examples
# 1. Get upload URL
curl -X GET "https://dubsmart.ai/api/v1/upload?region=EU&fileExtension=mp4" \
-H "Authorization: Bearer YOUR_API_KEY"
# 2. Upload file using presigned URL
curl -X PUT "PRESIGNED_URL_FROM_STEP_1" \
-H "Content-Type: video/mp4" \
--data-binary @video.mp4
# 3. Create dubbing project
curl -X POST "https://dubsmart.ai/api/v1/project" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"input": {
"path": "uploaded_file_key",
"type": "LOCAL_FILE",
"voice": "voiceCloning",
"textCheck": false
},
"targetLanguages": ["es", "fr", "de"],
"title": "My Multilingual Video"
}'
# 4. Check project status
curl -X GET "https://dubsmart.ai/api/v1/project/PROJECT_ID" \
-H "Authorization: Bearer YOUR_API_KEY"
# 5. Download results
curl -X GET "https://dubsmart.ai/api/v1/project/PROJECT_ID" \
-H "Authorization: Bearer YOUR_API_KEY" \
-o "dubbed_video.mp4"PHP Example
<?php
// PHP Example
$apiKey = 'your_api_key_here';
$baseUrl = 'https://dubsmart.ai/api/v1';
function createDubbingProject() {
global $apiKey, $baseUrl;
$headers = [
'Authorization: Bearer ' . $apiKey,
'Content-Type: application/json'
];
try {
// 1. Get upload URL
$uploadParams = [
'region' => 'EU',
'fileExtension' => 'mp4'
];
$uploadResponse = httpRequest(
$baseUrl . '/upload?' . http_build_query($uploadParams),
'GET',
null,
$headers
);
// 2. Upload file using presigned URL
$fileContent = file_get_contents('video.mp4');
$uploadFileResponse = httpRequest(
$uploadResponse['url'],
'PUT',
$fileContent,
['Content-Type: video/mp4']
);
// 3. Create dubbing project
$projectData = [
'input' => [
'path' => $uploadResponse['key'],
'type' => 'LOCAL_FILE',
'voice' => 'voiceCloning',
'textCheck' => false
],
'targetLanguages' => ['es', 'fr', 'de'],
'title' => 'My Multilingual Video'
];
$projectResponse = httpRequest(
$baseUrl . '/project',
'POST',
$projectData,
$headers
);
echo "Project created: " . json_encode($projectResponse);
return $projectResponse;
} catch (Exception $e) {
echo "Error: " . $e->getMessage();
return null;
}
}
function httpRequest($url, $method, $data, $headers) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
if ($method === 'POST') {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
} elseif ($method === 'PUT') {
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
}
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode >= 200 && $httpCode < 300) {
return json_decode($response, true);
} else {
throw new Exception("HTTP Error: " . $httpCode);
}
}
// Usage
$project = createDubbingProject();
?>FAQ
What file formats does the API support?
The API supports all major video formats including MP4, MOV, AVI, MKV, WebM, and more. For audio files, we support MP3, WAV, AAC, and other common formats. Maximum file size is 5GB.
How long does dubbing take?
Processing time depends on video length, and file size. A 5-minute video typically takes 1 minute to process. Enterprise customers get priority processing with faster turnaround times.
What languages are supported?
We support 33+ target languages including English, Portuguese, Spanish, French, German, Chinese, Japanese, Korean, Russian, Arabic, Hindi, and many more. We can also detect and process content from 99+ source languages.
How does voice cloning work?
Our advanced AI analyzes the original speaker's voice characteristics including tone, pitch, accent, and speaking style. It then generates synthetic speech that maintains these unique qualities while speaking in the target language.
Can I edit the dubbed content?
Yes! The API provides full editing capabilities. You can modify translated text, adjust timing, change voices, and regenerate specific segments.
Can I use the API for commercial projects?
Yes! All plans allow commercial use. The API is designed for production environments and is used by major content creators, businesses, and media companies worldwide.
