Carrier list
At/dashboard/carriers, the list loads GET /api/v1/carriers and the Exotel integration summary in parallel. It renders a DataTable with these columns:
| Column | Source |
|---|---|
| Name | carrier.name |
| SIP Address | carrier.sip_address |
| Auth | Password and/or IP badges derived from auth_password / allowed_addresses |
| DIDs | count of carrier.dids |
| CPS | outbound_cps/s · burst outbound_burst |
| LiveKit | sync status badge (synced / error / pending) |
| Last Synced | relative time of lk_last_synced_at |
/dashboard/carriers/:id.
Create a carrier
/dashboard/carriers/create collects three sections and POSTs to /api/v1/carriers:
- Connection Settings — Name, SIP Address (validated against a host[:port] pattern), Transport (
auto/tcp/udp/tls), Destination Country. - Authentication — Username, Password, Allowed IPs (tag input).
- Rate Limiting — Outbound CPS (0.1–100), Outbound Burst (1–1000), Outbound Channels (1–500).
A banner notes that LiveKit trunks are created automatically after saving. On success the page navigates to the new carrier’s detail view.
Carrier detail
/dashboard/carriers/:id loads the carrier plus the bot list (for DID assignment). It has view and edit modes and these actions: Guide, Sync to LiveKit (POST /carriers/{id}/sync), Edit, and Delete (DELETE /carriers/{id}, which also deletes its DIDs).
A sync banner shows the current lk_sync_status and, on error, hovers lk_sync_error.
Edit mode adds inbound auth controls beyond create:
- Inbound Authentication —
credentials(same as outbound) orip(IP allowlist, no credentials). IP mode requires at least one allowed IP or the save is rejected. - Inbound IP Allowlist — required in IP mode, optional in credentials mode.
- Password field stays blank and only updates when typed (avoids round-tripping the masked value).
/api/v1/carriers/{id}.
Phone numbers (DIDs)
The DIDs table lists Number, Label, Direction badge, and Assigned Bot, with edit/remove per row. DID operations call:- Add:
POST /carriers/{id}/dids - Edit:
PUT /carriers/{id}/dids/{did_id} - Remove:
DELETE /carriers/{id}/dids/{did_id}
Add/Edit DID modal
The DID modal collects:| Field | Notes |
|---|---|
| Phone Number | E.164 (+14155551234) or carrier format (09XXXXXXXXX); disabled when editing |
| Label | optional |
| Direction | card toggle: Both / Inbound / Outbound |
| Assign Bot | shown only for Both or Inbound; bot answers when the DID rings |
Carrier guide
The carrier guide is an in-app help modal opened from the list and detail pages. It explains connection settings, two-direction authentication, pacing controls (CPS / Burst / Channels), DID directions, inbound and outbound call flows, the sync status indicator, and quick recipes for Plivo, Twilio, and Exotel.The guide notes that Plivo typically needs IP-allowlist inbound auth (it does not send digest credentials by default), while Twilio works with shared credentials. Exotel is handled by its own built-in integration, not this SIP carriers page.
Related docs
Exotel
The separate Exotel integration page.
Fleet
Worker pool health and capacity.
Carriers and trunks
How the CXB API syncs carriers to LiveKit trunks.
SIP dialout
Outbound dialing path and trunk selection.