Request a callbackBook a call
← All posts

LiveKit SIP Trunking: Twilio vs Telnyx (Verified Rate Cards and the Stacked Cost of One Phone Minute)

TL;DR
  • On inbound local, Twilio and Telnyx are effectively tied: $0.0034 against $0.0032 a minute on their published Elastic SIP rate cards. The real gap is outbound, where Twilio is $0.0100 against Telnyx's $0.0050.
  • Bringing your own trunk costs LiveKit's third-party SIP fee of $0.004/min on Ship or $0.003/min on Scale, on top of the carrier. Omit that and your comparison is wrong by more than the carrier difference.
  • A Telnyx inbound channel at $12/month pays for itself at 3,750 minutes, about 8.6% utilisation, the calculation nobody in this category publishes.
Signalling solid, media dashed
How a phone call reaches a LiveKit agentPSTNSIP INVITEmatchcreate / joinjob dispatchRTP media
CallerPSTN handset
Carrier trunkTelnyx or Twilio
LiveKit SIPinbound trunk
LiveKit roomSFU
Dispatch ruletrunk → room name
Agent workeryour process
Four things you configure, in order: the number at the carrier, the trunk at the carrier, the inbound trunk in LiveKit, and the dispatch rule that maps that trunk to a room your agent joins. Signalling and media take different paths, the most common source of confusion in SIP: one-way audio is almost always a media-path problem, while a call that never connects is almost always a signalling one.

How do you connect a LiveKit agent to a real phone number?

Four steps. Buy a number at a carrier and point it at a trunk. Create the trunk at the carrier with LiveKit's SIP URI as the destination. Register that trunk as an inbound trunk in LiveKit. Add a dispatch rule that routes calls arriving on it into a room your agent joins. Inbound and outbound are configured separately and neither implies the other.

The vocabulary trips people up more than the configuration does. A trunk is the connection between your carrier and LiveKit. A dispatch rule decides which room an inbound call lands in: per-caller, per-number, or a single shared room. A SIP participant is how the call appears inside the room once it arrives, and your agent talks to it exactly as it would to a browser participant. That last point is why porting a working web agent to the phone is mostly a configuration exercise.

What surprises people is the money. Telephony is one of the three decisions that separate a 2.5¢-per-minute stack from LiveKit Cloud's own $0.0672 default, and the savings look trivial per minute and substantial per year. At 500,000 minutes a month, $0.003 a minute is $18,000 a year, from a configuration choice made in an afternoon.

The other surprise is who wins. The received wisdom is that Telnyx is dramatically cheaper than Twilio. On the published Elastic SIP rate cards for inbound local that's not true, and I'd rather tell you that than repeat it.

What does one phone minute actually cost, stacked?

Carrier rate plus LiveKit's third-party SIP fee, and the second term is the one people leave out. LiveKit charges $0.004 a minute on Ship and $0.003 a minute on Scale for third-party SIP minutes, on top of whatever your carrier bills, after 5,000 and 50,000 included minutes respectively. Omit it and bring-your-own-trunk looks better than it is, exactly the bias this comparison has to avoid.

For inbound local on the Ship plan the stacked totals are: LiveKit's own bundled number at $0.0100 a minute flat with no SIP fee, a Telnyx trunk at $0.0032 plus $0.004 for $0.0072, and a Twilio Elastic SIP trunk at $0.0034 plus $0.004 for $0.0074. Bring-your-own saves about 28% against bundled and the choice of carrier accounts for almost none of it.

Outbound is where the carriers genuinely diverge. Telnyx lists outbound local from $0.005 a minute; Twilio lists US termination at $0.0100. Stacked with LiveKit's fee that's $0.0090 against $0.0140: Telnyx is 36% cheaper on the outbound leg, which for an outbound-heavy campaign is a real number.

And toll-free inverts it. Twilio lists toll-free origination at $0.0130 a minute against Telnyx's $0.015, so on inbound toll-free Twilio is the cheaper carrier: $0.0170 stacked against $0.0190, and both beat LiveKit's bundled $0.0200. Toll-free and local rates differ by three to five times, and conflating them is the most common error in this category after the Programmable Voice mix-up.

