v2.0.5 — Timed-word transcripts, script-to-video scene ranges, transcript GA, and assistant API refinements
This release reshapes transcripts around timed words, exposes both the structured transcript and its plain text on file reads, brings caller-provided scene ranges to script-to-video, graduates the pre-computed upload transcript and voiceover scene ranges out of beta, and refines the Assistant API.
Added
transcriptTexton file reads:GET /v1/files/{fileId}now returns a plaintranscriptTextstring alongside the structuredtranscriptobject, for audio and video files that have a transcript. It is the flattened spoken text (no timing) and isnullfor images or when no transcript has been generated. UsetranscriptTextwhen you only need the words andtranscriptwhen you need per-word timing.- Scene ranges on script-to-video:
POST /v1/workflows/script-to-videoaccepts optionalscenes(SceneDescriptionRange[]:startSeconds,endSeconds,description) to direct what appears on screen over absolute time ranges, matching the existing field on voiceover-to-video. Passed ranges override the automatic scene split only where they are defined; the workflow fills the gaps and keeps section boundaries off your range edges. Ranges must be sorted bystartSecondsand non-overlapping, and timings may extend past the finished video (they are cropped). Omit to let the workflow choose visuals automatically.
Changed
- Breaking: transcripts are now timed
wordsinstead ofsegments. TheTranscripttype used by the optionaltranscriptonPOST /v1/files/uploadnow carrieswords({ startSeconds, endSeconds, word }) instead ofsegments({ startSeconds, endSeconds, text }), with an optionallanguageCode. Each entry is a single spoken word, so caption timing is pinned at word granularity. Words must be sorted bystartSecondsand non-overlapping. Update any upload requests that previously sentsegments. - Breaking:
GET /v1/files/{fileId}returns a structuredtranscript. Thetranscriptfield is now aTranscriptobject (timedwordsplus optionallanguageCode) rather than a plain string. The previous plain-string value now lives on the newtranscriptTextfield.transcriptisnullfor images or when no transcript has been generated. - Pre-computed transcript on upload is no longer beta. The optional
transcriptfield onPOST /v1/files/uploadis now stable. Provide it for an audio or video upload to skip re-transcription so caption timing matches your transcript exactly. - Voiceover scene ranges are no longer beta. The optional
scenesfield onPOST /v1/workflows/voiceover-to-videois now stable. Ranges must be sorted bystartSecondsand non-overlapping; omit to let the workflow choose visuals automatically. - Assistant message polling endpoint renamed:
GET /v1/assistant/messages/{messageId}is nowGET /v1/assistant-messages/{messageId}, consistent with the other/v1/assistantsroutes. Update any hard-coded polling URLs; the SDKs, CLI, andassistant_message.*webhook subscribers are unaffected. - Nullable
assistantIdon projects:ProjectResponse.assistantIdis now nullable. New API projects get an assistant chat at creation time, soassistantIdis populated; projects created before assistant chats were attached returnnull. Reading a project no longer creates a chat as a side effect. - Reliable
generationanderroron assistant messages: an assistant message’sgeneration(the workflow run a turn kicked off) anderror(onfailed/cancelledturns) are now resolved directly from the message, so polled and webhook payloads report them accurately.