The short answer in one table
The table sets each provider's TTS first audio beside its reply latency, error-ended calls and estimated cost, ordered by call volume. Split by product, Deepgram Aura's first audio took 232 ms at the median and 581 ms at p90 (267 turns, 52 calls, 24 assistants), and Flux's 223 ms and 372 ms (153 turns from 17 of its 22 calls, 4 assistants).
ElevenLabs and Soniox carried too few phone calls to report, 11 and 10. Piper's figures come from one deployment of 2 assistants, Cartesia's from 3 assistants over two days and Flux's timings from 4 assistants, so none of them describes other deployments.
| TTS provider | Phone calls (assistants) | TTS first audio, median and p90 | Reply latency, median and p90 | Ended on a pipeline error | Est. cost per connected minute, TTS leg and all legs |
|---|---|---|---|---|---|
| Piper, self-hosted, one WAV per chunk | 271 (2) | 133 ms, 250 ms (511 turns, 111 calls) | 1,080 ms, 1,906 ms (614 turns, 121 calls) | 0 of 271 | $0 TTS (no compute counted), $0.0307 all legs (271 calls) |
| Deepgram Aura and Flux, streaming | 85 (30) | 228 ms, 506 ms (420 turns, 69 calls) | 1,042 ms, 1,756 ms (478 turns, 70 calls) | 7 of 85 (3 on the TTS leg) | $0.0101 TTS, $0.0277 all legs (66 calls) |
| Cartesia, streaming | 38 (3) | 87 ms, 386 ms (156 turns, 34 calls) | 995 ms, 1,779 ms (193 turns, 34 calls) | 3 of 38 (all on the TTS leg) | $0.0047 TTS, $0.0197 all legs (24 calls) |
What the two timings measure
TTS first audio runs from the moment APIFleet's cascading runtime hands the first speakable chunk of a reply to the TTS until the first audio chunk comes back to APIFleet's server. It is measured on turns where the language model answered with text; by default the runtime releases that chunk at the first sentence end once 12 or more characters have arrived, or at a clause or word break once 70 characters are waiting.
Reply latency runs from Deepgram Nova-3's final transcript of the caller's turn to that same first audio chunk, on turns where no tool call completed in between. The clock starts only after Deepgram's endpointing has waited for silence (200 ms in APIFleet's default settings, or a 1,000 ms backstop on lines that never go quiet) and stops at the server, before audio is paced to Telnyx in 20 ms frames, so a caller hears each reply later than these figures. The 12-character and 200 ms defaults date from 15 August 2026; the code defaults before then were 24 characters and 300 ms, which may apply to up to 27 of Deepgram's 85 calls (87 of its 478 timed replies), made on 14 and 15 August.
Some timed replies opened with a fixed progress phrase that the runtime speaks while a tool runs: 17% of Piper's 614, 11% of Deepgram's 478 and 19% of Cartesia's 193. Without those turns, the reply medians were 1,042 ms (511 turns, 111 calls), 1,007 ms (425 turns, 69 calls) and 880 ms (156 turns, 34 calls).
All measured figures here come from phone calls carried as Telnyx media streams of 8 kHz μ-law audio and timed on one server clock; browser test calls take a different audio path and are left out.
Where the reply time went, stage by stage
On turns that opened with text, waiting for the language model's first token took a median of 814 ms on the Piper calls (511 turns, 111 calls), 626 ms on the Deepgram calls (420 turns, 69 calls) and 631 ms on the Cartesia calls (156 turns, 34 calls). On the same turns, turning that first token into a speakable chunk took 54, 104 and 120 ms, and the TTS stage 133, 228 and 87 ms.
Piper's higher reply median shows up in that language model stage, not in its TTS stage: its calls ran gpt-5.4-mini with their own prompt, while most Deepgram and Cartesia calls ran gpt-4.1-mini or gpt-4o-mini, though 21 of Deepgram's 85 calls also ran gpt-5.4-mini. Stage medians are computed separately, so they do not add up to the reply median.
If your reply time is over target, time the language model and the endpointing before you change TTS vendor; across these three providers, no median TTS stage was above Deepgram's 228 ms (420 turns, 69 calls).
Is self-hosted Piper fast enough on a phone line?
In the one deployment we have, Piper's first audio took 133 ms at the median and 250 ms at p90 (511 turns, 111 calls), and none of its 271 calls ended on a pipeline error. It did that without streaming: APIFleet's adapter posts each speakable chunk to Piper's HTTP server and receives a complete WAV file, so the time includes synthesizing the whole first chunk. Those first chunks were short, a median of 25 characters against 42 on the Deepgram calls and 45 on the Cartesia calls (511, 420 and 156 turns in 111, 69 and 34 calls), and their length comes from the model's text and the chunking settings, not from the TTS.
The deployment is narrow. One tenant's 2 assistants made all 271 calls, one of them 97%, almost all with gpt-5.4-mini and speaker voices from Piper's en_GB-vctk-medium model; every call was inbound and 44% of them lasted under 10 seconds.
APIFleet's deployment guide runs Piper as a private container on the same network as the voice server, so in that setup a request never crosses the public internet, unlike a hosted TTS request; the call data does not record which network path these calls took. These calls do not show how one Piper container behaves when many calls share its CPU, so load-test the concurrency you expect.
The $0 TTS cost for Piper counts no compute: you pay for the server and the work of running it instead. The maintained Piper code is the GPL-3.0 OHF-Voice/piper1-gpl repository, after rhasspy/piper was archived in October 2025, and our Piper page covers this deployment in full.
Errors and silent calls by provider
None of Piper's 271 phone calls ended on a pipeline error (95% upper bound 1.1%), and 1 ended when the carrier connection dropped. Calls using Deepgram's voices ended on a pipeline error in 7 of 85 cases (8.2%; 95% interval 3.5% to 14.1%, resampling calls): 3 on the TTS leg, 2 on the STT leg and 2 on a failed assistant turn.
Calls using Cartesia ended on a TTS error in 3 of 38 cases (7.9%; 95% interval 0% to 18.4%, resampling calls). Calls of 10 seconds or more with no assistant audio at all: 0 of 153 with Piper, 5 of 84 with Deepgram and 4 of 38 with Cartesia.
Read these as APIFleet's error rates in those weeks, not as vendor reliability. The Deepgram and Cartesia calls fell in mid-August 2026, while APIFleet's TTS adapters and error handling were still changing; a fix for silent TTS turns arrived on 18 August, the day of 36 of the 38 Cartesia calls.
The data we analysed keeps which leg failed but not the error text, so these counts cannot separate vendor outages from configuration or adapter faults. Piper's calls began on 25 August, after that fix.
What the voice cost per connected minute
Estimated from APIFleet's configured rates and pooled over all their minutes, the TTS leg cost $0.0101 per connected minute with Deepgram (66 calls) and $0.0047 with Cartesia (24 calls). Per call of 10 seconds or more, the medians were closer, $0.0117 (65 calls) and $0.0105 (24 calls), and Piper's TTS line is $0 across 271 calls because APIFleet's rate card prices self-hosted Piper at $0.
With the language model, Deepgram STT and APIFleet's configured flat Telnyx rate of $0.0055 per minute added, the pooled totals were $0.0307 per connected minute for Piper (271 calls), $0.0277 for Deepgram (66 calls) and $0.0197 for Cartesia (24 calls). The language model leg varied most ($0.0176, $0.0055 and $0.0018), while the TTS leg ran from $0 to $0.0101.
These are estimates, not invoices: calls with a later cost backfill are excluded (19 Deepgram, 14 Cartesia), and APIFleet priced every Deepgram voice at one configured per-character rate, although 57 of the 85 Deepgram calls used the Aura-1 voice aura-stella-en. Deepgram's pricing page lists pay-as-you-go TTS at $0.015 per 1,000 characters for Aura-1, $0.030 for Aura-2 and $0.045 for Flux TTS, and Cartesia sells credits at one per character, roughly 750 to 800 per minute of audio.
None of these figures includes APIFleet's platform fee of $0.03 per connected AI minute, billed per second; AI providers and the carrier are billed on top of it. For comparison, Vapi's pricing page lists a $0.05 per minute hosting fee on its pay-as-you-go option, with models passed through at cost.
Why this is not a benchmark
Nothing here was randomised or matched: each provider's calls came from a different mix of assistants, prompts, language models, callers, days and code revisions, each from a single tenant. A difference between rows can come from any of those rather than from the voice.
Deepgram's 85 calls came from 30 assistants between 14 and 24 August, 56 of them on 18 August. Cartesia's 38 came from 3 assistants on 17 and 18 August, 36 of them on the 18th, and Piper's 271 from 2 assistants between 25 August and 24 September.
Dropping each group's busiest day moved Deepgram's reply median from 1,042 ms to 926 ms (88 turns from 22 of the 29 calls left, 27 of those 29 made on 14 and 15 August) and Piper's from 1,080 ms to 1,081 ms (555 turns from 108 of the 241 calls left). Cartesia has too few calls outside 18 August to repeat the check.
The call mix differed as well: all 271 Piper calls were inbound, with a median length of 12.4 s, while 42% of the 85 Deepgram calls and 47% of the 38 Cartesia calls were outbound, with medians of 70.8 s and 112.4 s.
This data says nothing about English and Spanish code-mixing, which the thread also asked about, or about how natural each voice sounds.
How to time TTS on your own phone line
Several replies in the thread suggested timing first audio at the caller rather than at the TTS socket, and the figures here stop at APIFleet's server, short of that point. A stage split on your own calls shows which leg to work on first.
- Log four server timestamps per reply: the final transcript, the language model request, the first text handed to the TTS and the first audio chunk back.
- Report the median and p90 per provider over at least 20 calls, keep tool turns apart from plain replies, and count calls that end on a TTS error or with no assistant audio.
- Compare language models and prompts before blaming the voice; in our calls the model's first token was the largest stage at the median for every provider.
- Record a few test calls at the handset and compare the audible gap with your server timing to learn the carrier's share.
- For self-hosted Piper, repeat the timing at the number of simultaneous calls you expect, because calls on one container share its CPU.
- Price TTS per character from the vendor's current pricing page and multiply by how much your assistant actually says per minute.
Continue with a practical next step
- Compare every TTS model and voice timed on phone calls
- Read the full Piper deployment write-up
- See why tool turns take longer than plain replies
- Compare Gemini Live and OpenAI Realtime on phone calls
- Read how the Piper integration is provisioned
- Use Deepgram for transcription and voices
- Add a Cartesia voice to an assistant
- Estimate platform, provider and carrier costs
- See how APIFleet's platform fee works
Frequently asked questions
Which TTS had the fastest time to first audio on APIFleet phone calls?
At the median, Cartesia: 87 ms (156 turns, 34 calls), against 133 ms for Piper (511 turns, 111 calls) and 228 ms for Deepgram Aura and Flux (420 turns, 69 calls). At p90, Piper was lowest at 250 ms. These are observational phone figures from 14 August to 24 September 2026, not a benchmark.
Is self-hosted Piper fast enough for a phone agent?
In one APIFleet deployment of 2 assistants (271 phone calls, 25 August to 24 September 2026), Piper's first audio took 133 ms at the median and 250 ms at p90 at the server (511 turns, 111 calls), and no call ended on a pipeline error. This data does not show how Piper behaves when many calls share one container, and its $0 TTS cost excludes the server it runs on.
How much of a phone agent's reply time is the TTS?
A small part, on APIFleet phone calls from 14 August to 24 September 2026: median TTS first audio was 87 to 228 ms (1,087 turns in 214 calls across the three providers), while the language model's first token took 626 to 814 ms on the same turns and the whole reply 995 to 1,080 ms from the final transcript (1,285 turns in 225 calls). Endpointing silence and the carrier add time that these figures exclude.
Why are ElevenLabs and Soniox missing?
They carried only 11 and 10 phone calls in this window, below the 20-call minimum we use before publishing any rate or percentile.
Do the cost figures include APIFleet's platform fee?
No. They cover the model, STT, TTS and carrier legs, estimated from configured rates. APIFleet's platform fee is $0.03 per connected AI minute, billed per second, and AI providers and the carrier are billed on top.
Sources and evidence
- Deepgram pricing: Aura-1, Aura-2 and Flux TTS per 1,000 characters · observed 2026-10-29
- Deepgram documentation: TTS models and Aura voice names · observed 2026-10-29
- Deepgram documentation: Flux TTS voices · observed 2026-10-29
- Cartesia pricing: credits per character · observed 2026-10-29
- Piper repository (OHF-Voice/piper1-gpl) · observed 2026-10-29
- Piper HTTP API: POST /synthesize returns WAV audio · observed 2026-10-29
- rhasspy/piper: archived, development moved to OHF-Voice · observed 2026-10-29
- Vapi pricing: pay-as-you-go hosting fee · observed 2026-10-29