
FreePBX + UnlimCall — Flat-Rate SIP Trunk Setup
FreePBX is the most-deployed open-source PBX on the planet. UnlimCall is a flat-rate outbound SIP trunk that plugs into it in under 30 minutes. One seat price, unlimited outbound minutes, local caller ID in 33 markets.
From $5/agent/day ($99/seat/mo, US/CA)
Why FreePBX shops move off metered trunks
FreePBX itself is free. The carrier bill is not. A busy outbound floor — 20 agents averaging 5 hours of talk time a day — generates around 6,000 connected minutes daily. At a mid-market DID and per-minute rate of ~$0.009/min that is $54/day, $1,080/mo for 20 seats. At $0.013/min it is $1,560/mo. The variable swings with every campaign push and every productive rep.
UnlimCall collapses that to $99/seat/mo regardless of minutes dialled. Twenty seats: $1,980/mo, fixed. No metered exposure from high-volume campaigns.
How to connect FreePBX to UnlimCall
FreePBX supports PJSIP (recommended) and chan_sip trunks. The steps below use PJSIP, which is the default driver on FreePBX 15 and later.
- Gather your trunk details from onboarding. UnlimCall provides a SIP domain (regional), your provisioned local DID(s), and the IP address range to whitelist or credential pair for registration-based auth.
- Add a PJSIP trunk in FreePBX admin. Go to Connectivity → Trunks → Add Trunk → Add SIP (chan_pjsip) Trunk.
- Configure the General tab. Set a trunk name (e.g.
unlimcall-us). Leave the Outbound CallerID field blank here — you will set it per route.
- Configure the pjsip Settings → General tab.
- Username: your assigned trunk username (if using credential auth)
- Secret: your assigned trunk password
- Authentication: set to
Outboundfor registration-based; set toNoneif using IP-based auth and add your FreePBX server's public IP to your UnlimCall IP whitelist - SIP Server: the UnlimCall regional SIP domain supplied at onboarding
- SIP Server Port: 5060 (UDP) or 5061 (TLS)
- Contact User: your trunk username
- Configure the Codec tab. Enable G.711 µ-law (ulaw) and G.711 a-law (alaw) as primary codecs. OPUS is supported if your FreePBX version and extensions support it. Disable video codecs to reduce SDP negotiation overhead.
- Add an outbound route. Go to Connectivity → Outbound Routes → Add Outbound Route. Set the trunk sequence to your UnlimCall trunk. Add a dial pattern matching your outbound destinations — for example
1NXXNXXXXXXfor US 10-digit numbers with leading 1, orNXXNXXXXXXfor 10-digit without.
- Set outbound caller ID. In the outbound route settings, set the CallerID to the local number provisioned by UnlimCall for that market. For US/CA numbers, STIR/SHAKEN signing is applied at the trunk level — no FreePBX-side configuration required.
- Apply config and test. Click Apply Config. Place a test call from an extension. Verify the outbound caller ID on the receiving end, check codec negotiation in the FreePBX log (
/var/log/asterisk/full), and confirm audio is clean both ways. Setup time on trunk level is typically under 2 seconds from FreePBX's perspective.
chan_sip note: If your FreePBX installation uses the legacy chan_sip driver, the configuration path is Connectivity → Trunks → Add SIP (chan_sip) Trunk. Peer details follow the same structure: host=, username=, secret=, fromuser=, fromdomain=, canreinvite=no, qualify=yes. Codec configuration is in the codecs field (allow=ulaw&alaw).
What you get
| Feature | Benefit for FreePBX deployments |
|---|---|
| Flat $/agent/day | No per-minute exposure from high-volume campaigns or long-duration calls |
| Local caller ID, 33 live markets | Provisioned for your account at onboarding; improves answer rates vs. out-of-area numbers |
| STIR/SHAKEN signed (US/CA) | A-level attestation applied at trunk level; no extra FreePBX config |
| Sub-50ms edge audio | Reduces jitter artifacts at the Asterisk layer; lower talk-off and dropped audio events |
| IP or registration auth | Whitelist your PBX IP for stateless auth, or use SIP registration — both supported |
| G.711 + OPUS codec support | Match your endpoint mix without forced transcoding |
| No channel limits imposed by seat pricing | Seat count determines price, not concurrent call caps (subject to your plan terms) |
The math: flat-rate vs metered SIP trunk
A 15-agent outbound sales floor on the US/CA plan:
- UnlimCall: $99/seat/mo × 15 = $1,485/mo, fixed.
- Metered SIP (illustrative): 15 agents × ~9,000 connected min/mo × ~$0.010/min = $1,350/mo at moderate utilisation — rising to $1,800 at 12,000 min and $2,250 at 15,000 min. (Rate modelled on published competitive SIP trunk pricing; confirm current rates with your provider.)
Break-even sits around 9,900 min/agent/mo. Above that threshold — where productive outbound agents typically land — flat-rate is cheaper and is always more predictable. Run your numbers →
Frequently Asked Questions
Does UnlimCall support FreePBX's PJSIP and the older chan_sip driver? Both are supported. PJSIP is recommended for FreePBX 15 and later due to improved TLS/SRTP support and easier trunk-level debugging. chan_sip configuration is straightforward on older deployments.
Can I run multiple trunks for failover? Yes. Configure a second trunk entry pointing to the UnlimCall secondary SIP endpoint (provided at onboarding) and add it as a secondary trunk in your outbound route. FreePBX will failover automatically on 5xx responses or timeout.
What if my FreePBX is behind NAT? Set nat=yes (chan_sip) or enable the rtp_symmetric and rewrite_contact options in PJSIP. Ensure your FreePBX external IP is correctly declared in SIP settings. UnlimCall's trunk layer handles NAT traversal on the carrier side.
Is there a per-channel or concurrent call limit? Seat pricing determines the base; concurrent call capacity is set at onboarding based on your seat count. If your campaign peaks require burst headroom above the default, contact onboarding before launch.
Ready to move your FreePBX floor to flat-rate?
Drop in the trunk, set the route, dial unlimited. Pick a country → or calculate your pricing →.