PlatformGateway
Gateway
One key for speech, language, vision and storage — routed and governed
Book a demoWhat it is
Every stage of a call is a setting, not a rewrite
The ears, the brain, the voice, the face and the store are each resolved from configuration when the agent starts. Changing a vendor is an environment variable and a restart — not a branch, not a migration, and not a call to us.
Why one gateway
A vendor that fails takes the whole call with it, and it fails without warning
On 19 September 2026 a text-to-speech provider began answering 402 mid-session. The session log said the agent was closing due to an unrecoverable error, which named the symptom; the cause was a spent balance at one company. The fallback now shares a key with the speech recognition, because a fallback needing a credential nobody has is not a fallback.
- Configured
- a provider per stage, per deployment
- Bring your own
- keys per organisation, encrypted
- Recorded
- which model answered, on which call
Whose keys
Your account at each vendor, not a resold seat at ours
An organisation supplies its own credentials and they are encrypted before they are written, decrypted only to make that organisation’s own calls. There is no margin on a token here, which is the same argument the media plane makes one layer down.
One key, every stage
The models are yours. The routing is one place.
Every stage of a call is a setting, not a rewrite: the ears, the brain, the voice, the face, and the store it all lands in. Swap a vendor with an environment variable, bring your own key per organisation, and keep one record of which model answered on which call.
Built the day a text-to-speech vendor answered 402 mid-session and every call died at the moment the agent tried to speak. A provider is a setting now, so a spent balance is an environment variable rather than an outage.
Speech in
What the caller said, as they are saying it
- Deepgramthe default ears
- Any OpenAI-compatible endpointvia base_url
- AssemblyAIshape in place, route not wiredplanned
Brain
Your model, your key, your weights if you want them
- GoogleGemini and Gemma, on your own key
- Togethermetered, open weights
- DeepInfrathe cheapest metered route
- Ollamalocal — nothing leaves the machine
- Any OpenAI-compatible endpointGroq, vLLM, your own
Speech out
The voice, and a fallback that is already funded
- Cartesiadefault — 0.16s to first byte, measured
- Deepgramthe fallback: same key as the ears
- Google Cloudneeds a service account, not an API key
- ElevenLabsshape in place, route not wiredplanned
Turn-taking
Knowing when they stopped, before answering over them
- Silerovoice activity, on the box
- LiveKit turn detectorend-of-turn, multilingual
Faces
A likeness on the call, with consent recorded first
- HeyGenenrolled avatars
- Tavusenrolled avatars
- Simlienrolled avatars
- Anamenrolled avatars
Vision
Understanding what is on camera, and making what is not
- Geminivideo understanding, live on the call
- Runwaygeneration — key accepted, route not wiredplanned
Store
Where the record of the call comes to rest
- Postgreshistory, transcripts, consent
- Supabasethe managed shape of the same thing
- S3-compatiblerecordings — shape in placeplanned