The media server runs on a box you rent, in a region you chose, with keys you hold.Read more

PlatformGateway

Gateway

One key for speech, language, vision and storage — routed and governed

Book a demo
image slot

What 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.

image slot

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

Put your calls on infrastructure you own.

Get in touch