TTS 400: Provide exactly one of transcript_source or transcript

This 400 means the TTS body had both transcript and transcript_source, or neither. Send exactly one, plus a voice, and re-run.

4 min readSume
All posts

The error text is Provide exactly one of transcript_source or transcript. It means your TTS request body carried both fields, or neither. Remove one so exactly one remains, and the request validates.

Why it happens

  • A template sends transcript with an empty string and also a transcript_source.
  • A script sets transcript_source for one path and forgets to delete the default transcript.
  • Neither is set because a variable was undefined.

A body that passes

Use transcript for inline text. The voice goes in voice.id. The price is $0.0475 per 1,000 characters and the cap is 20,000 characters per request.

curl -X POST https://api.sume.com/v1/tts-1.0/generate \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: tts-001" \
  -d '{
    "transcript": "Thanks for calling. Your order has shipped.",
    "voice": {"id": "YOUR_VOICE_ID"}
  }'

Cost of the example

The transcript above is 44 characters, so it is 44 x $0.0475 / 1,000 = $0.00209.

TTS limits (read 2026-10-04)
ItemValue
Price$0.0475 per 1,000 characters
Max per request20,000 characters
Default outputmp3, 44,100 Hz, 128,000 bps
Text formatPlain transcript, no SSML

Check before sending

  • Exactly one of transcript or transcript_source.
  • A voice selector: voice.id, or avatar_id or avatar_handle at the top level.
  • Under 20,000 characters.
  • A fresh Idempotency-Key per distinct job.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume