Skip to main content
ElevenLabs Documentation Docs

Search documentation

Type to search this documentation.

On this pageOverview

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

  • 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.

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.

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.

Validation Error

  • detail (list of ValidationError, optional)

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.

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.
  • loc (list of ValidationErrorLocItems, required)
  • msg (string, required)
  • type (string, required)

Request

JSON
{
  "segments": {
    "0199a3f0-1c2d-7abc-8def-0123456789ab": {
      "text": "Welcome to our latest product demo."
    },
    "0199a3f0-3e4f-7abc-8def-0123456789cd": {
      "speaker_id": "narrator"
    }
  }
}

Response

JSON
{
  "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

TypeScript
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();
Python
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",
        )
    },
)
Go
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))

}
Ruby
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_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/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
<?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();
C#
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);
Swift
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()
Suggest an edit

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

Export
Documentation menu