The stacked minute
$ per minute, stacked (carrier + LiveKit SIP fee, Ship plan, 24 Aug 2026)lower is better
Telnyx inbound local → LiveKit$0.0032 + $0.0040$0.0072
Twilio inbound local → LiveKit$0.0034 + $0.0040$0.0074
Telnyx outbound local → LiveKit$0.0050 + $0.0040$0.0090
LiveKit bundled inbound localno SIP fee, no carrier account$0.0100
Twilio outbound local → LiveKit$0.0100 + $0.0040$0.0140
Twilio inbound toll-free → LiveKit$0.0130 + $0.0040$0.0170
Telnyx inbound toll-free → LiveKit$0.0150 + $0.0040$0.0190
LiveKit bundled inbound toll-freeno SIP fee$0.0200
Every carrier rate here is from telnyx.com/pricing/elastic-sip and twilio.com/en-us/sip-trunking/pricing/us, and the $0.0040 LiveKit third-party SIP fee is from livekit.com/pricing, all read on 24 August 2026. No single provider wins every row: Telnyx takes inbound and outbound local, Twilio takes inbound toll-free, and LiveKit's bundled number wins on nothing except not having to open a carrier account, which for a prototype is worth more than $0.003 a minute.

Is Telnyx cheaper than Twilio for voice AI?

On outbound, decisively: $0.0050 against $0.0100 a minute. On inbound local, by about 6%, which is noise. On inbound toll-free, no: Twilio is cheaper. Telnyx wins the rate card on balance, and the margin is nothing like the folklore suggests.

Where Telnyx genuinely separates is on the things around the rate. Call concurrency is free, secure trunking is free, T.38 fax is free, and call recording storage is $0 a minute against Twilio's $0.0005 a minute per month. Telnyx numbers start at $1.00 a month against Twilio's $1.15. And Telnyx offers per-channel inbound pricing, which Twilio's Elastic SIP product does not. That's the lever in the next section, and at high utilisation it's worth more than every rate difference above combined.

Where Twilio separates is ecosystem and operational surface. More integrations, more documentation, more people who've already debugged your problem, and SIP Insights as a paid observability product at $0.0024 a minute if you want carrier-level call diagnostics without building them. For a team that has never run telephony before, that's worth paying for, and I wouldn't talk anyone out of it.

One structural note for both: LiveKit's own pricing page suggests budgeting roughly $0.008 a minute for a third-party SIP provider. That's a sensible planning figure, sitting above both carriers' local rates and below Twilio's outbound. Use it for a first-pass model and replace it with the stacked numbers above once you've picked a direction.

Twilio vs Telnyx vs bundled, on published rate cards
 Twilio Elastic SIPTelnyx Elastic SIPLiveKit bundled
Inbound local / min$0.0034$0.0032$0.0100
Outbound local / min$0.0100$0.0050n/a
Inbound toll-free / min$0.0130$0.0150$0.0200
Outbound toll-free / min$0.0011Freen/a
Local number / month$1.15from $1.001 free, then $1.00
Toll-free number / month$2.15from $1.00$2.00
Per-channel inbound pricing$12 / $11 / $9 / $8 tiers
Call recording / min$0.0025$0.0020$0.005 session recording
Recording storage$0.0005/min per month$0not published
Concurrency feeno channel limitsFreeplan-capped sessions
LiveKit third-party SIP fee on top$0.004 Ship / $0.003 Scale$0.004 Ship / $0.003 Scalenone
Telnyx wins on balance (outbound local, toll-free outbound, recording, storage and the channel option) but loses inbound toll-free to Twilio and ties on inbound local. If you're running an inbound toll-free support line and nothing else, the received wisdom about carrier choice points you at the wrong vendor.

Should you pay per minute or per channel for inbound calls?

Per channel, once a channel exceeds about 3,750 minutes a month. That's 8.6% utilisation, a far lower bar than anyone expects, and why this calculation is worth doing before you assume per-minute is simpler.

The arithmetic: Telnyx prices inbound channels at $12 a month for the first 10, $11 for the next 40, $9 for the next 200 and $8 for 250 and above, with each channel supporting one concurrent inbound call. Against an inbound local rate of $0.0032 a minute, a $12 channel breaks even at $12 ÷ $0.0032 = 3,750 minutes. A channel busy every second of a month carries 43,800 minutes, so break-even utilisation is 3,750 ÷ 43,800, or 8.6%.

At the volume tiers it gets more favourable. A $9 channel breaks even at 2,812 minutes (6.4% utilisation) and an $8 channel at 2,500 minutes (5.7%). Any inbound agent whose lines are busy more than about one hour in twelve is overpaying on per-minute billing, and most production inbound agents clear that comfortably during business hours alone.

The trap is bursty traffic. Channels cap concurrency, one channel per concurrent call, so you provision for peak, not average, and pay for the peak all month. An agent with a 9am spike and a dead afternoon may need 50 channels to serve traffic that averages 8, so you buy 50 channels' worth of capacity to use 16% of it. Model your busiest hour, not your monthly total.

