API keys
Every billable endpoint — synthesis and transcription alike — is authenticated with a bearer token:sk-tokay-… reaches text-to-speech and speech-to-text, and both draw down one credit balance. There is no second key to provision and nothing to switch between.
Create and manage keys in the Geko console. A key is shown once at creation — store it then; the server only keeps a hash. (Keys look like sk-tokay- followed by 48 hex characters.)
The catalog endpoints are open so docs, playgrounds, and voice pickers can render without one.
Text-to-speech and speech-to-text are separately scaled GPU services, so they answer on two hosts — but on the same credentials. The SDK hides the split entirely; if you’re calling raw HTTP, see the API reference for which base URL serves which endpoint.
With the SDK
Pass the key explicitly, or let the SDK read it from the environment (GEKO_API_KEY, falling back to TOKAY_API_KEY). One client reaches both directions:
Keep keys server-side
- Call Geko from your backend (API route, server, worker, function).
- Expose your own thin endpoint to your frontend; keep the Geko key on the server.
- Don’t put the key in client-side JS, a public repo, or a mobile bundle.
Quotas & billing
Keys are metered per organization. If you run out of credits, both products return HTTP 429 with adetail explaining you’re out — it’s one balance, so synthesis and transcription stop together. Top up in the console. The SDK surfaces this as a GekoError (status === 429) and does not retry it (a retry can’t create credits). See Errors & retries.
Rotating a key
Revoke a key in the console and issue a new one. Revocation takes effect within a short caching window (the API caches key lookups for about 30 seconds).Next steps
Quickstart
Make your first authenticated request in minutes.
TypeScript SDK
The typed client that reads your key from the environment.
Errors & retries
Handle 401, 429, and transient failures cleanly.
Billing & credits
How usage is metered and what running out looks like.