Skip to main content
The GPU scales to zero when idle, so the first call after a quiet period pays a cold start (tens of seconds); the next calls are fast. Keep the SDK’s default 120 s timeout, and for predictable traffic send a lightweight geko.health() to pre-warm. See Latency & quality.
The Authorization: Bearer sk-tokay-… header is missing or the key is wrong/revoked. Create or check keys in the console. With the SDK, pass apiKey or set GEKO_API_KEY.
Your organization’s balance is depleted. Top up in the console. The SDK does not retry 429 — a retry can’t create credits. See Billing.
A transient hiccup validating the key. The SDK retries 503 automatically with backoff; if it persists, retry shortly or check the console.
CORS is enabled, so cross-origin calls work — but never ship your API key to the client (it’s public the moment it’s in browser code). Proxy through your own server. See Use it in your app.
The API returns WAV (and raw pcm via the OpenAI endpoint) today. Convert locally with ffmpeg — see Playing & saving audio. Native MP3/Opus is on the roadmap.
Fetch the live catalog with geko.tts.voices() (or GET /v1/voices) — each entry has style and best_for to guide the choice. Aigerim is the default.
Use geko.tts.stream() (SDK 0.3.0+), which yields one WAV chunk per sentence so playback can start sooner. It needs the streaming endpoint POST /v1/tts/stream.
Not yet — use the OpenAI-compatible endpoint with the openai Python package, or call the HTTP API directly. A native Python SDK is on the roadmap.
By input characters, per organization — $0.04 / 1,000 chars. See Billing & credits.
Still stuck? Open an issue on GitHub or email amirlan@geko.sh.

Next steps

Errors & retries

Every status code, when it retries, and how to handle it.

Latency & quality

Cold starts, keep-warm, and the nfe dial.

Billing & credits

How usage is metered and what 429 means.

Authentication

Create keys and fix a 401.