Eleven v4 seed and voice settings: what each Sume router id accepts
Which of stability, similarity_boost, style, speed and seed work on eleven-v4, v4-turbo, v3, multilingual-v2 and turbo-v2.5 in the Sume TTS Router, with ranges.

On the Sume TTS Router, seed works only on eleven-v4 and eleven-v4-turbo, and the other voice settings depend on the model id: eleven-v3 takes stability only, while eleven-multilingual-v2 and eleven-turbo-v2.5 take stability, similarity_boost, style and speed. Sending a field a model does not accept is the first thing to rule out when a request fails.
The settings sit under voice_settings, next to apply_text_normalization. They are not the same object as the Sonic generation_config, which the Eleven rows refuse.
The field matrix
The matrix comes from the router's per-model specifications in the catalog code. apply_text_normalization accepts auto, on or off, and the defaults when you send nothing are stability 0.5, similarity 0.75 and style 0.
| Model id | stability | similarity_boost | style | speed | seed | text normalization |
|---|---|---|---|---|---|---|
| eleven-v4 | Yes | Yes | No | No | Yes | Yes |
| eleven-v4-turbo | Yes | Yes | No | No | Yes | Yes |
| eleven-v3 | Yes | No | No | No | No | Yes |
| eleven-multilingual-v2 | Yes | Yes | Yes | Yes | No | Yes |
| eleven-turbo-v2.5 | Yes | Yes | Yes | Yes | No | Yes |
Ranges and what they do
Do not rely on a seed alone to reproduce a take; for production lines save the audio you approved instead of regenerating it from a seed. Because billing is per request, rounded up to the cent, regenerating a short line to chase a seed is cheap but not free.
speed: 0.7 to 1.2, only on multilingual-v2 and turbo-v2.5.seed: an integer from 0 to 4294967295, only on v4 and v4-turbo. Reuse the same seed with the same text and settings when you want to compare a settings change against a stable baseline.stability,similarity_boostandstyleare fractions; keep them inside 0 to 1.apply_text_normalization:auto,onoroff, controls whether numbers and abbreviations are spoken out.
Controls that live elsewhere
The top-level speed field is a Sonic control and is refused on Eleven rows, so use voice_settings.speed only on the two models whose table row says Yes. Emotion presets such as neutral, content, excited, sad, angry and scared belong to Sonic 3.x through generation_config, with speed 0.6 to 1.5 and volume 0.5 to 2. They have no equivalent field on an Eleven row, so to change delivery there you change the text, the voice or the model.
If your pipeline needs pronunciation overrides, remember that pronunciation_dict_id is refused on Eleven rows too. Spell the word the way it should sound in the text itself.
A request skeleton
The skeleton below sets a seed on eleven-v4 and stops early if the key is missing. Fill voice.id from GET /v1/tts-router/voices?family=eleven. The API reference covers job states, and the models overview lists the audio endpoints.
import os, json, urllib.request
key = os.environ.get("SUME_API_KEY")
if not key:
raise SystemExit("SUME_API_KEY is not set")
body = {
"model": "eleven-v4",
"transcript": "Welcome back. Here is today's update.",
"voice": {"id": "YOUR_ELEVEN_VOICE_ID"},
"voice_settings": {"stability": 0.5, "similarity_boost": 0.75},
"seed": 1234,
"apply_text_normalization": "auto",
}
req = urllib.request.Request(
"https://api.sume.com/v1/tts-router/generate",
data=json.dumps(body).encode(),
headers={"Authorization": f"Bearer {key}", "Content-Type": "application/json"},
method="POST",
)
with urllib.request.urlopen(req) as resp:
print(json.dumps(json.load(resp), indent=2)[:1200])Sources
Related posts
More in Developers
- EmbeddingGemma 2's 5.5-minute audio limit: cut a long track
EmbeddingGemma 2 fits 5.5 minutes of audio. A 28-minute video needs six 300-second audio detach ranges at $0.01 per job, $0.06 in total.
- EmbeddingGemma 2 takes 58 video frames: sample them with Sume
EmbeddingGemma 2 fits 58 video frames in its 8K window. Sume's video inspect returns 24 stills per call, so three calls with explicit times cover it.
- Erlang: verify a Sume webhook with crypto:mac and crypto:hash_equals
Verify a Sume webhook in Erlang/OTP 26+: crypto:mac over timestamp.raw_body, binary:encode_hex, crypto:hash_equals, rotation entries, and an empty-secret guard.
- Falcon ASGI: verify a Sume webhook with req.bounded_stream.read()
Read the raw Sume webhook body in Falcon ASGI with req.bounded_stream.read(), verify HMAC SHA-256, and set HTTP_204 or raise HTTPUnauthorized.
Written by Sume