Switch from Vapi to PyAI Omni
One engine instead of four vendors stitched together.
Omni collapses the transcriber, the reasoning model, retrieval, and the voice into a single WebSocket - audio in, audio out - at human conversational pace (~390 ms median voice-to-voice, in-region) with barge-in. Speech + brain is one $0.05/min rate; managed telephony is a separate $0.01/min.
Why teams move from Vapi
One speech + brain rate
STT, reasoning, retrieval, and TTS run end to end in PyAI at $0.05/min, with managed telephony separately listed at $0.01/min.
Stateless session labels
session_label is an optional opaque tag authorized by your org; PyAI echoes it to your own knowledge endpoint.
Compliance on every call
Add Trace to score 100% of calls (TCPA/HIPAA/PII/brand-voice) with citations, redaction, and an audit hash.
Before and after
import Vapi from "@vapi-ai/web";
const vapi = new Vapi(process.env.VAPI_PUBLIC_KEY);
vapi.start({
transcriber: { provider: "deepgram", model: "nova-3" },
model: { provider: "openai", model: "gpt-4o" },
voice: { provider: "11labs", voiceId: "burt" },
});// One socket: PyAI does STT + reasoning + retrieval + TTS.
const ws = new WebSocket(
"wss://api.pyai.com/v1/omni?session_label=front_desk&format=pcm16&rate=24000",
["pyai.v1", "pyai-key." + apiKey],
);
ws.onmessage = (e) => playAudioFrame(e.data); // agent audio down
// stream mic PCM16 @ 24kHz upMigration checklist
Swap the connection
Change the base URL or WebSocket URL, pass a PyAI key, and keep the old client where the API shape is compatible.
Map models, voices, and formats
Use the table below to replace model ids, voice ids, response formats, sample rates, and auth headers without rewriting the product flow.
Replay customer traffic
Run real prompts, recordings, and phone-call samples through both systems. Compare latency, quality, completion rate, and all-in cost.
Launch with guardrails
Start on free credits or test keys, add usage alerts, then enable Trace, Recap, or the Agents feature when calls need production review.
If the system you are leaving already uses OpenAI-compatible transcription, speech, or realtime APIs, start with the smallest compatible swap: base URL, key, model, and voice. The real test is whether PyAI improves cost, latency, and caller outcomes on your own traffic.
What maps to what
| Vapi | PyAI |
|---|---|
transcriber + model + voice providers | One Omni engine (STT+LLM+TTS) |
Assistant / config object | session_label (optional) + your kb_endpoint + tools |
Bundled platform + passthrough pricing | $0.05/min speech + brain + optional $0.01/min managed telephony |
Provider SDK | wss://api.pyai.com/v1/omni |
Per-vendor API keys | One PyAI key (subprotocols pyai.v1, pyai-key.<key>) |
Good to know
- Use rate=16000 on the connect URL for telephony; format and rate are load-bearing.
- Use the canonical /v1/omni endpoint and its documented native kind-byte framing.
- Ground the agent by pointing PyAI at your own knowledge endpoint; bind webhook tools for real actions.
FAQ
Do I have to manage agents in a dashboard?
No. Send the whole agent in the configure frame. session_label is only an optional opaque tag echoed to your own knowledge endpoint.
Is the realtime wire OpenAI-compatible?
No. Use native /v1/omni and adapt audio and control events to the documented kind-byte framing. REST transcription and speech remain OpenAI-compatible.
How is it billed?
$0.05/min for speech + brain, billed per second. Managed telephony is separate at $0.01/min.
One model. One hop. $0.05/min.
Start free with $50 in free credits - ship a grounded voice agent on one socket.