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
- Stippled AI graphics turn to gray mush when resized: a downscale test
A dotted AI graphic can lose most of its contrast when downscaled. A Pillow test of nearest, bilinear and Lanczos on a stipple, and what to request instead.
- Streaming transcripts: burn only final text into clip captions
MAI-Transcribe-2-Streaming returns partials in about 100 ms, then settled text. Burned-in captions need the final text. Filter it and pass it to Sume as cues.
- Strip Markdown, HTML and URLs before text to speech: Python and cost
Sume TTS bills every character you send, spaces included. Strip Markdown, HTML tags and link URLs in Python first, then see the characters and cents saved.
- Stripe branding icon: JPG or PNG under 512 KB, 128 px up
Stripe wants a JPG or PNG icon under 512kb and at least 128 x 128 px. Make a 1:1 mark on Sume, shrink it in Pillow, and know where the icon shows up.
Written by Sume