Per-minute vs per-channel inbound (Telnyx, first 10 channels)
72543618001,0002,0003,7506,00010,00020,000Monthly cost per channel (USD)Minutes per channel per month
3,750 min = 8.6% utilisation
Per-minute inbound @ $0.0032/minInbound channel @ $12/month
A fully utilised channel carries 43,800 minutes a month, so the crossover at 3,750 minutes is 8.6% utilisation, a bar most production inbound agents clear during business hours alone. The flat line is also why channels are a trap for bursty traffic: you buy for peak concurrency and pay for it in the quiet hours too.
channel_breakeven.py
HOURS_PER_MONTH = 730          # 43,800 minutes if a channel never idles

def channel_breakeven(channel_price_usd: float, per_minute_rate: float):
    minutes = channel_price_usd / per_minute_rate
    utilisation = minutes / (HOURS_PER_MONTH * 60)
    return minutes, utilisation

# Telnyx inbound channel tiers vs inbound local at $0.0032/min
for price, tier in ((12, "first 10"), (11, "next 40"), (9, "next 200"), (8, "250+")):
    mins, util = channel_breakeven(price, 0.0032)
    print("channel {:>3} ({:>8}): break-even {:>6,.0f} min/mo  = {:.1%} utilisation"
          .format("$" + str(price), tier, mins, util))

# Provision channels for PEAK concurrency, not average:
#   peak_channels = busiest_hour_calls * avg_call_minutes / 60, rounded up
Fifteen lines, no dependencies. Run it against your own carrier rate and your own peak concurrency before you decide, because the answer is counter-intuitive often enough to be worth the two minutes.

What breaks in production that never breaks in testing?

One-way audio, spam labelling, CPS throttling, DTMF, and 8kHz audio degrading your transcription. Roughly the order I've watched them happen, and none of them appear in a happy-path tutorial.

One-way audio is a codec or media-path problem, not a signalling one. The call connects, so your logs look healthy, and one side hears nothing. Forcing a single codec in the trunk configuration fixes most of these, because the failure is usually a negotiation that succeeded on paper and produced something one end can't decode. It's the first thing to try and takes two minutes.

Spam labelling is the one that kills outbound campaigns and has no technical fix. Carriers and handset vendors flag numbers algorithmically on call patterns, and once flagged your connect rate collapses. Both carriers sell mitigation: Twilio charges $10 a month per verified phone number through platforms that resell it, and branded caller ID is priced per outbound call on some platforms. Budget for it before launch rather than after your connect rate drops.

CPS throttling is the outbound scaling ceiling. Telnyx applies calls-per-second surcharges above certain thresholds and documents them separately from the rate card, which means your dialer's burst rate is a commercial parameter and not just a config value. Find your CPS limit before you schedule a campaign, not during one.

SymptomCauseFixWhere to configure it
One-way audioCodec negotiated but not decodable at one endForce a single codec (PCMU) on the trunkCarrier trunk settings
Call connects, then silenceProvider concurrency ceiling hit at peakCheck STT/TTS/LiveKit session caps against peak concurrencyVendor plan tiers, in writing
Outbound calls flagged as spamAlgorithmic reputation scoring on call patternsVerified numbers and branded caller ID; vary numbersCarrier console + number reputation service
Outbound fails above a burst rateCPS threshold and surchargeRate-limit your dialer; raise CPS with the carrierCarrier account, commercial request
DTMF keypresses ignoredCallers still press keys and nobody handles themHandle DTMF events in the agent explicitlyAgent code
Transcription worse on phone than web8kHz narrowband vs 48kHz wideband audioEvaluate STT on your own recorded phone audio; keyterm promptingSTT config
Call drops on deployWorker restarted with a call in flightHandle SIGTERM; drain before terminatingWorker lifecycle + deployment settings

Which should you pick, and how do you avoid getting locked in?

Start on LiveKit's bundled number, move to Telnyx when volume justifies it, and choose Twilio if you're inbound-toll-free-heavy or if your team values the ecosystem more than $0.002 a minute. Then make the carrier a configuration value rather than an assumption baked through your code.

For a prototype, LiveKit's bundled number at $0.0100 a minute with one number free is the right answer, and it's not close. You avoid opening a carrier account, configuring a trunk and debugging codec negotiation, all to save $0.003 a minute on traffic you don't have yet. Come back to this page when you do.

