At Spyne we took voice-agent infrastructure cost from $0.26 to $0.10 per minute, roughly a 62% reduction. The change came alongside our migration from Vapi to LiveKit and subsequent provider and pipeline tuning.
Those figures describe our deployment. They are not either platform’s list price, and they do not include the full engineering cost of building and operating the system. The useful part of the story is how to make the bill explainable enough to decide what to change.
Define the minute before comparing it
A connected call minute, a minute of generated speech and a minute of worker runtime are different units. An agent that speaks for twenty seconds during a sixty-second call has not necessarily bought sixty seconds of TTS. A transfer can keep more than one billable call leg alive.
For an infrastructure comparison, choose a denominator such as connected call minutes and keep it consistent across both deployments. Allocate billed costs for the same period, including failed attempts and idle capacity where applicable. Separately report cost per successful outcome: a cheaper call that loses the appointment is not an improvement.
Provider contracts decide rounding, minimum charges and which resources keep billing during silence. Check those details before multiplying a headline price by call duration.
Five components, five different meters
| Component | Meter to capture | What a blended rate can hide |
|---|---|---|
| Telephony | Billed duration by call leg, destination and direction; number rental | Transfer legs, rounding, recording and carrier extras |
| Speech-to-text | Billed audio or session duration | Silence billing, minimums and duplicated streams |
| Language model | Input, cached input and output tokens by model and tier | Growing conversation history, tool schemas and retries |
| Text-to-speech | Billed characters, tokens or generated audio, depending on provider | Audio generated but discarded after an interruption |
| Runtime and orchestration | Workers, media transport, platform charges, storage and observability | Idle capacity, minimum commitments and separate cloud services |
Self-hosting a worker does not make its runtime free. Include spare capacity and the surrounding media stack. If you use LiveKit Cloud, check its resource meters and billing as well as inference charges. A lightly used deployment can have a very different compute cost per minute from a busy one.
Reconcile the bill before tuning the agent
The accounting relationship is simple:
infrastructure cost per connected minute =
allocated infrastructure spend / connected call minutes
cost per successful outcome =
allocated spend / successful outcomes
The hard part is connecting usage to calls. Keep a call ID, tenant, use case, engine, model and provider alongside the meters. Preserve both estimated usage and reconciled billed cost; a missing usage event must not quietly count as a free call.
For LLMs, separate uncached input, cached input and output before applying their rates. A growing conversation can increase input usage on each turn even when answers stay short. For speech, distinguish generated audio from played audio, while charging according to what the provider actually bills.
This does not require leaving a managed platform. Vapi exposes component cost estimates and call cost fields. Inspect the data already available before assuming migration is the only way to understand the bill. Owning the pipeline gave us more control over instrumentation and execution; it was not the invention of itemized billing.
What to change, and what to protect
Removing a platform fee creates an obvious saving, but it also creates an operating responsibility. After that decision, tune the components with the largest measured contribution. Their order will vary by workload.
Voice selection. Compare TTS providers on real phone recordings. Some calls use narrowband audio; others preserve more detail. Listen for names, numbers, pronunciation and intelligibility as well as pleasantness. Measure task completion before assuming a cheaper voice is equivalent.
Model and context. Test a smaller model on routine turns. Trim redundant instructions and unused tool definitions. If you summarize long conversations, retain confirmed facts, tool results and unresolved commitments. Prompt caching can reduce repeated-prefix cost where the provider supports it; it does not make all conversation history free.
Generation controls. Output caps bound how much the model can generate, but a cap that truncates a booking confirmation or tool argument is a false economy. Service tiers change the cost and latency trade. These are among the controls I have exposed in the LiveKit Agents SDKs, and they need evaluation with the same task and response-time gates as a model change.
Non-conversation time. Use bounded idle and hold policies, maximum durations and explicit voicemail handling. Keep enough time for callers who need to find a document or read a number. An idle timeout that cuts them off improves the bill by failing the task.
Volume terms. Negotiate against measured usage and include minimum commitments in the comparison. A lower unit price can still produce a higher monthly bill at the volume you actually use.
Put an operating budget next to the saving
The observed difference between our two infrastructure rates is $0.16 per minute. Here is the arithmetic at illustrative volumes; these are not our traffic figures or a forecast of anyone else’s savings.
| Monthly connected minutes | At $0.26/min | At $0.10/min | Difference before additional operating costs |
|---|---|---|---|
| 10,000 | $2,600 | $1,000 | $1,600 |
| 100,000 | $26,000 | $10,000 | $16,000 |
| 1,000,000 | $260,000 | $100,000 | $160,000 |
Subtract incremental engineering, on-call and maintenance costs, and amortise migration work over a realistic period. The break-even relationship is monthly additional operating cost divided by saving per minute, assuming the rates and quality hold at that volume. Avoid double-counting compute already included in the infrastructure rate.
This is why a managed platform can be the better economic choice at low volume, even when its per-minute fee looks larger.
Keep quality in the same report
Compare the same use cases, destinations and call-duration mix before and after a change. Put task completion, transfer success, premature interruptions and p95 response gap next to cost. Otherwise a shorter, less useful conversation can look like an optimization.
Some savings are worth spending back on turn-taking, reliable tool execution or a clearer voice. Ten cents was our result. Knowing which costs support a successful conversation is the part another team can reuse.