Connect any SIP provider's trunk to Wixzel Voice
To run an AI voice agent on numbers from any carrier, connect the carrier's SIP trunk to Wixzel Voice: allowlist the platform_ip your trunk returns so outbound calls are accepted, and send inbound calls to its origination_uri. Your carrier keeps billing you for the line at your rates; Wixzel Voice bills the voice engine per second from a prepaid balance.
Last updated
Published
What do you need before you start?
- A SIP trunk from any carrier, with its host and, if it uses registration, a username and password.
- A phone number you own at your carrier, attached to that trunk. Wixzel Voice does not sell or port numbers.
- A Wixzel Voice API key and some prepaid credit. The minimum top-up is $5; there is no free tier.
- Wixzel Voice is in alpha and runs 5 concurrent calls per account by default, raised on request; web and app sessions count toward the same limit.
How do you create the trunk in Wixzel Voice?
The SIP host your carrier gives you for the trunk.
curl https://api.voice.wixzel.com/v1/sip-trunks \
-H "Authorization: Bearer $WIXZEL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "My carrier",
"host": "sip.carrier.example",
"transport": "udp"
}'Add username and password to the body if your carrier authenticates by credentials rather than IP. The password is encrypted at rest and never returned by the API again. The response carries platform_ip and origination_uri: the two values the next step needs.
What do you set at your carrier?
| Setting | What your carrier calls it | Value |
|---|---|---|
| Allowlist calls from Wixzel Voice | IP ACL, allowlist or authorised address | 95.216.218.102 |
| Send inbound calls to Wixzel Voice | Origination URI, or the carrier's name for it | sip:95.216.218.102:5090 |
Both values are today's: read platform_ip and origination_uri from GET /v1/sip-trunks rather than copying them from a page. Then register each number on the trunk with POST /v1/phone-numbers and give it an inbound_agent_id, so an agent answers it. The AI phone call API walkthrough has those requests, and the full setup steps for any SIP provider go through the console field by field.
What goes wrong on an unfamiliar carrier?
- An open SIP port is scanned for toll fraud within hours of appearing. Keep your carrier's own fraud controls on.
- Some markets gate outbound calling behind identity checks. An account that has not finished KYC, or destination registration where the market requires it, can hold a positive balance and still have every outbound call cleared immediately.
- A prepaid carrier balance is necessary but not sufficient. Confirm the specific destination range is enabled on the account, not just that there is credit.
Why did a call over your carrier not connect?
The failure codes most often seen on your carrier:
| failure_code | Carrier said | What it means | What to do |
|---|---|---|---|
| 1 | 404 | The carrier does not recognise the number. | Check the number format. If the carrier needs a technical dial prefix, set dial_prefix on the trunk. |
| 3 | - | The carrier has no route to this destination. | The destination is probably not enabled on your carrier account. Ask the carrier to open the route. |
| 28 | 484 | The carrier rejected the number format. | If the carrier needs a technical dial prefix, set dial_prefix on the trunk. |
| 102 | 408 | The carrier did not respond in time. | Verify the trunk host and port, and that the carrier accepts SIP from platform_ip. If the carrier shows the call as received but never answered, set send_plus to false. |
A call your carrier refused has status: "failed", a failure_code (the Q.850 cause from the carrier) and a failure_reason saying what to do, and it costs nothing. Every failure code, every refusal and how to debug a trunk are on the integrations page.
What does an AI call over your carrier cost?
Your carrier bills you for the line at your rates; Wixzel Voice bills only the voice engine, per second of actual usage, from $0.0466 per connected minute on gemini-live to $0.1851 on deepgram-agent. Every engine's price.
Frequently asked questions
- Does Wixzel Voice work with carriers that have no guide here?
- Yes, with any carrier that offers a SIP trunk with IP allowlisting (or username and password authentication) and a configurable destination for inbound calls. The two settings are the same everywhere; only the names each carrier gives them change.
- My carrier answers 408 Request Timeout. What do I change?
- Set
send_plustofalseon the trunk withPATCH /v1/sip-trunks/{id}. Many wholesale carriers cannot parse a leading+in the request URI: they accept the INVITE, fail to route it and time out. Setting adial_prefiximplies the same, because a tech prefix is matched literally and the+is dropped.
Other carriers
Elastic SIP Trunking. Allowlist the platform IP in a Termination IP ACL, and set the Origination SIP URI for inbound calls.
An IP-authenticated SIP Connection. Add the platform IP as an authorised address, pick an inbound region, and match the transport.
Zentrunk. An outbound trunk with the platform IP in its IP ACL, and a separate inbound trunk whose Primary URI points at the platform.
Programmable SIP. Add the platform IP to the trunk's ACL in the SIP Dashboard, and send inbound calls to the origination URI.
No SIP REGISTER, so a static IP is required. Add the platform IP to the location, configure Termination and Origination separately, or use network-bridge credentials.
Virtual SIP Trunking (vSIP), for Indian numbering, over TCP. The platform IP mapped to the trunk as an ACL, and the Destination URI pointed at the platform's TCP port for inbound.
A per-trunk SIP domain as the host, the platform IP in the trunk's IP ACL, and "origination URI" meaning the opposite of what it means on Twilio.
How the two halves of a trunk work, every failure code, and every carrier guide on one page.
