SSML in text to speech: Sume takes a plain transcript, no ssml field
Does Sume's text to speech accept SSML? The tts_create body has a plain transcript and rejects unknown keys. What to use for speed, volume, emotion and pauses.

Sume's hosted tts_create tool has no SSML field. Its body takes a plain transcript of up to 20,000 characters, and a key outside the documented set fails with unsupported_payload_keys instead of being passed through. Speed, volume and emotion are set with a generation_config object, and word and sentence timings come from timestamps and segmentation. Fields come from the tool's payload schema, summarized in MCP tools and gates.
What replaces the SSML tags
Most people reach for SSML for three things: pace, loudness and pauses. Sume covers the first two with numbers and leaves pauses to the text.
| You wanted | Sume field | Range or form |
|---|---|---|
| prosody rate | generation_config.speed | 0.6 to 1.5 |
| prosody volume | generation_config.volume | 0.5 to 2 |
| Emotion | generation_config.emotion | Free text, 1 to 64 characters |
| Sentence boundaries | segmentation.mode | sentence, with boundary_lead_ms 0 to 500 |
| Word timing | timestamps.words | true returns words[] with start and end seconds |
| Break or pause | Punctuation in the transcript | No pause tag in the documented body |
Sending a request that is accepted
Keep the transcript to the words you want spoken, and do not send markup the schema does not list. If you migrated a script from another engine, strip its markup first and re-create the pace with speed.
The deprecated speed string (slow, normal, fast) still exists, but the schema says to prefer generation_config.speed. Once the job completes, the job result echoes the settings it used, so you can read them back, as the Jobs and results guide describes.
Sources
Related posts
More in Developers
- Sume API rate limits by plan: requests per minute for writes and reads
Sume gives every API key a per-minute budget set by plan: 120 writes on Free up to 1200 on Scale, with reads at forty times the write number. Table and headers.
- Client timeouts for Sume jobs: SDK defaults and the 30-second cap
Sume's sync wait caps at 30 seconds, waitForRun defaults to 10 minutes, subscribeFormatRun and waitForJob to 20. Pick a deadline per job type, keep the job id.
- Choosing a Sume Idempotency-Key: business key plus a payload version
A good Idempotency-Key is stable across retries and changes with the request. Build it from your order id and a payload hash, or hit 409 idempotency_conflict.
- Retry Sume 429s in TypeScript: a fetch wrapper that obeys retry-after
A small fetch wrapper for the Sume API: retry 429 only when the request is a GET or carries an Idempotency-Key, wait retry-after, and never loop on queue_full.
Written by Sume