Carriers

The carrier
provides access.

Dials owns the control plane, the identity model, and the usage ledger. Carriers carry the bits. Provider-neutral by design — your numbers and routes stay yours.

At a glance

The provider matrix on Dials today.

BulkVS
Wired
Wholesale US + CA DID search, hold, and provisioning.
Vonage
Modeled
Global voice via the same adapter boundary.
Telnyx
Modeled
Programmable trunking + SMS via adapter.
Bandwidth
Modeled
E911 + toll-free via adapter.

One adapter shape

Pluggable, not promiscuous.

Every carrier sits behind the same Rust trait. Search a DID. Hold it. Provision it. Place a call. Send a message. The trait is the contract. The carrier is the implementation.

  • One trait, many providers
  • Mock mode by default
  • Per-adapter credentials
  • Per-adapter cost model
dials · carriers
BulkVS
US + CA DIDs · wholesale
Wired
Vonage
Global voice
Modeled
Telnyx
Programmable trunking
Modeled
Bandwidth
E911 + toll-free
Modeled

Bring your own

No carrier lock-in.
Ever.

Port a number out the same way you ported it in. Swap a provider behind a route without rewriting your routing graph. Your identity and policy graph never depended on any one carrier.

  • Documented port-in
  • Documented port-out
  • Per-DID provider attribute
  • Migration tooling included
dials · port
1
Request
Submitted to losing carrier
ok
2
LOA
Signed and uploaded
ok
3
FOC
2026-03-12 · 17:00Z
ok
4
Cut
Adapter switched live
ok

Pick a carrier.

Inspect the live carrier matrix in the console. Switch the adapter mode from mock to wired and replay the same audited path.