Pricing
As a rough feel: $1 ≈ 25,000 characters ≈ ~30 minutes of synthesized Kazakh (it runs ~14 characters per second of audio), or ~2.8 hours of file transcription, or ~1.2 hours of live streaming.
Why streaming costs more
Live streaming is billed at 2.4× the file rate because it costs that much more to serve, not as a surcharge for the feature. Keeping a partial transcript current means re-decoding the audio that hasn’t been committed yet on every update, so a second of speech passes through the model roughly six times before it is finalised. If you have a file, usetranscribe() rather than streaming. It is more accurate on long audio — the model sees whole utterances instead of a growing tail — and it costs a third as much. Streaming exists for the case where you cannot wait for the speaker to finish: a voice agent that has to reply, or live captions.
Credits are denominated in characters, which is why a transcription’s credits_charged is a character-equivalent rather than a count of anything in the audio.
Only successful requests are billed — synthesis on the input character count (X-Tokay-Chars), transcription on audio duration rounded up (X-Seta-Audio-Seconds and X-Seta-Credits). The catalog endpoints — /v1/models, /v1/voices, /health — are open and free on both hosts.
Running out
When your balance hits zero, both products return HTTP 429 with adetail telling you you’re out of credits — it is one balance, so synthesis and transcription stop together. Top up in the console. The SDK surfaces this as a GekoError with status === 429 and does not retry it (see Errors & retries) — a retry can’t create credits.
Managing credits
- Balance & history: view your current balance and per-request usage in the console.
- Top up: add credits in the console’s billing section.
- Estimate before you send: both directions can be priced without a request.
tts.stream and both OpenAI-compatible endpoints bill identically to their native counterparts — delivery and request shape change, price doesn’t. The one exception is live speech-to-text (stt.stream), which is a different rate because it is genuinely more expensive to serve. Pricing is subject to change; the console always shows the current rate.Next steps
Limits & constraints
Request limits, rate limits, and cold starts.
Errors & retries
How the SDK surfaces a 429 out-of-credits response.
FAQ & troubleshooting
Common questions about usage and metering.