Skip to main content
The programmatic path for the Unpod side: create a SIP trunk pointed at your Daily SIP dial-in address and attach your number. The trunk’s origin endpoint is what Daily uses to reach Unpod - see the Dashboard guide for the Daily-side setup.
Base URL: https://unpod.ai/api/v2/platform/ Every request needs Authorization: Token <your-api-key> and an Org-Handle header. See Authentication.

Prerequisites

  • An Unpod API Token and Org-Handle.
  • A number in your org (we’ll fetch its id below).
  • A Daily room with SIP dial-in enabled - note its sip_uri (sip:<endpoint>@<your-subdomain>.sip.daily.co).

1. Find your number

cURL
curl https://unpod.ai/api/v2/platform/telephony/numbers/ \
  -H "Authorization: Token $UNPOD_TOKEN" \
  -H "Org-Handle: $ORG_HANDLE"
Response (200)
{
  "status_code": 200,
  "message": "Telephony numbers fetched successfully.",
  "data": [
    { "id": 501, "number": "+15551234567", "state": "NOT_ASSIGNED", "active": true }
  ]
}

List Numbers reference

Full request/response schema.

2. Create the SIP trunk to Daily

Point the trunk’s sip_url at your Daily room’s sip_uri. One trunk carries both inbound and outbound.
cURL
curl -X POST https://unpod.ai/api/v2/platform/telephony/trunks/ \
  -H "Authorization: Token $UNPOD_TOKEN" \
  -H "Org-Handle: $ORG_HANDLE" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Daily trunk",
    "sip_url": "sip:endpoint@your-subdomain.sip.daily.co",
    "transport": "udp",
    "port": "5060"
  }'
Response (201)
{
  "status_code": 201,
  "message": "Trunk created successfully.",
  "data": { "id": 21, "name": "Daily trunk", "sip_url": "sip:endpoint@your-subdomain.sip.daily.co", "transport": "udp", "port": "5060", "active": true }
}

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 (its id) to the trunk from step 2 (its id). The response returns the origin endpoint - the address + creds Daily uses to reach Unpod.
cURL
curl -X POST https://unpod.ai/api/v2/platform/telephony/trunks/21/attach-numbers/ \
  -H "Authorization: Token $UNPOD_TOKEN" \
  -H "Org-Handle: $ORG_HANDLE" \
  -H "Content-Type: application/json" \
  -d '{ "number_ids": [501] }'
Response (201)
{
  "status_code": 201,
  "message": "Numbers mapped to trunk.",
  "data": {
    "trunk_id": 21,
    "origin_endpoint": {
      "ingress": "sip:sip-lb1.unpod.tel",
      "dids": ["+15551234567"],
      "accepted_source_ips": [],
      "region": "ap-south"
    }
  }
}

Attach Numbers reference

Path params, request body, and the full origin-endpoint response.

Configure the Daily side

Enable SIP dial-in on your Daily room. This is Daily’s own API (api.daily.co, Authorization: Bearer with your Daily key). Run this first - the sip_uri it returns is exactly what you put in the trunk’s sip_url in step 2.

4. Enable SIP dial-in on the room

cURL
curl -X POST https://api.daily.co/v1/rooms/your-room-name \
  -H "Authorization: Bearer $DAILY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "properties": {
      "sip": {
        "sip_mode": "dial-in",
        "display_name": "SIP Participant",
        "num_endpoints": 1,
        "codecs": { "audio": ["OPUS"] }
      }
    }
  }'
Response
{
  "config": {
    "sip_uri": { "endpoint": "sip:123456780@example.sip.daily.co" },
    "sip": { "sip_mode": "dial-in", "display_name": "SIP Participant" }
  }
}
config.sip_uri.endpoint is the address you point the Unpod trunk at (the sip_url in step 2). Route that room to your agent so calls from Unpod connect to it.

Daily SIP dial-in docs

Full room sip properties + sip_uri response (this is Daily’s API).

Troubleshooting

StatusMeaningFix
400 on /trunks/Missing sip_urlSend your Daily room sip_uri
400 on attachNumber not in orgUse a valid id from GET /numbers/
401Bad Unpod tokenVerify Authorization: Token …
403Wrong orgVerify the Org-Handle header

No-code version

The same flow in the Studio UI.

All platforms

Back to the integrations overview.