Skip to main content
What exists today is the honest, working surface documented throughout these docs — both directions:
  • Text-to-speechtts.create, tts.stream, voices, models, health, and the OpenAI-compatible /v1/audio/speech.
  • Speech-to-textstt.transcribe (bytes or URL), stt.models, stt.estimateCredits, and the OpenAI-compatible /v1/audio/transcriptions.
  • Plus CORS for browser callers, a typed SDK, and a CLI (say, transcribe, voices, models).
The items below are planned, not yet available. Nothing here is callable today — this page exists so you can plan around it. Track progress on GitHub.

More output formats

Native MP3, Opus, and 8 kHz µ-law (telephony) alongside WAV/PCM, via the response_format parameter — smaller payloads and no client-side transcoding. Until then, convert with ffmpeg. Today synthesis returns WAV (24 kHz, PCM16); the OpenAI-compatible endpoint also supports raw pcm. Transcription already accepts any container ffmpeg reads on the way in.

Punctuation & truecasing

Transcripts today are lowercase and unpunctuated — not stripped, but a property of the model’s 70-character output vocabulary, which contains neither capitals nor punctuation. Restoring both is a separate modelling step. Today: plan for lowercase, unpunctuated text, or post-process it yourself.

Character timestamps and diarization

Word-level timestamps for speech-to-text shipped — see word-level timestamps. Still ahead: sub-word (character) alignment, alignment on the text-to-speech side for highlight-as-it-speaks UIs, and speaker diarization so multi-party recordings can be attributed.

Python SDK

A geko Python package mirroring this SDK’s surface (geko.tts.create(...), geko.stt.transcribe(...)), for Python-first backends and agents. Today the official SDK is TypeScript/JavaScript (@gekoai/sdk); Python callers can use the OpenAI-compatible endpoints or raw HTTP.

Chunked-causal streaming

Live streaming transcription has shipped. What is still ahead is making it cheaper: today a partial transcript is kept current by re-decoding the uncommitted audio on every update, which is why streaming is priced above file transcription. A cache-aware, chunked-causal encoder would decode each frame once instead, bringing streaming cost close to batch. That needs a fine-tune with chunked attention masking and a fresh accuracy benchmark, so it is a project rather than a patch.

Speaker diarization

Labelling who spoke each segment, for multi-party calls and meetings.

More languages & voices

Tokay speaks Kazakh; Seta hears Kazakh and Russian. New languages and voices appear on the same endpoints — GET /v1/models and GET /v1/voices are the source of truth, so code that reads them adapts automatically.
Want one of these sooner, or have a use case that needs it? Open an issue on GitHub — it genuinely helps prioritize.