Live commerce TTS rejects literal text: use transcript_source
Sume's live-commerce TTS takes only transcript_source (a script revision plus sentence IDs) and rejects literal transcript text, even if correct.

In a live-commerce Format, send transcript_source, not transcript. Sume's TTS 1.0 and TTS Router accept one and only one text input, and the live-commerce Format requires a source reference: it rejects literal text even when the text is correct. Generic chat TTS can still send a literal transcript. The two fields together, or neither, are errors.
From docs/api/tts.md on origin/main b28f3b0, read 2026-10-13.
| Context | Send | Why |
|---|---|---|
| Generic chat TTS | transcript (1 to 20000 characters) | Literal text is allowed |
| Live-commerce Format TTS | transcript_source | Literal text is rejected |
| Both fields | Neither | Error: exactly one is required |
| Unattended run with no accepted source | Nothing; accept a script first | No raw-text fallback |
{
"transcript_source": {
"script_revision_id": "revision_from_source_manifest",
"sentence_ids": ["sentence_from_source_manifest"]
},
"avatar_handle": "speaker",
"language": "ko"
}Where do the IDs come from?
From the thread's accepted revision: GET /v1/tts-1.0/source returns IDs, sentence indexes, character counts, the canonicalization version and a source hash, so the model never has to copy script bytes. The API resolves the IDs before preview, credit reservation and dispatch, and a wrong workspace or thread, a stale revision, or an invalid range fails closed without reserving credit.
What if an old shared thread has no accepted revision?
There is a narrow interactive path: the thread owner, or a recorded user-message author in the same organization, can send an explicit transcript on a continuation with no automation run. A runner from the same organization who did not post on the thread gets tts_text_source_required. That path creates no source revision and no source-bound receipt.
Sources
Related posts
More in Developers
- Video editing API or AI prompt edit: which Sume endpoint to call
Trim, frames, captions and filter are deterministic jobs; Omni edit changes content from a prompt. Pick the cheapest route that does the change you need.
- video_url on /v1/videos fails: edits go to /v1/video-router/generate
Sume's /v1/videos has frame_images and input_references but no edit field. Send video_url to /v1/video-router/generate with gemini-omni-flash-1.1.
- What balance do 100 video ads need? Sume reserves at submit
Sume reserves the credits of every accepted job at submit, so a 100-ad batch needs the whole total in the balance. 402 insufficient_credits otherwise.
- Why a video model is missing from your Sume model list
A documented video id can be absent from the model list: Veo needs Google Cloud, Tencent rows need the Tencent switch. Absent ids 404. Read 2026-10-13.
Written by Sume