One requirement decides everything
This phone lives behind your router with no ports open. It opens the connection outward and calls arrive back down that same pipe. So the only question that matters when shopping is:
Does the provider accept an outbound SIP registration?
If yes, it will work. If the provider only authenticates by pushing calls at a fixed IP address, it cannot work here without opening your network up — which is the thing this design exists to avoid. That rules out Twilio’s Elastic SIP Trunking for this architecture, and it is not a criticism of Twilio; it is a different shape of product.
Nobody is paying for this placement
There are no affiliate or referral links on this page. The programs exist and the traffic would be worth money, but the advice is worth more — the moment a recommendation carries a commission you have to wonder which it is. The links carryutm_ parameters so we can see which providers people actually choose, and nothing else. If that ever changes it will say so here, in this paragraph, before anything else on the page.
Rates move constantly, so no prices are quoted below. Every card links to the provider’s own pricing page. Check it — a stale number on a page about honesty would be a poor joke.
VoIP.ms
what we runregistration ✓prepaidWhat this project is built and tested against. The worked example in the runbook is theirs.
Good
- Sub-accounts are free and separate the Pi’s credentials from your portal login.
- Many DIDs can ride one registration, which is what makes several numbers on one box cheap.
- Per-DID routing and granular POP selection.
- E911 available in most US and Canadian markets.
Less good
- Prepaid. If the balance reaches zero the phone stops ringing with no error anywhere — budget alerting matters more here than with a postpaid account.
- The portal is functional rather than pleasant, and support is ticket-based.
- No SMS thread UI; texting is an API, not an inbox.
Open an account →Their rates →
Telnyx
registration ✓bothThe developer-first option. Good documentation and a real API if you want to automate around the edges.
Good
- Credential (registration) auth as well as IP auth, so it fits the no-open-ports design.
- Documentation is genuinely good, which matters when something is wrong at 11pm.
- Modern portal, sane API, programmable messaging if SMS becomes a project.
Less good
- Identity verification before you can buy numbers — reasonable, but not a five-minute signup.
- Oriented at businesses building products, so some of the surface is irrelevant to one house.
Open an account →Their rates →
Flowroute
registration ✓postpaidA long-standing wholesale carrier. Unglamorous, stable, and it does the one thing this needs.
Good
- Registration-based trunking is supported and well documented.
- HD voice (G.722) end to end, which the wideband prompt pack is built for.
- Postpaid, so a zero balance cannot silently take the line down.
Less good
- US-focused; look elsewhere for international numbers.
- Aimed at carriers and integrators, so the onboarding assumes you know what a trunk is.
- Fewer consumer conveniences than the others.
Open an account →Their rates →
CallCentric
unverifiedbothThe long-standing choice for home Asterisk. Listed because people ask; not yet verified against this setup.
Good
- Registration by default and a long history with self-hosted Asterisk.
- Per-DID routing and E911.
Less good
- Nobody has run the runbook against it yet — see issue #5. A wrong example is worse than no example, so this card stays marked unverified until someone has.
Open an account →Their rates →
Evaluating one that is not listed
The list does not need to be exhaustive to be useful. Ask a prospective provider these, in order:
- Registration or IP auth? If they cannot do registration, stop here.
- Sub-accounts? The credential on the Pi should never be your portal login — if the Pi is compromised, you want to revoke one thing rather than everything.
- Several numbers on one registration? This is what makes a second line cheap instead of a second trunk.
- Prepaid or postpaid? Prepaid fails silently: the balance reaches zero and the phone simply stops ringing, which is indistinguishable from a quiet week. If prepaid, set up a balance alert on day one.
- E911? Decide deliberately. A house phone that cannot reach emergency services is a thing the people in that house should know about.
Found one that works? The runbook has a worked configuration, and a pull request adding a provider block is genuinely welcome — but please verify it against a live trunk first. A wrong example costs more than a missing one.