For production inbound at volume, Telnyx: $0.0032 a minute, free concurrency, $0 recording storage, and the per-channel option that changes the economics above 8.6% utilisation. For production outbound, Telnyx again, by a wider margin: $0.0050 against $0.0100 is the largest single carrier gap on the rate card. For inbound toll-free specifically, Twilio at $0.0130.

The lock-in defence is cheap: keep trunk IDs, numbers and dispatch rules in configuration, never hard-code a carrier's SIP URI or its DTMF quirks into agent logic, and keep your number inventory in a table you own rather than a carrier console. Porting numbers between carriers is a slow, human process, and what makes it painful is never the SIP; it's discovering which internal systems assumed the old provider.

Telephony is one line in a per-minute model and rarely the decisive one. Put your own volume into the voice AI cost calculator alongside the transcription and synthesis lines from choosing an STT provider for voice agents and you'll see how small it is relative to the rest. If you'd rather have the trunks, dispatch rules and drain handling set up correctly the first time, that's part of what voice AI development covers. And if you're still prototyping, use LiveKit's bundled number and ignore this entire post until you have traffic.

Do these in order
Inbound calling, start to finish
  • Buy a number and point it at a trunk at the carrierTelnyx from $1.00/mo; Twilio $1.15/mo local
  • Create the carrier trunk with LiveKit's SIP URI as the destination
  • Register the inbound trunk in LiveKit with the allowed numbers
  • Add a dispatch rule mapping that trunk to a roomPer-caller rooms unless you have a reason not to
  • Force a single codec on the trunkPre-empts most one-way-audio incidents
  • Place a real call from a real handset, not from a softphoneSoftphones hide the codec and jitter problems you are testing for
  • Handle SIGTERM so in-flight calls end with speech, not silenceThe detail that tells an operator you have done this before
  • Confirm your CPS limit and concurrency caps in writing before launch weekRaising them is a commercial conversation measured in days
The first six get you a phone call answered by your agent. The last two stop your first busy Monday from being an incident, and they're the two that get deferred because neither one fails in testing.

LiveKit SIP trunking: common questions

How do you connect a LiveKit agent to a phone number?

Buy a number at a carrier and point it at a trunk, create the trunk at the carrier with LiveKit's SIP URI as its destination, register that trunk as an inbound trunk in LiveKit, then add a dispatch rule mapping the trunk to a room your agent is dispatched into. Inbound and outbound trunks are configured separately, and neither one implies the other.

Is Telnyx cheaper than Twilio for voice AI?

On outbound, decisively: Telnyx lists outbound local from $0.0050 a minute against Twilio Elastic SIP's $0.0100. On inbound local it's a near-tie at $0.0032 against $0.0034. On inbound toll-free Twilio is actually cheaper, at $0.0130 against $0.0150. Telnyx wins on balance, and also on free concurrency, free secure trunking and $0 recording storage.

How much does SIP trunking cost per minute in 2026?

For a LiveKit agent, roughly $0.007 a minute all-in on inbound local: a carrier rate of $0.0032 to $0.0034 plus LiveKit's third-party SIP fee of $0.004 a minute on the Ship plan or $0.003 on Scale. LiveKit's bundled US local inbound is $0.0100 a minute with no separate SIP fee, and its bundled toll-free inbound is $0.0200.

Should you pay per minute or per channel for inbound calls?

Per channel above roughly 3,750 minutes per channel per month. Telnyx prices inbound channels at $12 a month for the first 10, $11 for the next 40, $9 for the next 200 and $8 above 250, each supporting one concurrent inbound call. Against $0.0032 a minute, a $12 channel breaks even at 3,750 minutes, which is only 8.6% utilisation of the 43,800 minutes a channel could carry.

Why are my AI voice agent's outbound calls marked as spam?

Carriers and handset vendors flag numbers algorithmically based on call patterns (high volume from a new number, short average duration, low answer rate) and there is no purely technical fix. The mitigations are verified phone numbers and branded caller ID, both sold as paid add-ons, plus rotating numbers and keeping per-number volume within normal human ranges. Budget for it before launch rather than after your connect rate drops.

Why do I get one-way audio on SIP calls to my agent?

Almost always a media-path or codec problem rather than a signalling one, which is why the call connects and your logs look healthy. The negotiation succeeded but one end can't decode what the other is sending. Forcing a single codec such as PCMU in the trunk configuration resolves the majority of these, and it's the two-minute fix to try before investigating anything else.

Ready to talk numbers?

Twenty minutes, straight to the engineer. No sales rep, no deck.