Skip to main content
ElevenLabs Documentation Docs

Search documentation

Type to search this documentation.

On this pageOverview

Batch update target segments

PATCH https://api.elevenlabs.io/v1/dubbing/project//language//transcript/segments Content-Type: application/json

Enterprise only. Edit several segments' translations for a language target in one atomic request: every edit applies or none does. Bumps the target's revision and marks it stale if it had already completed. The source transcript and the project's other languages are untouched, and no audio changes until you regenerate the target.

Reference: https://elevenlabs.io/docs/api-reference/dubbing/target-transcript/batch-update-target-segments

  • https://api.elevenlabs.io (Production, default)
  • https://api.us.elevenlabs.io (Production US)
  • https://api.eu.residency.elevenlabs.io (Production EU)
  • https://api.in.residency.elevenlabs.io (Production India)
  • https://api.sg.residency.elevenlabs.io (Production Singapore)
  • project_id (string, required) — Identifier of the dubbing project.
  • language_id (string, required) — Identifier of the language target.

This endpoint expects a DubbingBulkTargetSegmentUpdateRequest.

  • segments (map from string to DubbingTargetSegmentUpdateRequest, required) — Map of segment ID to the translation edit to apply to that segment. At least one entry and at most 500.

Successful Response

  • segments (list of DubbingTargetTranscriptSegment, required) — The edited target segments in their updated state.
  • revision (integer, required) — The target's revision after the edits.

Validation Error

  • detail (list of ValidationError, optional)

A partial edit to a target segment. An omitted field is left unchanged; a provided null clears it (see each field for what clearing means).

  • translation (string, optional, nullable) — New translated text, or null to mark the segment for re-translation.

One segment of a target transcript: a source segment plus its translation.

  • id (string, required) — Stable identifier of the segment (from the source).
  • speaker_id (string, required) — Identifier of the segment's speaker.
  • start_s (double, required) — Start time of the segment, in seconds.
  • end_s (double, required) — End time of the segment, in seconds.
  • source_text (string, required) — The source-language text of the segment.
  • translation (string, optional, nullable) — The translated text, or null if not translated yet (needs translation).
  • loc (list of ValidationErrorLocItems, required)
  • msg (string, required)
  • type (string, required)

Request

JSON
{
  "segments": {
    "0199a3f0-1c2d-7abc-8def-0123456789ab": {
      "translation": "Bienvenido a nuestra última demostración de producto."
    },
    "0199a3f0-3e4f-7abc-8def-0123456789cd": {
      "translation": "Empecemos."
    }
  }
}

Response

JSON
{
  "segments": [
    {
      "id": "0199a3f0-1c2d-7abc-8def-0123456789ab",
      "speaker_id": "default_speaker",
      "start_s": 0,
      "end_s": 2.5,
      "source_text": "Welcome to our product demo.",
      "translation": "Bienvenido a nuestra última demostración de producto."
    },
    {
      "id": "0199a3f0-3e4f-7abc-8def-0123456789cd",
      "speaker_id": "narrator",
      "start_s": 2.5,
      "end_s": 4,
      "source_text": "Let's get started.",
      "translation": "Empecemos."
    }
  ],
  "revision": 5
}

SDK Code

TypeScript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";

async function main() {
    const client = new ElevenLabsClient();
    await client.dubbing.project.language.transcript.updateSegments("proj_1601kwkyxp0hfzvtmyxwqxx6mcy3", "lang_1001kwkyxp0je6ktn4knsfrasx5s", {
        segments: {
            "0199a3f0-1c2d-7abc-8def-0123456789ab": {
                translation: "Bienvenido a nuestra última demostración de producto.",
            },
            "0199a3f0-3e4f-7abc-8def-0123456789cd": {
                translation: "Empecemos.",
            },
        },
    });
}
main();
Python
from elevenlabs import ElevenLabs, DubbingTargetSegmentUpdateRequest

client = ElevenLabs()

client.dubbing.project.language.transcript.update_segments(
    project_id="proj_1601kwkyxp0hfzvtmyxwqxx6mcy3",
    language_id="lang_1001kwkyxp0je6ktn4knsfrasx5s",
    segments={
        "0199a3f0-1c2d-7abc-8def-0123456789ab": DubbingTargetSegmentUpdateRequest(
            translation="Bienvenido a nuestra última demostración de producto.",
        ),
        "0199a3f0-3e4f-7abc-8def-0123456789cd": DubbingTargetSegmentUpdateRequest(
            translation="Empecemos.",
        )
    },
)
Go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language/lang_1001kwkyxp0je6ktn4knsfrasx5s/transcript/segments"

	payload := strings.NewReader("{\n  \"segments\": {\n    \"0199a3f0-1c2d-7abc-8def-0123456789ab\": {\n      \"translation\": \"Bienvenido a nuestra última demostración de producto.\"\n    },\n    \"0199a3f0-3e4f-7abc-8def-0123456789cd\": {\n      \"translation\": \"Empecemos.\"\n    }\n  }\n}")

	req, _ := http.NewRequest("PATCH", url, payload)

	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
Ruby
require 'uri'
require 'net/http'

url = URI("https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language/lang_1001kwkyxp0je6ktn4knsfrasx5s/transcript/segments")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n  \"segments\": {\n    \"0199a3f0-1c2d-7abc-8def-0123456789ab\": {\n      \"translation\": \"Bienvenido a nuestra última demostración de producto.\"\n    },\n    \"0199a3f0-3e4f-7abc-8def-0123456789cd\": {\n      \"translation\": \"Empecemos.\"\n    }\n  }\n}"

response = http.request(request)
puts response.read_body
Java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.patch("https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language/lang_1001kwkyxp0je6ktn4knsfrasx5s/transcript/segments")
  .header("Content-Type", "application/json")
  .body("{\n  \"segments\": {\n    \"0199a3f0-1c2d-7abc-8def-0123456789ab\": {\n      \"translation\": \"Bienvenido a nuestra última demostración de producto.\"\n    },\n    \"0199a3f0-3e4f-7abc-8def-0123456789cd\": {\n      \"translation\": \"Empecemos.\"\n    }\n  }\n}")
  .asString();
PHP
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PATCH', 'https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language/lang_1001kwkyxp0je6ktn4knsfrasx5s/transcript/segments', [
  'body' => '{
  "segments": {
    "0199a3f0-1c2d-7abc-8def-0123456789ab": {
      "translation": "Bienvenido a nuestra última demostración de producto."
    },
    "0199a3f0-3e4f-7abc-8def-0123456789cd": {
      "translation": "Empecemos."
    }
  }
}',
  'headers' => [
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
C#
using RestSharp;

var client = new RestClient("https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language/lang_1001kwkyxp0je6ktn4knsfrasx5s/transcript/segments");
var request = new RestRequest(Method.PATCH);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"segments\": {\n    \"0199a3f0-1c2d-7abc-8def-0123456789ab\": {\n      \"translation\": \"Bienvenido a nuestra última demostración de producto.\"\n    },\n    \"0199a3f0-3e4f-7abc-8def-0123456789cd\": {\n      \"translation\": \"Empecemos.\"\n    }\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Swift
import Foundation

let headers = ["Content-Type": "application/json"]
let parameters = ["segments": [
    "0199a3f0-1c2d-7abc-8def-0123456789ab": ["translation": "Bienvenido a nuestra última demostración de producto."],
    "0199a3f0-3e4f-7abc-8def-0123456789cd": ["translation": "Empecemos."]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/language/lang_1001kwkyxp0je6ktn4knsfrasx5s/transcript/segments")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PATCH"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu