Reader setup
Before you choose
List your constraints, required evidence and stop rules before you score options.
- A VICIdial installation with read-only database access already configured - see Create a read-only database account for safe VICIdial queries - the /etc/vicidial-readonly.cnf pattern used throughout this article.
- Whoever owns your firewall rules, since testing either vendor's signalling and media ranges means opening ports before a single call can register.
- At least one week of comparable call volume you can run through each carrier before drawing a conclusion from vicidial_carrier_log.
- What you will prove
- You will have a documented, non-marketing comparison of both vendors' technical attributes and a repeatable way to measure answer rate and hangup cause per carrier from your own traffic.
- Safety boundary
- No price, capacity, or reliability ranking is stated for either vendor; every attribute here is read from vendor documentation or from this installation's own configuration.
Reader path
How to use this article
- Use it when: You are comparing options and need decision evidence before approval.
- Expected result: Turn options into explicit acceptance criteria and documented stop conditions.
- Start here: Score what is mandatory, keep unknowns visible, then decide only when risks are understood.
Compare attributes, not marketing claims
Fast answer: Telnyx and Twilio are both wholesale Session Initiation Protocol (SIP) trunk providers, meaning either one can carry your outbound calls onto the public telephone network over a SIP connection rather than a physical phone line. Nothing in either vendor's own documentation supports calling one cheaper, faster, or more reliable than the other for high-volume outbound dialing; what their documentation does support is a side-by-side read of authentication models, signalling endpoints and regions, transports and encryption, codec and cipher support, and how each vendor structures outbound spend and destination controls. Test both against your own campaigns before committing to either, and keep measuring your own answer rate and hangup causes per carrier afterward, because that is the only comparison that reflects your traffic rather than a vendor's.
For plain-language definitions of carrier, trunk, DID, dial level (or dial ratio), and disposition, see VICIdial and VoIP glossary for complete beginners and VICIdial terminology for complete beginners: users, phones, campaigns and leads. One term is specific to this comparison: a channel is one simultaneous call path a trunk can carry, so a trunk provisioned for fifty channels can carry fifty calls at once - the distinction this article returns to when it weighs calls-per-second against concurrent-channel limits.
Two more terms recur throughout: Transport Layer Security (TLS) encrypts the SIP signalling itself, while Secure Real-time Transport Protocol (SRTP) encrypts the audio; a trunk can offer one without the other, and neither vendor's cipher list matters unless you actually negotiate SRTP rather than falling back to plain Real-time Transport Protocol (RTP), the unencrypted audio stream a trunk carries by default.
- Read every attribute below from the cited vendor page, not from this summary; both vendors update these pages.
- Treat cost, capacity, and reliability as unanswered until you request a current quote and run your own week of calls.
- Confirm your own RTP port range before blaming either vendor for one-way or dead audio.
Visual walkthrough
Follow three real demo screens
Captured on an isolated VICIdial demo: Administration screens on September 24, 2026, and the idle Agent screen on August 11, 2026. Each caption states its own capture time, and every sanitized image helps you recognize a related screen; none proves that this article's call, command, or result occurred.Find carrier administration

Open Carrier Listings

Check the allowed SIP-stack setting

