Batch update source segments
PATCH https://api.elevenlabs.io/v1/dubbing/project//transcript/segments Content-Type: application/json
Enterprise only. Edit several source segments' text, speaker, or timing in one atomic request: every edit applies or none does. Bumps the project's revision, discards the affected translations in every language target, and marks any target that had already completed stale. No audio changes until you regenerate a target.
Reference: https://elevenlabs.io/docs/api-reference/dubbing/source-transcript/batch-update-source-segments
Servers
Section titled “Servers”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)
Request
Section titled “Request”Path parameters
Section titled “Path parameters”project_id(string, required) — Identifier of the dubbing project.
Body (application/json)
Section titled “Body (application/json)”This endpoint expects a DubbingBulkSegmentUpdateRequest.
segments(map from string to DubbingSegmentUpdateRequest, required) — Map of segment ID to the partial update to apply to that segment. At least one entry and at most 500.
Response
Section titled “Response”Successful Response
segments(list of DubbingTranscriptSegment, required) — The edited segments in their updated state.revision(integer, required) — The project's source-transcript revision after the edits.
Errors
Section titled “Errors”422 Unprocessable Entity Error
Section titled “422 Unprocessable Entity Error”Validation Error
detail(list of ValidationError, optional)
DubbingSegmentUpdateRequest
Section titled “DubbingSegmentUpdateRequest”A partial update to a source segment; omitted fields are left unchanged.
text(string, optional, nullable) — New text for the segment.speaker_id(string, optional, nullable) — New speaker ID for the segment.start_s(double, optional, nullable) — New start time, in seconds.end_s(double, optional, nullable) — New end time, in seconds.
DubbingTranscriptSegment
Section titled “DubbingTranscriptSegment”One segment of a source transcript.
id(string, required) — Stable identifier of the segment, used to address it in edit requests.text(string, required) — The transcribed text of the segment.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.external_id(string, optional, nullable) — The caller-supplied external ID for this segment, if one was provided.
ValidationError
Section titled “ValidationError”loc(list of ValidationErrorLocItems, required)msg(string, required)type(string, required)
ValidationErrorLocItems
Section titled “ValidationErrorLocItems”Examples
Section titled “Examples”Request
{
"segments": {
"0199a3f0-1c2d-7abc-8def-0123456789ab": {
"text": "Welcome to our latest product demo."
},
"0199a3f0-3e4f-7abc-8def-0123456789cd": {
"speaker_id": "narrator"
}
}
}Response
{
"segments": [
{
"id": "0199a3f0-1c2d-7abc-8def-0123456789ab",
"text": "Welcome to our latest product demo.",
"speaker_id": "default_speaker",
"start_s": 0,
"end_s": 2.5
},
{
"id": "0199a3f0-3e4f-7abc-8def-0123456789cd",
"text": "Let's get started.",
"speaker_id": "narrator",
"start_s": 2.5,
"end_s": 4
}
],
"revision": 5
}SDK Code
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
async function main() {
const client = new ElevenLabsClient();
await client.dubbing.project.transcript.updateSegments("proj_1601kwkyxp0hfzvtmyxwqxx6mcy3", {
segments: {
"0199a3f0-1c2d-7abc-8def-0123456789ab": {
text: "Welcome to our latest product demo.",
},
"0199a3f0-3e4f-7abc-8def-0123456789cd": {
speakerId: "narrator",
},
},
});
}
main();
from elevenlabs import ElevenLabs, DubbingSegmentUpdateRequest
client = ElevenLabs()
client.dubbing.project.transcript.update_segments(
project_id="proj_1601kwkyxp0hfzvtmyxwqxx6mcy3",
segments={
"0199a3f0-1c2d-7abc-8def-0123456789ab": DubbingSegmentUpdateRequest(
text="Welcome to our latest product demo.",
),
"0199a3f0-3e4f-7abc-8def-0123456789cd": DubbingSegmentUpdateRequest(
speaker_id="narrator",
)
},
)
package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/transcript/segments"
payload := strings.NewReader("{\n \"segments\": {\n \"0199a3f0-1c2d-7abc-8def-0123456789ab\": {\n \"text\": \"Welcome to our latest product demo.\"\n },\n \"0199a3f0-3e4f-7abc-8def-0123456789cd\": {\n \"speaker_id\": \"narrator\"\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))
}require 'uri'
require 'net/http'
url = URI("https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/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 \"text\": \"Welcome to our latest product demo.\"\n },\n \"0199a3f0-3e4f-7abc-8def-0123456789cd\": {\n \"speaker_id\": \"narrator\"\n }\n }\n}"
response = http.request(request)
puts response.read_bodyimport 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/transcript/segments")
.header("Content-Type", "application/json")
.body("{\n \"segments\": {\n \"0199a3f0-1c2d-7abc-8def-0123456789ab\": {\n \"text\": \"Welcome to our latest product demo.\"\n },\n \"0199a3f0-3e4f-7abc-8def-0123456789cd\": {\n \"speaker_id\": \"narrator\"\n }\n }\n}")
.asString();<?php
require_once('vendor/autoload.php');
$client = new \GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/transcript/segments', [
'body' => '{
"segments": {
"0199a3f0-1c2d-7abc-8def-0123456789ab": {
"text": "Welcome to our latest product demo."
},
"0199a3f0-3e4f-7abc-8def-0123456789cd": {
"speaker_id": "narrator"
}
}
}',
'headers' => [
'Content-Type' => 'application/json',
],
]);
echo $response->getBody();using RestSharp;
var client = new RestClient("https://api.elevenlabs.io/v1/dubbing/project/proj_1601kwkyxp0hfzvtmyxwqxx6mcy3/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 \"text\": \"Welcome to our latest product demo.\"\n },\n \"0199a3f0-3e4f-7abc-8def-0123456789cd\": {\n \"speaker_id\": \"narrator\"\n }\n }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);import Foundation
let headers = ["Content-Type": "application/json"]
let parameters = ["segments": [
"0199a3f0-1c2d-7abc-8def-0123456789ab": ["text": "Welcome to our latest product demo."],
"0199a3f0-3e4f-7abc-8def-0123456789cd": ["speaker_id": "narrator"]
]] 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/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()