LiveKit → Bulk
- Create the LiveKit outbound trunk with Bulk username and password.
- Call a number you control with
CreateSIPParticipant. - If Bulk returns 407 and then the call connects, digest auth is working.
- Confirm caller ID is your Bulk DID.
Username and password trunks with LiveKit Cloud.
Bulk Solutions registration trunks use a username and password. LiveKit Cloud can use those credentials for outbound digest authentication. It cannot send a SIP REGISTER, so Bulk inbound registration trunks are not compatible with LiveKit Cloud. Use IP Based Authentication for inbound.
Official LiveKit telephony support lists SIP REGISTER as not supported. Digest authentication on INVITE is supported.
| Method | Bulk Solutions | LiveKit Cloud |
|---|---|---|
SIP REGISTER every 25 seconds |
Required for inbound registration trunks | Not supported |
| Username / password on outbound INVITE (digest) | Supported on a registration trunk group | Supported via authUsername / authPassword |
| IP-based authentication | Supported | Supported — see the IP authentication guide |
REGISTER, so those inbound calls have nowhere to land.
These Bulk steps work for a PBX or SBC that can register. They do not work when LiveKit is the only SIP endpoint.
In the Bulk portal go to Interconnection → Trunk Group - Manage → SIP Registration Trunk Group → Create. Open the trunk group to view the username and password.
Bulk expects the customer system to register to our SBCs every 25 seconds or less. LiveKit Cloud does not send REGISTER and is not a SIP registrar. Do not point a Bulk inbound registration trunk at YOURSUBDOMAIN.sip.livekit.cloud.
For LiveKit inbound, use an IP-authenticated host and trunk group and send the DID to your LiveKit SIP URI. Full steps are in the IP-based LiveKit guide.
If you already have a PBX that registers to Bulk, keep that registration for inbound and hairpin or transfer the call into LiveKit from the PBX. LiveKit still needs an inbound trunk and dispatch rule on its side.
Use the Bulk registration trunk username and password on a LiveKit outbound trunk. LiveKit sends an INVITE to sip.bulkvs.com and answers the digest challenge. No REGISTER is sent.
Go to Interconnection → Trunk Group - Manage and select the registration trunk group. Copy the username and password.
In LiveKit Cloud go to Telephony → SIP trunks → Create new trunk → Outbound:
{
"name": "Bulk registration outbound",
"address": "sip.bulkvs.com",
"numbers": [
"+13109060901"
],
"authUsername": "YOUR_BULK_TRUNK_USERNAME",
"authPassword": "YOUR_BULK_TRUNK_PASSWORD"
}
Replace the placeholders with the Bulk trunk credentials. Address must be sip.bulkvs.com, not a single SBC IP.
{
"sip_trunk_id": "ST_xxxxxxxxxxxx",
"sip_call_to": "+13105551212",
"room_name": "outbound-test",
"participant_identity": "bulk-test",
"wait_until_answered": true
}
Send destinations as 13109060901@sip.bulkvs.com or the 10-digit form. LiveKit will attach digest credentials from the trunk.
| Item | Value |
|---|---|
| SIP proxy / SRV | sip.bulkvs.com |
| SIP port | 5060 |
| Bulk signaling IPs | x.x.x.x - find IPs in our portal -> interconnection guide -> IP Based Authentication |
| Codecs | G.711u, G.729a, T.38 pass-through where available |
| DTMF | RFC2833 and inband (G.711u) |
Caller ID must be a number on the Bulk account in one of these formats or the call is rejected:
| Format | Example |
|---|---|
| 10 digits | 3109060901 |
| 11 digits | 13109060901 |
| E.164 | +13109060901 |
| Purpose | Send the call to |
|---|---|
| Emergency | 911@sip.bulkvs.com |
| Verify the 911 database address | 922@sip.bulkvs.com or 933@sip.bulkvs.com |
CreateSIPParticipant.| Symptom | What to check |
|---|---|
| Inbound never arrives at LiveKit | The DID is on a registration trunk and nothing is registering. Move the DID to an IP trunk group pointed at the LiveKit SIP URI. |
| LiveKit or a PBX gets SIP 405 on REGISTER | Expected. LiveKit does not accept or send REGISTER. |
| Outbound 407 looping or 403 | Wrong username/password on the LiveKit outbound trunk, or Bulk requires an active registration before digest INVITEs are accepted. |
| Outbound rejected caller ID | From number is not 10-digit, 11-digit, or +1 E.164. |
| Asterisk note from Bulk guide | defaultexpiry=25 applies only to systems that actually REGISTER. It has no effect in LiveKit. |
Send the DID, LiveKit SIP URI, trunk group name, approximate call time, and Call-ID. We can pull the SIP ladder.
IP-based LiveKit guide: livekit-ipbased-howto.php
LiveKit SIP feature list: docs.livekit.io/telephony