Connect your own carrier over SIP — credentials are shown once
Creates a trunk in pending_verification: you can configure and test it, and our team approves it before it carries calls. Requires completed business verification AND SIP trunking enabled on your organization (403 sip_trunking_not_enabled otherwise — contact support). 🔴 The digest password in connection.password appears in this response only. Send an Idempotency-Key to make a retried create return the same trunk and the same password.
Requires the admin scope. A key with less gets 403 insufficient_scope.
Authorization: Bearer tone_live_… or tone_test_…. The prefix IS the environment: a test key reaches only the sandbox, and no request field bridges the two.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/sip-trunks" \ -H "Content-Type: application/json" \ -d '{ "callerIdPolicy": "did", "codecs": [ "PCMA", "PCMU" ], "customHeaders": { "X-Account-Code": "acme-sales" }, "inboundAuth": "digest", "ipAcl": [ "49.207.12.0/24", "103.21.58.4" ], "maxConcurrent": 10, "name": "Airtel SIP — Mumbai office", "outboundAuthPassword": "K7x2QpL9vR4nT1cW", "outboundAuthUsername": "acme-out", "outboundHost": "sbc.acme-telecom.example", "outboundNumberFormat": "e164", "outboundPort": 5061, "outboundTransport": "tls", "register": false }'{ "data": { "connection": { "host": "sip.usetone.ai", "ips": [ "13.233.10.20" ], "password": "Qm9vZ2llV29vZ2llMTIzNDU2", "port": 5061, "realm": "sip.usetone.ai", "transport": "tls", "username": "t_9f2c4a7b1d3e5f60" }, "trunk": { "allowOrigination": false, "approvedAt": "2026-09-09T11:00:00Z", "callerIdPolicy": "did", "codecs": [ "PCMA", "PCMU" ], "connection": { "host": "sip.usetone.ai", "ips": [ "13.233.10.20" ], "port": 5061, "transport": "tls" }, "createdAt": "2026-09-09T10:14:22Z", "customHeaders": {}, "digestUsername": "t_9f2c4a7b1d3e5f60", "disabledReason": null, "hasOutboundPassword": true, "id": "4b7c1a02-9de5-4f31-bb07-2c1a5e9f0d43", "inboundAuth": "digest", "ipAcl": [ "49.207.12.0/24" ], "lastInboundAt": "2026-09-10T08:12:44Z", "lastOutboundAt": null, "lastProbe": { "at": "2026-09-10T08:12:44Z", "error": null, "latencyMs": 41, "method": "options", "ok": true, "sipStatus": 200 }, "maxConcurrent": 10, "name": "Airtel SIP — Mumbai office", "outboundAuthUsername": "acme-out", "outboundHost": "sbc.acme-telecom.example", "outboundNumberFormat": "e164", "outboundPort": 5061, "outboundTransport": "tls", "realm": "sip.usetone.ai", "register": false, "status": "active", "updatedAt": "2026-09-10T08:12:44Z" } }}Rename a number or bind it to an agent
Also where you switch who answers it. Send null to clear a field; omit the key to leave it alone. Switching to a BYO routing mode KEEPS the bound agent — it is ignored while BYO and restored when you switch back.
One SIP trunk
The trunk as it stands, including the last connectivity test.