Voice on Cencori

Every AI platform wraps text-to-speech and speech-to-text. That's table stakes. What's missing is voice through a billable, logged, PII-redacted gateway with BYOK across providers — so switching from OpenAI to Deepgram to a West-African language model is a one-line change, not a rewrite.
That's Cencori Voice, shipping today.
One API, every provider
Pick a model and the gateway routes to the right provider. You never pass a provider name.
// Text-to-speech
const { audio } = await cencori.voice.speak({
input: 'Hello, welcome to Cencori.',
model: 'aura-asteria-en', // Deepgram
});
// Speech-to-text
const { text } = await cencori.voice.transcribe({
audio: fileBytes,
model: 'nova-3', // Deepgram
});
TTS: OpenAI, Deepgram Aura, Cartesia Sonic, ElevenLabs, and Spitch. STT: OpenAI Whisper, Deepgram Nova-3, AssemblyAI, and Spitch — with speaker diarization and SRT/VTT subtitles.
Native African languages
Spitch does what none of the big providers do: native Yoruba, Hausa, Igbo, and Amharic, both directions. If you're building for West-African users — WhatsApp voice notes, IVR, voicemail — this is the piece that was missing.
const { audio } = await cencori.voice.speak({
input: 'Bawo ni, e ku aaro.',
model: 'spitch-tts',
language: 'yo',
});
Ships in every SDK — and as UI
The voice namespace is live in all five SDKs: TypeScript, Python, Go, PHP, and Rust. And because shipping an endpoint without the UI is only half the job, there are drop-in React components too:
import { VoiceRecorder, SpeakButton } from 'cencori/react';
<VoiceRecorder model="nova-3" onTranscript={setText} />
<SpeakButton text={reply} model="aura-asteria-en" />
Ops built in
Because it's the same gateway as chat and vision, every request is billed (per-character for TTS, per-minute for STT), logged with the provider and cost, PII-redacted on the way in, and BYOK-ready per project. Spend caps and cost tracking apply automatically.
What's next
This is the non-realtime foundation. Next is realtime voice — a WebSocket API with sub-500ms latency, interruption handling, and tool calling mid-conversation, sitting in front of OpenAI Realtime and Gemini Live with the same model-agnostic shape.
Get started in the Voice docs.