Eleven Dubbing v1
curl --request POST \
--url https://api.snapgen.org/v1/audio/dubbing \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"source_url": "<string>",
"target_language": "<string>",
"source_language": "<string>",
"num_speakers": 123,
"highest_resolution": true,
"drop_background_audio": true,
"webhook": "<string>",
"webhook_secret": "<string>"
}
'import requests
url = "https://api.snapgen.org/v1/audio/dubbing"
payload = {
"model": "<string>",
"source_url": "<string>",
"target_language": "<string>",
"source_language": "<string>",
"num_speakers": 123,
"highest_resolution": True,
"drop_background_audio": True,
"webhook": "<string>",
"webhook_secret": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
source_url: '<string>',
target_language: '<string>',
source_language: '<string>',
num_speakers: 123,
highest_resolution: true,
drop_background_audio: true,
webhook: '<string>',
webhook_secret: '<string>'
})
};
fetch('https://api.snapgen.org/v1/audio/dubbing', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.snapgen.org/v1/audio/dubbing",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'source_url' => '<string>',
'target_language' => '<string>',
'source_language' => '<string>',
'num_speakers' => 123,
'highest_resolution' => true,
'drop_background_audio' => true,
'webhook' => '<string>',
'webhook_secret' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.snapgen.org/v1/audio/dubbing"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"source_url\": \"<string>\",\n \"target_language\": \"<string>\",\n \"source_language\": \"<string>\",\n \"num_speakers\": 123,\n \"highest_resolution\": true,\n \"drop_background_audio\": true,\n \"webhook\": \"<string>\",\n \"webhook_secret\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.snapgen.org/v1/audio/dubbing")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"source_url\": \"<string>\",\n \"target_language\": \"<string>\",\n \"source_language\": \"<string>\",\n \"num_speakers\": 123,\n \"highest_resolution\": true,\n \"drop_background_audio\": true,\n \"webhook\": \"<string>\",\n \"webhook_secret\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snapgen.org/v1/audio/dubbing")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"source_url\": \"<string>\",\n \"target_language\": \"<string>\",\n \"source_language\": \"<string>\",\n \"num_speakers\": 123,\n \"highest_resolution\": true,\n \"drop_background_audio\": true,\n \"webhook\": \"<string>\",\n \"webhook_secret\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyElevenLabs Voice & Dubbing
Eleven Dubbing v1
Translate and re-voice a video or audio file into 32 languages, without a watermark. $0.75 per minute.
POST
/
v1
/
audio
/
dubbing
Eleven Dubbing v1
curl --request POST \
--url https://api.snapgen.org/v1/audio/dubbing \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "<string>",
"source_url": "<string>",
"target_language": "<string>",
"source_language": "<string>",
"num_speakers": 123,
"highest_resolution": true,
"drop_background_audio": true,
"webhook": "<string>",
"webhook_secret": "<string>"
}
'import requests
url = "https://api.snapgen.org/v1/audio/dubbing"
payload = {
"model": "<string>",
"source_url": "<string>",
"target_language": "<string>",
"source_language": "<string>",
"num_speakers": 123,
"highest_resolution": True,
"drop_background_audio": True,
"webhook": "<string>",
"webhook_secret": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: '<string>',
source_url: '<string>',
target_language: '<string>',
source_language: '<string>',
num_speakers: 123,
highest_resolution: true,
drop_background_audio: true,
webhook: '<string>',
webhook_secret: '<string>'
})
};
fetch('https://api.snapgen.org/v1/audio/dubbing', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.snapgen.org/v1/audio/dubbing",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => '<string>',
'source_url' => '<string>',
'target_language' => '<string>',
'source_language' => '<string>',
'num_speakers' => 123,
'highest_resolution' => true,
'drop_background_audio' => true,
'webhook' => '<string>',
'webhook_secret' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.snapgen.org/v1/audio/dubbing"
payload := strings.NewReader("{\n \"model\": \"<string>\",\n \"source_url\": \"<string>\",\n \"target_language\": \"<string>\",\n \"source_language\": \"<string>\",\n \"num_speakers\": 123,\n \"highest_resolution\": true,\n \"drop_background_audio\": true,\n \"webhook\": \"<string>\",\n \"webhook_secret\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.snapgen.org/v1/audio/dubbing")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"<string>\",\n \"source_url\": \"<string>\",\n \"target_language\": \"<string>\",\n \"source_language\": \"<string>\",\n \"num_speakers\": 123,\n \"highest_resolution\": true,\n \"drop_background_audio\": true,\n \"webhook\": \"<string>\",\n \"webhook_secret\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snapgen.org/v1/audio/dubbing")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"<string>\",\n \"source_url\": \"<string>\",\n \"target_language\": \"<string>\",\n \"source_language\": \"<string>\",\n \"num_speakers\": 123,\n \"highest_resolution\": true,\n \"drop_background_audio\": true,\n \"webhook\": \"<string>\",\n \"webhook_secret\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyeleven-dubbing-v1 translates and re-voices the speech in a video or audio file into another language. It runs as an asynchronous task; download the dubbed file when the task succeeds. Output has no watermark.
| Property | Value |
|---|---|
| Model ID | eleven-dubbing-v1 |
| Endpoint | POST /v1/audio/dubbing |
| Output | A task; download the dubbed audio or video from GET /v1/tasks/{id}/content |
| Limits | Source up to 1,800 seconds (30 minutes) |
| Billed on | Source length measured by SnapGen, in whole seconds |
| Price | $0.0125 per second ($0.75 per minute, 1.25 credits per second) |
string
required
Set to
eleven-dubbing-v1.string
required
Public
http or https URL of the video or audio to dub. The provider fetches it; SnapGen measures its length for billing.string
required
Language to dub into, as a code from the language list, such as
es.string
default:"auto"
Language spoken in the source, from the same list.
auto detects it.integer
Number of speakers, from
0 to 32. 0 detects it automatically.boolean
Uses the highest available resolution for video output.
boolean
Drops the background audio from the dub, which can help speeches and monologues.
string
Optional public
https URL that receives one signed event when the task finishes. See Task webhooks.string
Required with
webhook: 16 to 256 characters, used to sign the delivery.Request
curl https://api.snapgen.org/v1/audio/dubbing \
-H "Authorization: Bearer $SNAPGEN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "eleven-dubbing-v1",
"source_url": "https://example.com/product-demo.mp4",
"target_language": "es"
}'
202 with a task. Poll GET /v1/tasks/{id} until status is succeeded, then download the dubbed file:
curl -L https://api.snapgen.org/v1/tasks/$TASK_ID/content \
-H "Authorization: Bearer $SNAPGEN_API_KEY" \
--output dubbed.mp4
Price examples
| Length | Price |
|---|---|
| 1 minute | $0.75 |
| 10 minutes | $7.50 |
| 30 minutes | $22.50 |
Send an
Idempotency-Key header (1 to 200 characters) so a retried submission returns the same task instead of a second, billed one.
See Dubbing for every field, the response, and errors.