Caller → Bulk → Retell
A caller dials your Bulk DID. Our SBCs send the INVITE from one of our signaling IPs to sip.retellai.com. Retell finds the number you imported and hands the call to the inbound agent you picked.
Written on October 12, 2026.
This guide connects Bulk Solutions SIP trunks to Retell AI voice agents using Retell's elastic SIP trunking method. Inbound calls use IP-based authentication: Bulk sends the INVITE to Retell's SIP server, sip.retellai.com. Outbound calls use the username and password from a Bulk registration trunk group: you enter them when you import your number into Retell, and Retell sends its calls to sip.bulkvs.com.
Retell calls the two directions origination and termination. Each one is set up in a different place.
A caller dials your Bulk DID. Our SBCs send the INVITE from one of our signaling IPs to sip.retellai.com. Retell finds the number you imported and hands the call to the inbound agent you picked.
Your Retell agent places a call. Retell sends the INVITE to the termination URI you saved, sip.bulkvs.com. Bulk challenges with 401/407, Retell answers with your registration trunk username and password, and we finish the call on the PSTN.
sip.retellai.com is its only SIP address, and it is used for inbound only. Your outbound "termination URI" is always the Bulk side: sip.bulkvs.com.
| Item | Value |
|---|---|
| Bulk SIP proxy (termination URI) | sip.bulkvs.com, port 5060 |
| Retell SIP server (origination) | sip:sip.retellai.com |
| Transport | Retell supports TCP (its default), UDP, and TLS. Bulk accepts UDP and TCP on 5060. |
| Codec | G.711u (PCMU). Retell supports PCMU, PCMA, and G.722; Bulk supports G.711u and G.729a, so PCMU is the match. |
| DTMF | RFC2833 |
| Bulk signaling IPs | x.x.x.xFind the real IPs at Portal -> Interconnection -> Interconnection Instructions |
| Retell media ports | RTP/RTCP on UDP 10000–65535 |
| Inbound authentication | IP-based (Bulk host pointed at sip.retellai.com) |
| Outbound authentication | Digest username/password from a Bulk registration trunk group (no SIP REGISTER) |
Have these ready from both portals. Replace the examples with your own numbers and agent.
3105551000 / +13105551000Retell publishes these ranges for its SIP traffic. You do not need to add them to Bulk for this setup, but they help when you read logs or set up a firewall.
| Range | Used for |
|---|---|
18.98.16.120/30 | All regions, signaling only |
3.42.144.0/23 | All regions |
153.57.128.0/18 | All regions |
143.223.88.0/21 | Certain United States traffic |
161.115.160.0/19 | Certain United States traffic |
Send calls that arrive on your Bulk DID to your Retell agent.
In the Bulk Solutions portal:
sip.retellai.com, port 5060. Use the hostname, not one resolved IP, because Retell's addresses can change.Inbound calls are sent from one of our signaling IPs (see Portal -> Interconnection -> Interconnection Instructions) to sip.retellai.com with request URI 1NXXNXXXXXX (example 13105551000).
Retell only answers calls for numbers it knows about. Do the import in the outbound steps below; one import covers both directions. Pick your agent under the inbound setting so calls are answered.
Give Retell the Bulk registration trunk username and password. Retell sends its INVITE to sip.bulkvs.com and answers our digest challenge. No REGISTER is sent, and no Retell IP addresses need to be added to your Bulk account.
In the Bulk portal go to Interconnection → Trunk Group - Manage → SIP Registration Trunk Group → Create.
Go to Interconnection → Trunk Group - Manage and open the registration trunk group. Copy the username and password. Keep them private; they authorize calls on your account.
In Retell open Phone Numbers, click +, then Connect to your number via SIP trunking. Fill in the form like this:
| Retell field | What to enter |
|---|---|
| Phone Number | +13105551000 (E.164: plus, country code, then the number with no spaces) |
| Termination URI | sip.bulkvs.com |
| Outbound Transport | UDP or TCP |
| SIP Trunk User Name | YOUR_BULK_TRUNK_USERNAME |
| SIP Trunk Password | YOUR_BULK_TRUNK_PASSWORD |
| Nickname | Anything that helps you remember it |
Click Test SIP Connection. Retell sends a SIP OPTIONS to sip.bulkvs.com without placing a call. A 2xx answer means our proxy is reachable. Then click Save and bind your agent for inbound and outbound calls.
When Bulk replies to an INVITE with a 401 or 407 challenge, Retell resends it with the username and password you entered.
BulkVS needs every outbound INVITE from Retell to carry a custom SIP header named X-Challenge with the value 1. This header tells our switch to send the 401/407 digest challenge, so Retell can answer it with your trunk username and password. Without it, the call may be rejected before Retell ever gets asked for the password.
In the dashboard, open Make Outbound Call on your imported number. Under Custom SIP Headers, click + Add, type X-Challenge in the X-Header-Name box and 1 in the Value box, then click Call.
From the API, add the header to the call request with Retell's custom_sip_headers field (shown in the next step). Retell only allows outbound header names that start with X-, and X-Challenge follows that rule. See Retell's guide: Set custom SIP headers.
Start a test call from the dashboard, or use Retell's create phone call API with your imported number as the caller. Save this as call.json; it already includes the X-Challenge header:
{
"from_number": "+13105551000",
"to_number": "+13105551212",
"custom_sip_headers": {
"X-Challenge": "1"
}
}
Then send it to Retell:
curl -X POST https://api.retellai.com/v2/create-phone-call \
-H "Authorization: Bearer YOUR_RETELL_API_KEY" \
-H "Content-Type: application/json" \
-d @call.json
Bulk accepts destinations as 1NXXNXXXXXX@sip.bulkvs.com or NXXNXXXXXX@sip.bulkvs.com, and Retell's E.164 format works too.
The from number must be a number on your Bulk account in one of these formats. Any other caller ID format is rejected:
| Format | Example |
|---|---|
| 10 digits | 3105551000 |
| 11 digits | 13105551000 |
| E.164 | +13105551000 |
The dashboard steps above do the same thing. Use this if you set numbers up from code.
Save this as import.json. The trunk fields go at the top level of the body:
{
"phone_number": "+13105551000",
"termination_uri": "sip.bulkvs.com",
"sip_trunk_auth_username": "YOUR_BULK_TRUNK_USERNAME",
"sip_trunk_auth_password": "YOUR_BULK_TRUNK_PASSWORD",
"transport": "UDP",
"nickname": "Bulk Solutions main line",
"inbound_agents": [
{ "agent_id": "YOUR_RETELL_AGENT_ID", "weight": 1 }
],
"outbound_agents": [
{ "agent_id": "YOUR_RETELL_AGENT_ID", "weight": 1 }
]
}
Then send it to Retell:
curl -X POST https://api.retellai.com/import-phone-number \
-H "Authorization: Bearer YOUR_RETELL_API_KEY" \
-H "Content-Type: application/json" \
-d @import.json
phone_number and termination_uri are required. transport can be TCP, UDP, or TLS and defaults to TCP. Retell never shows the password again after you save it.
X-Challenge: 1 custom SIP header to the call.| Symptom | What to check |
|---|---|
| Inbound call never reaches Retell | Bulk host, trunk group, and DID assignment. Wait 2–3 minutes after changes. Confirm the host is sip.retellai.com and the DID is on the IP trunk group, not a registration trunk group. |
| Inbound reaches Retell but no agent answers | The number was not imported into Retell, or no inbound agent is bound to it. Confirm it was imported as +13105551000. If it still fails, send us the Call-ID so we can check the number format we send. |
| Test SIP Connection: 401/407 | Supply both the trunk username and password, or re-copy them from Interconnection → Trunk Group - Manage. |
| Test SIP Connection: no response | Check the termination URI is sip.bulkvs.com, port 5060, and the transport is UDP or TCP (not TLS). |
| Test passes but outbound calls fail | The test only checks OPTIONS. Bulk may require an active registration before accepting digest INVITEs on some accounts. Send the Call-ID to support so we can review the SIP ladder. |
| Outbound rejected, or Bulk never sends an auth challenge | Confirm the custom SIP header X-Challenge: 1 is set on the call: in the Make Outbound Call dialog under Custom SIP Headers, or in custom_sip_headers on the API request. |
| Outbound rejected caller ID | From number is not 10-digit, 11-digit, or +1 E.164, or it is not on your Bulk account. |
| Call connects with no audio | Confirm G.711u (PCMU) was picked, and that no firewall blocks UDP 10000–65535 toward Retell. |
If you get stuck on either side, send us the DID, trunk group name, approximate call time, and a Call-ID. We can pull the SIP ladder from our network.
Related guide: LiveKit + BulkVS · BulkVS SIP trunking
Retell documentation for custom telephony: docs.retellai.com/deploy/custom-telephony · Retell custom SIP headers