Sonilo Video Dubbing API

Sonilo Video Dubbing translates the speech in a video and replaces it with dubbed speech in each target language you request, optionally lowering background audio under the new voice.

Video Dubbing

Provider

Sonilo

Billing

Per second

ScalingTensor price

$0.0985 per second of source video, multiplied by the number of languages

Playground

Try Sonilo Video Dubbing

Edit the params, add your API key and run the model here. The result plays on this page when the job completes.

Input

Used for this request only and never stored. Get a key

Running a request charges your wallet: $0.0985 per second of source video, multiplied by the number of languages.

Output

preview

Request summary

Endpoint
POST /api/media/generate
Model ID
sonilo/dubbing
ducking
true
languages
["es","fr"]
video_url
https://example.com/your-video.mp4

Need chat models, job lookups or the raw response? Open the full playground.

Pricing

Sonilo Video Dubbing API pricing

Prices come from the live catalog. There is no subscription; each request is charged to your prepaid wallet.

ScalingTensor price

Per second

Live catalog price

$0.0985

per second of source video, multiplied by the number of languages

A 60-second video costs $17.73 with 3 languages.

Compare all model prices

Shared balance

Add credits

Top up

One wallet and one API key for every model in the catalog. Top-ups start at $10 and are paid through Stripe.

Capabilities

What you can do with Sonilo Video Dubbing

Parameters

Input parameters

These parameters belong inside the request body's params object.

Input parameters
nametyperequireddescription
video_urlstringconditionalURL to a video file. Provide either video or video_url, not both. Must be a public https:// URL — plain http:// is rejected (the dubbing pipeline requires https); private/internal addresses are rejected.
languagesstringoptionalOptional JSON array of target language codes, e. g. ["es", "fr"]. Defaults to ["zh_cn", "es", "fr"] when omitted. Billed as video duration × number of languages requested.
duckingbooleanoptionalOptional boolean. Set to true to apply Sonilo ducking — the background music/effects bed is lowered while the dubbed voice is speaking. Defaults to false: the dubbed voice is mixed over the bed unchanged.

Output fields

Output fields
nametypedescription
statusstringAlways processing on submission — generation runs asynchronously.
outputsobjectPresent when the task succeeded — a map of language code to a temporary download URL for that language's dubbed video, valid for 7 days.
subtitlesobjectPresent when export_srt was set and the task succeeded — a map of language code to a temporary download URL for that language's re‑timed .srt.
subtitle_preflightobjectPresent when subtitle scripts were given — per language: status, cue_count, issues, changes_count, report_url.
subtitle_exportobjectPresent when export_srt was set — per language: status (exported, exported_review_required or blocked), issues, alignment_loss, error, report_url. A blocked export never fails the task.
duration_secondsnumberThe source video's duration, in seconds. Present when the task succeeded.

API

Call Sonilo Video Dubbing from your code

Create a key in the console and call the API from your server using the apiKey header. Save data.jobId and poll GET /api/media/result?jobId=... with the same key; a code of 0 means success.

POST /api/media/generate
curl --request POST 'https://restapi.scalingtensor.com/api/media/generate' \
  --header 'apiKey: YOUR_API_KEY' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "model": "sonilo/dubbing",
  "params": {
    "ducking": true,
    "languages": [
      "es",
      "fr"
    ],
    "video_url": "https://example.com/your-video.mp4"
  }
}'
const response = await fetch("https://restapi.scalingtensor.com/api/media/generate", {
  method: "POST",
  headers: {
    apiKey: process.env.SCALINGTENSOR_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "model": "sonilo/dubbing",
    "params": {
      "ducking": true,
      "languages": [
        "es",
        "fr"
      ],
      "video_url": "https://example.com/your-video.mp4"
    }
  }),
});

const result = await response.json();
if (!response.ok || result.code !== 0) {
  throw new Error(result.msg || `Request failed: ${response.status}`);
}
console.log(result.data); // Save data.jobId to query /api/media/result
import os
import requests

payload = {
    "model": "sonilo/dubbing",
    "params": {
        "ducking": True,
        "languages": [
            "es",
            "fr",
        ],
        "video_url": "https://example.com/your-video.mp4",
    },
}

response = requests.post(
    "https://restapi.scalingtensor.com/api/media/generate",
    headers={"apiKey": os.environ["SCALINGTENSOR_API_KEY"]},
    json=payload,
    timeout=60,
)
result = response.json()
if result["code"] != 0:
    raise RuntimeError(result["msg"])
print(result["data"])  # Save data["jobId"] to query /api/media/result

API documentation · This page as Markdown · Markdown API reference

Related models

Sonilo Video Dubbing API FAQ

How much does the Sonilo Video Dubbing API cost?

Sonilo Video Dubbing costs $0.0985 per second of source video, multiplied by the number of languages on ScalingTensor. A 60-second video costs $17.73 with 3 languages. There is no subscription; usage is charged to your prepaid wallet.

How do I call the Sonilo Video Dubbing API?

Send POST /api/media/generate with "model": "sonilo/dubbing" and the parameters in a params object, using your apiKey header. The call returns a jobId. Poll GET /api/media/result?jobId=... until the status is completed, then read the output URL from the result.

Which parameters does Sonilo Video Dubbing accept?

No parameter is strictly required. Optional: video_url, languages and ducking. The parameter table on this page describes each one.

Do I need a Sonilo account to use Sonilo Video Dubbing?

No. You call Sonilo Video Dubbing with your ScalingTensor API key and pay from your ScalingTensor wallet. The same key works for every other model in the catalog.