Update Subtitle
Replace the subtitle segments of a recording’s language track. The request body must contain every segment in the final state — the endpoint performs a bulk replace, not a partial patch. Any segment you omit is removed from the track. Use this to push subtitle edits made externally (for example, by AI editing tools) back into Studio.
words is the source of truth — never send empty words
Each segment’s words array (word-level text and timings) is authoritative. Subtitle rendering and dubbing text-to-speech are generated from words; the segment-level text field is only a human-readable mirror and is ignored when rendering subtitles or synthesizing speech.
A segment whose words array is empty is treated as having no content: it is silently dropped the next time the track is read, and for dubbing nothing is synthesized for it. This is the most common cause of a track that “comes back empty” after an update. Never submit "words": [] unless you intend to remove that segment’s content.
To change what a segment says — for example, shortening a dubbing line — rewrite its words array, not just text. Mirror the change in text for readability, but the words entries are what actually change the rendered subtitle and the generated audio.
Recommended workflow
GETthe track to fetch the current segments with their word-level timings.- Edit the
wordsarray of the segment(s) you want to change (and mirror the new text intext). Leave every other segment untouched. PUTthe full segment array back. For a dubbing redub, list the changed segment ids insegmentsToReduband keepenqueueTtsUpdate=trueso their audio is regenerated from the newwords.
To edit text without triggering re-synthesis, set enqueueTtsUpdate to false — but still send the full words array for every segment.
Language scoping
The language value must match the requested task type for the recording:
- When
source=trueanddubbing=false(transcription),languagemust equal the recording source language. - When
source=falseanddubbing=false(translation),languagemust be one of the recording translation languages. - When
source=falseanddubbing=true(dubbing),languagemust be one of the recording translation languages. source=trueanddubbing=truetogether is invalid.
Mismatched combinations return 400 with a descriptive message rather than reaching the underlying file lookup.
Authorizations
Body
BCP-47 language code of the track to write
Full segment list for the target language track. The endpoint performs a bulk replace, so the array must contain every segment in the final state, not just the edited ones. Every segment must include a non-empty words array; omitting a segment deletes it, and an empty words array drops the segment on the next read.
True when writing the source (transcript) track
True when writing a dubbing track
Dubbing background-audio volume (only honored for dubbing tracks)
Per-speaker volume overrides (dubbing only)
Per-speaker TTS voice settings (dubbing only)
Segment ids that should be re-synthesized after this update
When true (default), the dubbing segments listed in segmentsToRedub are queued for TTS regeneration from their words. Set to false to save edits without re-synthesis (for example, text-only fixes) — you must still send the full words array for every segment.
Response
Subtitles updated successfully