Unpod Base URL:
https://unpod.ai/api/v2/platform/
Every Unpod request needs Authorization: Token <your-api-key> and an Org-Handle header.
See Authentication.Prerequisites
- An Unpod API Token and Org-Handle, plus a number on a Bridge.
- An Ultravox API key and an agent (note its Agent ID).
1. Find your Unpod number
cURL
Response (200)
List Numbers reference
Full request/response schema.
2. Create the SIP trunk
Setauth_username / auth_password - these become the SIP credentials Ultravox
authenticates with when it dials into Unpod.
cURL
Response (201)
Create Trunk reference
All request fields (
sip_url, auth_username, auth_password, transport, port, source_ips).3. Attach your number to the trunk
Map the number from step 1 (itsid) to the trunk from step 2 (its id). The response
returns the origin endpoint - the SIP domain Ultravox dials into.
cURL
Response (201)
- SIP domain - host from
origin_endpoint.ingress(e.g.sip-lb1.unpod.tel, drop thesip:). auth_username/auth_password- the creds you set in step 2.- Your number (
+918071539111) for caller ID.
Attach Numbers reference
Path params, request body, and the full origin-endpoint response.
4. Place the call from Ultravox
This is Ultravox’s own API (api.ultravox.ai, X-API-Key header). Point to at your
Unpod SIP domain and pass the Unpod credentials.
cURL
| Field | Value |
|---|---|
to | Destination as sip:<number>@<your-unpod-sip-domain> |
from | Your Unpod number (caller ID) |
username / password | Unpod auth_username / auth_password from step 2 |
firstSpeakerSettings | { "user": {} } - callee speaks first (outbound) |
callId and sends the SIP INVITE through Unpod. The agent joins when
the callee answers.
Ultravox Create Agent Call
Full request body + response (this is Ultravox’s API).
5. Debug with SIP logs
If a call is rejected, pull Ultravox’s SIP logs for thatcallId:
cURL
Ultravox SIP logs
SIP log fields for debugging rejected calls (this is Ultravox’s API).
Troubleshooting
| Status | Meaning | Fix |
|---|---|---|
403 | Auth rejected by Unpod | Re-check username / password (Unpod trunk creds from step 2) |
407 | Proxy auth required | Ensure username / password are in sip.outgoing |
480 | Destination unavailable | Verify the to number; confirm your Unpod number is active |
401 (Unpod) | Bad Unpod token | Verify Authorization: Token … on Unpod calls |
No-code version
The same flow, gathering creds in the UIs.
All platforms
Back to the integrations overview.