The attributes, side by side, from each vendor's own documentation
Every value in the table below was read from Telnyx's or Twilio's own published documentation, not a comparison blog or a reseller's page, and every value is dated because both vendors change these pages. Where a vendor's fetched pages did not state a value, for example a minimum TLS version, the table says so rather than assuming parity between the two.
Use it as an index, not a verdict. The sections that follow explain why each row matters to a dialer specifically, and where the local VICIdial installation, not either vendor, sets the tighter limit.
ATTRIBUTE-BY-ATTRIBUTE FROM EACH VENDOR'S OWN DOCS, accessed August 5, 2026 Authentication Twilio: IP Access Control Lists (ACLs) and/or Credential Lists (SIP digest); Twilio recommends adding credentials, not ACL alone Telnyx: credentials, IP address, or FQDN (Fully Qualified Domain Name) Transports and ports Twilio: UDP 5060, TCP 5060, TLS 5061 (TLS 1.2 and above documented); custom TLS port possible Telnyx: UDP 5060, TCP 5060, TLS 5061; minimum TLS version not published in the pages checked Signalling reach Twilio: per-account subdomain, eight regional signalling ranges, each a /30 Telnyx: six regional hostnames (US, Europe, Australia, Canada, Middle East, Asia-beta), anycast Media ports Twilio: UDP 10,000-60,000, one /18 destination block Telnyx: UDP 16,384-32,768, fourteen published address blocks of varying size SRTP cipher suites Twilio: two suites, both SHA-1 based Telnyx: ten suites, GCM suites offered first Codecs published Twilio: bandwidth guidance for G.711 only, in the pages checked Telnyx: PCMU, PCMA, G.729, G.722, Opus, AMR-WB Outbound controls Twilio: up to 10 origination URIs with priority and weight Telnyx: Outbound Voice Profile (destinations, rate limit, daily spend limit) attached to a SIP Connection; Anchorsite picks the point of presence Pull the current version of each list before writing a firewall rule; both vendors update these pages. This sample is a template or reading aid, not a terminal command. There is no output to show.
- Before you run it
- Open both cited vendor pages side by side before you rely on this table; it is a snapshot from August 5, 2026, and both vendors update these pages.
- Success looks like
- You can point to the vendor page and access date behind every row before writing a single firewall rule or PJSIP endpoint.
- Stop if
- Do not act on a row you cannot trace back to a current vendor page; re-fetch it instead of trusting this snapshot indefinitely.
Authentication models: what each vendor actually accepts
Twilio authenticates a trunk with Access Control Lists (ACLs), a list of IP addresses allowed to send it traffic, Credential Lists, SIP digest authentication using a username and password, or both together. Twilio's own guidance is to add credential authentication rather than rely on an IP allowlist alone, since an IP-only trunk does not resist every kind of abuse a compromised or spoofed address can attempt.
Telnyx authenticates a SIP Connection by credentials, by source IP address, or by Fully Qualified Domain Name (FQDN), a hostname that resolves to your address instead of a bare IP. Structurally this is the same menu Twilio offers, credential-based or address-based, described with different names.
Neither vendor's authentication choice changes what VICIdial itself stores. The peer-configuration pattern documented in Connect your first SIP carrier so calls can leave the server builds one address of record, one identify object matching the peer's address, and one endpoint per carrier_id, and by default it authenticates by IP address alone, the same pattern regardless of which vendor sits on the other end. If you want SIP digest credentials instead of, or alongside, IP authentication, both vendors support it; that generic pattern simply does not turn it on for you.
- Decide whether IP authentication alone meets your own risk tolerance before defaulting to it because it is what the generic carrier pattern uses.
- If you add SIP digest credentials, confirm the secret is stored the same way your other carrier credentials are, not pasted into a shared configuration file.
- Test authentication failure deliberately: an intentionally wrong credential or an unlisted source address should be rejected, not silently accepted.
Signalling endpoints, regions, transports, and TLS
Twilio issues a per-account signalling domain in the shape yourname.pstn.twilio.com, plus region-pinned variants, for example a North America Virginia domain, a Europe Ireland domain, and an Asia Pacific Singapore domain, so you can pin a trunk to a specific Twilio data center rather than an anycast default. Twilio publishes eight regional signalling ranges behind those domains, each a Classless Inter-Domain Routing (CIDR) block sized /30, four addresses, covering North America, Europe, Asia-Pacific, and South America.
Telnyx instead publishes six fixed regional hostnames, sip.telnyx.com for the United States, plus separate hostnames for Europe, Australia, Canada, the Middle East, and an Asia hostname marked beta, each backed by an anycast signalling address rather than a per-account subdomain. Anycast means the same published address can be answered by more than one physical location, with the network routing you to the nearest one.
Both vendors offer the same three transports: User Datagram Protocol (UDP) and Transmission Control Protocol (TCP) on port 5060, and Transport Layer Security (TLS) on port 5061. Twilio's fetched documentation states TLS 1.2 and above explicitly and allows a custom TLS port; Telnyx's fetched pages confirm TLS on 5061 without stating a minimum version, so confirm that directly with Telnyx if a minimum TLS version matters to your own compliance posture rather than assuming it matches Twilio's.
The structural difference matters for firewalling more than the transport list does: Twilio's eight separate /30 ranges mean picking the wrong regional domain, or missing one, leaves a real range unallowlisted, while Telnyx's anycast hostnames collapse that into fewer published addresses per region, at the cost of trusting the vendor's own anycast routing instead of tracking multiple fixed ranges yourself.
- Pin the regional domain or hostname you actually intend to use before writing any firewall rule.
- Pull the current signalling range list from the vendor page at change time, not from a value written down previously.
- Confirm which transport, UDP, TCP, or TLS, your own PJSIP transport is actually configured to offer before assuming a vendor default matches it.
Codec support and SRTP cipher suites
Telnyx publishes a codec list: G.711U, also written PCMU, G.711A, also written PCMA, G.729, G.722, Opus, and Adaptive Multi-Rate Wideband (AMR-WB), a codec built for mobile and video-call audio you are unlikely to need on an outbound dialer. Twilio's fetched pages gave bandwidth guidance instead of an enumerated list, roughly 100 kilobits per second per call for G.711; if your dialplan depends on a specific codec beyond G.711, confirm it against Twilio's current documentation rather than assuming its list matches Telnyx's.
Secure Real-time Transport Protocol (SRTP) cipher support also differs in breadth. Twilio publishes two suites, AES_CM_128_HMAC_SHA1_80 and AES_CM_128_HMAC_SHA1_32, both built on the Advanced Encryption Standard (AES) in counter mode with a Secure Hash Algorithm (SHA) based Hash-based Message Authentication Code (HMAC). Telnyx's default order lists ten, leading with four Galois/Counter Mode (GCM) suites before falling back through the same family of SHA-1 based suites Twilio offers.
The overlap is what actually matters for interoperability: if you want SRTP on both carriers using one Asterisk cipher configuration, the two vendors' published lists only agree on the SHA-1 based suites, so confirm your PJSIP endpoint is actually offering one of those rather than a GCM suite Twilio does not list.
- Do not assume codec parity between the two vendors; Telnyx published a list, Twilio's fetched pages did not.
- Pick a cipher suite both vendors' published lists actually contain if you need SRTP with one shared Asterisk configuration.
- Verify a negotiated codec and cipher on a real test call, not just the vendor's stated support.
Media port ranges and what they mean for firewalling
Twilio publishes its media destination as one Classless Inter-Domain Routing (CIDR) block sized /18, with Real-time Transport Protocol (RTP) audio on UDP ports 10,000 through 60,000. Telnyx instead publishes a list of media address blocks, fourteen ranges of varying size rather than one contiguous block, with RTP on UDP ports 16,384 through 32,768.
RTP places one call's audio on an even-numbered port, with its RTP Control Protocol (RTCP) statistics channel on the odd port directly above it, so a wider published range says something about how many concurrent streams a vendor expects to originate toward you, not a promise about how many calls you personally can sustain; that ceiling is set by your own firewall and Asterisk configuration, never the carrier's.
Both vendors tell you, in their own words, to pull the current list from their page before writing a firewall rule, because these ranges change; Twilio phrases it as an instruction to allow all of its published ranges and ports, while Telnyx structures the same requirement as a list of individual blocks to allowlist one at a time rather than a single contiguous range.
- Re-pull each vendor's current signalling and media ranges immediately before a firewall change, not from an old note.
- Open exactly the ports the vendor documents, 5060 UDP and TCP, 5061 TLS, plus its stated media range, not a broader shortcut.
- Treat a vendor's published media range as a maximum, not a target; your own range is very likely narrower.
VICIdial's own RTP range is the tighter constraint
Whichever vendor you choose, your own Asterisk server has a configured rtpstart and rtpend in /etc/asterisk/rtp.conf, and that range - not either vendor's much wider published range - is usually the tighter constraint, because RTP consumes one port pair per concurrent stream regardless of which carrier the call belongs to.
For the full arithmetic - how to read your own range, compute your concurrent-stream ceiling, and size it against your dial level and agent count - see Elastic SIP trunking for predictive dialers: why your own media path is the real ceiling; this comparison stops at flagging that the constraint exists, since it applies identically to both vendors and has nothing to do with which one you pick.
If your own comparison shows a shortfall, raise rtpend and the matching firewall rule together, in the same change. Raising one without the other produces one-way or dead audio that looks exactly like a carrier fault, and chasing that as a Telnyx or Twilio problem wastes a support ticket on something local.
- Read your own rtpstart/rtpend before opening a ticket with either carrier about audio problems; do not assume a number.
- Raise rtpend and the firewall rule together, in the same change, never one without the other.
How each vendor structures outbound controls, and what VICIdial does not change
Twilio lets you list up to 10 origination Uniform Resource Identifiers (URIs) per trunk, each with a priority from 0 to 65535 and a weight from 1 to 65535, so you can rank or split traffic across your own endpoints. Destination and authentication controls sit at the Access Control List (ACL) or Credential List level described earlier, not in a separate spend control.
Telnyx attaches an Outbound Voice Profile to a SIP Connection, and that profile is where allowed destinations, rate limits, and a daily spend limit live, separate from the authentication settings on the connection itself. An Anchorsite setting on the same profile selects which regional point of presence a call actually originates from.
Neither model changes what a VICIdial carrier row actually is: one carrier_id, one address-of-record and identify and endpoint object set, and one dialplan entry matched by a dial prefix, exactly the objects documented in Connect your first SIP carrier so calls can leave the server. What changes between the two vendors is the peer address, the authentication details, and the dialplan pattern; nothing about how VICIdial itself stores or routes a carrier depends on which of the two you pick.
Route selection itself works the way the guide titled VICIdial least-cost routing: cut carrier costs with dial prefixes, not a rate engine describes it: a campaign's Dial Prefix decides which carrier a call uses, not a rate table VICIdial maintains internally. If you intend to run Telnyx and Twilio side by side rather than switching outright, that is the two-carrier pattern in the guide titled Configure multi-carrier redundancy in VICIdial before downtime forces you to: a second carrier_id, its own account entry and dialplan pattern, active at the same time as the first, with a campaign's Dial Prefix as the only thing that moves traffic between them.
- Read each vendor's outbound-control page directly before assuming Outbound Voice Profile and origination URI priority behave the same way.
- Keep the peer address, authentication, and dialplan pattern as the only three things that differ per carrier in your own configuration.
- Decide up front whether you are switching vendors or running both, since the two require different carrier rows.
What to test on both before committing
Confirm registration or authentication actually completes end to end, not just that the vendor's dashboard shows a trunk as configured; a trunk can look complete and still reject every call from your specific network path. If you intend to use Transport Layer Security (TLS), test the TLS handshake on port 5061 directly, not only User Datagram Protocol (UDP) on 5060, since a working UDP trunk tells you nothing about whether your TLS configuration is correct.
Test codec negotiation against what your script and answering-machine detection actually need; a call that transcodes from G.729 to G.711 partway through adds a processing hop that can change how answering-machine detection behaves, even though the call itself completes normally. Confirm Dual-Tone Multi-Frequency (DTMF) signalling end to end using the same rfc4733 pattern documented in Connect your first SIP carrier so calls can leave the server, meaning touch-tones travel as a separate signal rather than inside the audio itself; a mismatch here breaks transfers and any interactive voice response step that expects digits.
Confirm the media path actually opens under your own current rtpend, not the vendor's much wider stated range, and place enough concurrent test calls to notice if you are close to your own ceiling before a real campaign does. Finally, test what each vendor's outbound controls actually enforce by attempting a call to a destination you have deliberately excluded from the Outbound Voice Profile or origination configuration, and confirm it is blocked rather than trusting the dashboard label.
If you want a structured, point-by-point score across more than these two vendors, use the guide titled A 12-point SIP trunk evaluation matrix for VICIdial; this article stops at the attributes specific to Telnyx and Twilio and the one procedure above, rather than repeating that matrix's twelve criteria.
- Test TLS on 5061 directly if you intend to use it; a working UDP trunk proves nothing about TLS.
- Confirm DTMF end to end using the same rfc4733 pattern documented in Connect your first SIP carrier so calls can leave the server.
- Attempt a deliberately excluded destination and confirm it is actually blocked, not just labeled that way.
#!/usr/bin/env bashset -euo pipefail asterisk -rx 'pjsip show transports'asterisk -rx 'pjsip show endpoint <CARRIER_ID>'asterisk -rx 'pjsip show aor <CARRIER_ID>'if systemctl is-active --quiet firewalld; then firewall-cmd --state firewall-cmd --get-active-zones firewall-cmd --info-service=asterisk firewall-cmd --info-service=rtpelif command -v ufw >/dev/null 2>&1; then sudo ufw status verboseelse sudo iptables -L -nficommand -v VB-firewall >/dev/null 2>&1 && echo "VB-firewall present at $(command -v VB-firewall) -- ViciBox's own firewall front-end"mysql --defaults-extra-file=/etc/vicidial-readonly.cnf -e "SELECT carrier_id, protocol, active FROM vicidial_server_carriers WHERE carrier_id = '<CARRIER_ID>';" Captured demo response · 2026-09-24 22:25 UTC. The displayed command is the command that ran; a safe subset label means it was filtered, redacted, or fixture-scoped. Replays only after you select Replay transcript.
- Before you run it
- Run this against a carrier row you configured for testing only, after registration succeeds, before pointing a live campaign at it.
- Success looks like
- The endpoint and AOR show your exact Carrier ID with a live contact, exactly one firewall backend reports itself active, and the carrier row is active in the database.
- Stop if
- Stop before dialing real leads through this carrier if the endpoint or AOR is missing, no firewall backend reports itself active, or the carrier row is not active.
What to measure from your own call data afterward
Vendor documentation cannot tell you your own answer rate or hangup mix; only your own calls can. vicidial_carrier_log records one row per call attempt, including dialstatus, VICIdial's own outcome classification described in the VICIdial statuses reference, sip_hangup_cause, and answered_time, and the channel column carries the carrier_id in its own name because the PJSIP endpoint name is the carrier_id you configured.
Compare the two carriers only over a population you can actually name: the same campaigns, a comparable mix of time of day, and a comparable week of volume. Comparing a carrier that only ran overnight retries against one that ran your daytime campaigns is not a fair comparison of the vendors; it is a comparison of two different call populations.
Watch for dialstatus NA clustering with answered_time at zero on one carrier's rows and not the other, and watch sip_hangup_cause for a pattern specific to one vendor rather than spread evenly across both. That pattern, taken from your own traffic over a real week, is the only comparison in this entire article that can actually justify a decision; everything above it is groundwork for building that comparison correctly.
- Name the exact campaigns, date range, and time-of-day window before comparing two carriers' numbers.
- Compare dialstatus and sip_hangup_cause per carrier, not just a single blended answer rate.
- Re-run the same query weekly rather than deciding from one day's traffic.
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(channel, '/', -1), '-', 1) AS carrier_id, dialstatus, sip_hangup_cause, COUNT(*) AS calls, SUM(answered_time > 0) AS answered, ROUND(100 * SUM(answered_time > 0) / COUNT(*), 2) AS answer_rate_percentFROM vicidial_carrier_logWHERE call_date >= CURDATE() - INTERVAL 7 DAYGROUP BY carrier_id, dialstatus, sip_hangup_causeORDER BY carrier_id, calls DESC;This sample changes a system, contacts an outside service, needs a live call, or would print real data from a shared server, so it was not run on the demo. Run it only where you are authorized, and compare the result with the success and stop guidance.
- Before you run it
- Run this on your own production install with mysql --defaults-extra-file=/etc/vicidial-readonly.cnf -e "..." after both carriers have carried a comparable week of the same campaigns; it groups every carrier_id it finds, so only run it where you actually intend to publish that comparison, never against a shared or demo install carrying someone else's traffic.
- Success looks like
- Both carriers show a comparable answer_rate_percent and a hangup-cause mix you can explain; a gap prompts a specific question for the weaker carrier's support team, not an automatic switch.
- Stop if
- Treat a carrier whose rows cluster on dialstatus NA with answered_time at zero, or whose sip_hangup_cause mix looks nothing like the other carrier's, as needing investigation before you send it more volume.
Evidence ledger
Verification basis
- Twilio and Telnyx attribute values (authentication, transports, TLS versions, SRTP suites, codecs, media port ranges, and outbound controls) are read verbatim from each vendor's own documentation, accessed August 5, 2026; no pricing, capacity, or reliability figure was fetched or is stated for either vendor.
- Your own Asterisk server's rtpstart/rtpend in /etc/asterisk/rtp.conf, not either vendor's published media range, sets the real concurrent-call ceiling; see Elastic SIP trunking for predictive dialers: why your own media path is the real ceiling for the arithmetic, independent of which carrier is on the other end.
- The carrier-configuration mechanics described here (address-of-record, identify, and endpoint objects keyed to carrier_id, and route selection by dial prefix) come from the same database-managed PJSIP pattern documented in Connect your first SIP carrier so calls can leave the server, not from either vendor's onboarding material.
Primary references
Sources
- Twilio Elastic SIP TrunkingTwilio · accessed September 24, 2026
- Twilio SIP Trunking IP AddressesTwilio · accessed September 24, 2026
- Telnyx SIP TrunkingTelnyx · accessed September 24, 2026
- Telnyx SIP Trunking documentationTelnyx · accessed September 24, 2026
- VICIdial PJSIP SupportVICIdial · accessed September 24, 2026
- VICIdial StatusesVICIdial · accessed September 24, 2026