200 and plausible output while doing something other than what you asked. This page starts from what you observe. For the exhaustive list of statuses and messages, see the error reference.
No audio at all
The file exists but will not play
Check what is actually in it before anything else:RIFF: the file has a WAV header. If it still won’t play, check its size: a file of a few hundred bytes means the stream ended early.{: you received JSON instead of audio. Coda and Mist v3 return JSON only for errors, so check the status code. The legacy Mist models can also return audio inside a JSON envelope.- Unreadable binary without
RIFF: on Coda and Mist v3, a missing or wildcardAcceptreturns raw 16-bit PCM (audio/pcm), which players won’t open. SetAccept: audio/wav. - Readable English: a client that didn’t check the status wrote an error message to the file. An
Acceptnaming an unsupported type, for example, returns406with a plain-text list of supported types.
The file is zero bytes
The request never completed. Confirm the URL ishttps://users.rime.ai/v1/rime-tts and reachable, and that your client is not silently following a redirect or failing TLS.
An unexpected 401
Four different messages produce a 401, and they mean different things. invalid subscription is a billing state, not a bad key, so regenerating the credential will not help. empty apikey almost always means a shell variable did not expand. See 401 in the error reference.
Audio arrives but is wrong
The voice is not the one you asked for
Most likely thespeaker, modelId, and lang combination is not one the catalog serves, and it was not rejected. Verify against the Coda or Mist v3 catalog. Remember that every Coda voice serves exactly one language, so the voice determines lang.
Second possibility: modelId contains a typo. An unrecognized value is served by Mist v3 without an error, so codaa returns working audio from the wrong model.
Speed changes stop taking effect past a point
timeScaleFactor is clamped to 0.4 to 2.5 without notice. Also check the direction: timeScaleFactor below 1.0 is faster, while speedAlpha above 1.0 is faster. See Speed.
Pronunciation overrides do nothing
phonemizeBetweenBrackets works on English Mist v3 only. On Coda and non-English Mist v3 it is accepted and ignored. See the model reference.
Streaming and WebSocket problems
Timestamps never arrive
They are emitted only for English and Spanish, or whenlang is omitted. In other Coda languages the stream sends chunk and done with no timestamps event and no error, so never block playback waiting for one.
The connection closes mid-utterance
A server-side failure closes with1011 and puts the message in the close reason, often prefixed with an HTTP-equivalent status as in 400: text is too long. Log the whole reason string. Read the prefix when diagnosing, but do not branch on it.
The upgrade fails before a socket opens
Connection-time failures arrive as an HTTP status on the upgrade, not as a close code. A429 there means the account already has as many connections open as Rime allows. Close idle connections and reuse open ones rather than opening one per utterance.
Audio is choppy or late under load
Check you are calling the nearest regional endpoint before investigating anything else, then see Latency.Retrying safely
Retry only what can succeed on a second attempt, and know what a retry costs.
Rime does not send a
Retry-After header, so choose your own backoff. Exponential with jitter, capped, is the usual choice.
Failures that arrive wrapped
Most developers meet the Rime API through an integration rather than directly, and see a framework exception instead of a status code. Map it back before diagnosing.
The general method is the same in every row: reduce to one raw HTTP request with the identical
speaker, modelId, lang, and Accept, and read the plain-text body. If the raw request succeeds, the problem is in the integration or its configuration rather than in the API.
Still stuck
Check the Rime status page first. An incident in progress explains failures that no change on your side will fix. Contact support@rime.ai with the evidence listed at the top of this page. Because no request ID exists, the reproduction and the exact timestamp are what make a report actionable.Related
- Error reference: every status and message, per transport.
- Voices: verify a voice, model, and language combination.

