Skip to content
New: the dialpress Node SDK. Route SIP like Express and put an agent on any call.Get started
DialPress
DialPress
Numbers & Trunking

Your carriers, your numbers, one gateway

Connect any SIP trunk, keep or port your phone numbers, and spread calls across carriers with failover. Voice and SMS carriers are configured in the API, and every call and message is routed in code or with routing flows.

terminal
# a SIP trunk: the carrier we call, and that calls us $ curl -X POST $DP/trunks -H "Authorization: Bearer $TOKEN" -d '{ "name": "Carrier A", "direction": "both", "host": "sip.carrier-a.example", "inboundIps": ["203.0.113.10"], "requireTls": true, "rejectAnonymous": true, "enabled": true }' { "id": "tr_1", "name": "Carrier A", "enabled": true } # a routing flow sends a call out through it $ curl -X POST $DP/routing/flows -d '{ "name": "Out via Carrier A", "steps": [{ "type": "route_uri", "params": { "uri": "sip:[email protected]", "ring_timeout": 30 } }] }' { "id": "fl_7", "enabled": true }

At a glance

Any carrier

Standard SIP trunks over UDP, TCP, or TLS, inbound, outbound, or both.

Failover

Weighted destinations, backup carriers, and health checks on every one.

Locked down

Only your trunks and your users get in. Strangers can never reach a trunk.

Numbers and SMS

Local and toll-free numbers, free porting, and SMS carriers over SMPP.

A trunk is a carrier you trust

Each trunk names a carrier: where calls to it go, the IP addresses its calls come from, and which way it works. Calls in from a trunk reach your users and apps; calls out leave through the trunk a routing flow picks. Require TLS, refuse anonymous callers, and cap calls per user, per trunk.

Connect a carrierterminal
# a SIP trunk: the carrier we call, and that calls us $ curl -X POST $DP/trunks -H "Authorization: Bearer $TOKEN" -d '{ "name": "Carrier A", "direction": "both", "host": "sip.carrier-a.example", "inboundIps": ["203.0.113.10"], "requireTls": true, "rejectAnonymous": true, "enabled": true }' { "id": "tr_1", "name": "Carrier A", "enabled": true } # a routing flow sends a call out through it $ curl -X POST $DP/routing/flows -d '{ "name": "Out via Carrier A", "steps": [{ "type": "route_uri", "params": { "uri": "sip:[email protected]", "ring_timeout": 30 } }] }' { "id": "fl_7", "enabled": true }
Carrier failoverdialpress.yaml
# weighted across a carrier, a backup when it is down sip-forwarding: sets: - name: carrier domains: [carrier.example] algorithm: weighted-round-robin destinations: - { uri: "sip:10.0.0.20:5060", weight: 2 } - { uri: "sip:10.0.0.21:5060;transport=tcp", weight: 1 } - { uri: "sips:backup.carrier.example", priority: 1 } ping: { interval: 30s, timeout: 5s } branch_timeout: 8s

Spread calls across carriers

Group a carrier’s endpoints into a set. Calls go to the best priority that is up, weighted between endpoints, and move to the next one on a transport error, a timeout, or a 5xx. OPTIONS pings mark an endpoint down and back up, so a failing carrier is skipped before a caller notices.

How failover works

Per destination set, in the order a call meets it.

01

Pick

The first set matching the Request-URI, by domain or number prefix.

02

Balance

Weighted round robin, or by call ID so a call’s requests stay together.

03

Fail over

No answer, 408, or 5xx tries the next destination. A 4xx or 6xx is final.

04

Check

OPTIONS pings mark destinations down and back up on their own.

Safe by default

Toll fraud is a trunk problem. The gateway is closed until you open it.

Only trunks and users

Calls come in from your trunks’ IP addresses and your own users, who authenticate. Nothing else is admitted.

No calls out for strangers

Traffic from the internet reaches your users only, never a trunk, so nobody calls premium numbers on your bill.

Per trunk

Require TLS, refuse anonymous callers, and limit concurrent calls and calls per hour per user.

Callers marked

Unauthenticated callers are marked unverified, in call records and to the callee.

Scanners blocked

Sources that fail too often are rate limited and blocked. Trunks are never blocked.

Every denial counted

Each refused call or message is an event with its reason, and counted by reason.

SIP beyond the phone network

Not every call needs a phone number.

Call any SIP domain

Users can call SIP addresses on other domains, found by DNS, with allow and deny lists.

Take calls from anywhere

Let the internet call the users you list by SIP address, with presence if you want it.

Codecs

G.711, G.722, AMR-WB, and Opus, with the codec list under your control per account.

SMS carriers, routed like calls

Bind to your SMS carriers over SMPP 3.4, with delivery reports and incoming SMS. Routing flows pick the cheapest carrier by number prefix, fail over to the next, and wait for the handset’s delivery report. Numbers are normalized to E.164 on the way in.

SMS by least costterminal
# SMS to Poland: the cheapest carrier, the other one if it fails $ curl -X POST $DP/routing/flows -d '{ "name": "SMS Poland", "when": "countryOf(to) == \"PL\"", "steps": [{ "type": "route_smpp", "params": { "strategy": "least_cost", "await": "delivered", "gateways": [{ "id": "carrier-a" }, { "id": "carrier-b" }] } }] }' { "id": "fl_9", "enabled": true }

Phone numbers

Local and toll-free

Numbers in the plans, ready for calls, SMS, and agents on day one.

Free porting

Bring your numbers on every plan, with a temporary number while the port completes.

Your own trunks

Already have a carrier? Connect it as a trunk and keep your numbers where they are.

Common questions

Can I use my own carrier?

Yes. Any carrier that offers SIP trunks, Twilio included, connects as a trunk: inbound, outbound, or both.

Can I use more than one carrier?

Yes. Weight calls between them, keep one as a backup, or route by destination with routing flows.

What stops toll fraud?

Only your trunks and authenticated users are admitted, and traffic from the internet can never reach a trunk.

Do I need phone numbers at all?

No. Browsers, apps, and SIP addresses call each other without a number.

Can I keep my numbers?

Yes. Port them for free, or leave them with your carrier and connect it as a trunk.

Connect your first carrier.

Add a trunk, route a call out through it, and watch it in the call records.