Skip to main content
The speed request parameter adjusts playback rate using pitch-preserving time-stretching (WSOLA), so the voice stays natural at any rate. It applies uniformly to all audio in the request — except inside <prosody rate> spans, which override it. Values outside 0.81.2 are rejected (400 on REST or a validation error frame on WebSocket). Choose a value inside the range.
Dashboard: The playground in the KugelAudio dashboard includes a Slow / Normal / Fast speed toggle next to the model selector. Changes are reflected live in the SDK code snippet shown below the generator.

Per-span speed with <prosody rate>

To change speed for part of a request, wrap that text in an SSML-style <prosody rate="..."> tag:
The text inside the span is synthesized at the span’s rate; everything outside keeps the request’s global speed. Rules:
  • Inside a span, rate overrides the global speed; outside, speed applies. Numeric span rates outside 0.81.2 are clamped to the nearest endpoint; unlike span rates, an out-of-range global speed is rejected.
  • Spans can cover anything from a few words to multiple sentences, and <break> tags keep working inside them.
  • Spans cannot be nested, and rate is the only supported attribute (pitch / volume are rejected).
  • Malformed tags fail loudly — an unclosed <prosody>, an unknown rate, or a stray </prosody> returns a 400 (REST) or an error frame (WebSocket) instead of being silently ignored.
  • On the streaming endpoints, a span must open and close within a single message.
For phone numbers and codes, combining a slow span with digit spacing (<prosody rate="slow">0 30 12 34 56 78</prosody>) or <spell group="2"> reads most naturally.