Create a SIP Trunk
curl --request POST \
--url https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"sip_cidr": [
"<string>"
],
"rtp_cidr": [
"<string>"
],
"name": "<string>",
"encrypted": true,
"inbound": {
"sip_auth": {
"username": "<string>",
"password": "<string>"
},
"sip_token_auth": {
"token": "<string>"
}
},
"outbound": {
"sip_addresses": [
"sip:my-sbc.example.com:5060",
"sip:my-sbc.example.com:5061;transport=tls"
],
"default_caller_id": "<string>"
}
}
'import requests
url = "https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks"
payload = {
"sip_cidr": ["<string>"],
"rtp_cidr": ["<string>"],
"name": "<string>",
"encrypted": True,
"inbound": {
"sip_auth": {
"username": "<string>",
"password": "<string>"
},
"sip_token_auth": { "token": "<string>" }
},
"outbound": {
"sip_addresses": ["sip:my-sbc.example.com:5060", "sip:my-sbc.example.com:5061;transport=tls"],
"default_caller_id": "<string>"
}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
sip_cidr: ['<string>'],
rtp_cidr: ['<string>'],
name: '<string>',
encrypted: true,
inbound: {
sip_auth: {username: '<string>', password: '<string>'},
sip_token_auth: {token: '<string>'}
},
outbound: {
sip_addresses: ['sip:my-sbc.example.com:5060', 'sip:my-sbc.example.com:5061;transport=tls'],
default_caller_id: '<string>'
}
})
};
fetch('https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sip_cidr' => [
'<string>'
],
'rtp_cidr' => [
'<string>'
],
'name' => '<string>',
'encrypted' => true,
'inbound' => [
'sip_auth' => [
'username' => '<string>',
'password' => '<string>'
],
'sip_token_auth' => [
'token' => '<string>'
]
],
'outbound' => [
'sip_addresses' => [
'sip:my-sbc.example.com:5060',
'sip:my-sbc.example.com:5061;transport=tls'
],
'default_caller_id' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks"
payload := strings.NewReader("{\n \"sip_cidr\": [\n \"<string>\"\n ],\n \"rtp_cidr\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"encrypted\": true,\n \"inbound\": {\n \"sip_auth\": {\n \"username\": \"<string>\",\n \"password\": \"<string>\"\n },\n \"sip_token_auth\": {\n \"token\": \"<string>\"\n }\n },\n \"outbound\": {\n \"sip_addresses\": [\n \"sip:my-sbc.example.com:5060\",\n \"sip:my-sbc.example.com:5061;transport=tls\"\n ],\n \"default_caller_id\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"sip_cidr\": [\n \"<string>\"\n ],\n \"rtp_cidr\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"encrypted\": true,\n \"inbound\": {\n \"sip_auth\": {\n \"username\": \"<string>\",\n \"password\": \"<string>\"\n },\n \"sip_token_auth\": {\n \"token\": \"<string>\"\n }\n },\n \"outbound\": {\n \"sip_addresses\": [\n \"sip:my-sbc.example.com:5060\",\n \"sip:my-sbc.example.com:5061;transport=tls\"\n ],\n \"default_caller_id\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sip_cidr\": [\n \"<string>\"\n ],\n \"rtp_cidr\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"encrypted\": true,\n \"inbound\": {\n \"sip_auth\": {\n \"username\": \"<string>\",\n \"password\": \"<string>\"\n },\n \"sip_token_auth\": {\n \"token\": \"<string>\"\n }\n },\n \"outbound\": {\n \"sip_addresses\": [\n \"sip:my-sbc.example.com:5060\",\n \"sip:my-sbc.example.com:5061;transport=tls\"\n ],\n \"default_caller_id\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"account_id": "<string>",
"sip_cidr": [
"<string>"
],
"rtp_cidr": [
"<string>"
],
"name": "<string>",
"encrypted": true,
"inbound": {
"hostname": "<string>",
"sip_auth": {
"enabled": true,
"username": "<string>",
"realm": "<string>"
},
"sip_token_auth": {
"enabled": true
}
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"outbound": {
"sip_addresses": [
"sip:my-sbc.example.com:5060",
"sip:my-sbc.example.com:5061;transport=tls"
],
"default_caller_id": "<string>"
}
}{
"success": true,
"error": "<string>",
"message": "<string>"
}{
"success": true,
"error": "<string>",
"message": "<string>"
}{
"success": true,
"error": "<string>",
"message": "<string>"
}{
"success": true,
"error": "<string>",
"message": "<string>"
}Inbound authentication
A trunk may use one inbound authentication scheme, or none. The two schemes are mutually exclusive, and are set through theinbound object.
| Scheme | Configure with | How callers authenticate |
|---|---|---|
| SIP digest | inbound.sip_auth = { username, password } | PolyAI issues a standard SIP digest challenge to the first INVITE. |
| SIP token | inbound.sip_token_auth = { token } | The caller sends the token in an X-PolyAI-SIP-Trunk-Token header. |
Authorizations
Path Parameters
ID of the account that owns the SIP Trunk.
Body
The owning account is taken from the URL path, not the body.
The IPv4 CIDR blocks of your SIP servers.
1 - 10 elements43The IPv4 CIDR blocks of your RTP / media servers.
1 - 10 elements43A friendly name to help identify your SIP Trunk.
1 - 255\SWhether this SIP Trunk will handle encrypted (true; SIP over TCP/TLS, media over UDP/SRTP) or unencrypted (false; SIP over UDP, media over UDP/RTP) calls. Defaults to true when omitted.
Configuration for inbound calls. sip_auth and sip_token_auth are mutually exclusive.
Show child attributes
Show child attributes
Configuration for outbound calls leaving PolyAI.
Show child attributes
Show child attributes
Response
The created SIP Trunk.
A SIP Trunk.
PolyAI-generated SIP Trunk ID, e.g. tr-0123456789abcdefghijklmn.
The PolyAI account that owns the SIP Trunk.
The IPv4 CIDR blocks of your SIP servers.
The IPv4 CIDR blocks of your RTP / media servers.
A friendly name to help identify your SIP Trunk.
Whether this SIP Trunk will handle encrypted (true; SIP over TCP/TLS, media over UDP/SRTP) or unencrypted (false; SIP over UDP, media over UDP/RTP) calls.
Configuration for inbound calls.
Show child attributes
Show child attributes
RFC 3339 timestamp of when the SIP Trunk was created.
RFC 3339 timestamp of when the SIP Trunk was last updated.
Configuration for outbound calls leaving PolyAI.
Show child attributes
Show child attributes
Was this page helpful?
curl --request POST \
--url https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"sip_cidr": [
"<string>"
],
"rtp_cidr": [
"<string>"
],
"name": "<string>",
"encrypted": true,
"inbound": {
"sip_auth": {
"username": "<string>",
"password": "<string>"
},
"sip_token_auth": {
"token": "<string>"
}
},
"outbound": {
"sip_addresses": [
"sip:my-sbc.example.com:5060",
"sip:my-sbc.example.com:5061;transport=tls"
],
"default_caller_id": "<string>"
}
}
'import requests
url = "https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks"
payload = {
"sip_cidr": ["<string>"],
"rtp_cidr": ["<string>"],
"name": "<string>",
"encrypted": True,
"inbound": {
"sip_auth": {
"username": "<string>",
"password": "<string>"
},
"sip_token_auth": { "token": "<string>" }
},
"outbound": {
"sip_addresses": ["sip:my-sbc.example.com:5060", "sip:my-sbc.example.com:5061;transport=tls"],
"default_caller_id": "<string>"
}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
sip_cidr: ['<string>'],
rtp_cidr: ['<string>'],
name: '<string>',
encrypted: true,
inbound: {
sip_auth: {username: '<string>', password: '<string>'},
sip_token_auth: {token: '<string>'}
},
outbound: {
sip_addresses: ['sip:my-sbc.example.com:5060', 'sip:my-sbc.example.com:5061;transport=tls'],
default_caller_id: '<string>'
}
})
};
fetch('https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'sip_cidr' => [
'<string>'
],
'rtp_cidr' => [
'<string>'
],
'name' => '<string>',
'encrypted' => true,
'inbound' => [
'sip_auth' => [
'username' => '<string>',
'password' => '<string>'
],
'sip_token_auth' => [
'token' => '<string>'
]
],
'outbound' => [
'sip_addresses' => [
'sip:my-sbc.example.com:5060',
'sip:my-sbc.example.com:5061;transport=tls'
],
'default_caller_id' => '<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks"
payload := strings.NewReader("{\n \"sip_cidr\": [\n \"<string>\"\n ],\n \"rtp_cidr\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"encrypted\": true,\n \"inbound\": {\n \"sip_auth\": {\n \"username\": \"<string>\",\n \"password\": \"<string>\"\n },\n \"sip_token_auth\": {\n \"token\": \"<string>\"\n }\n },\n \"outbound\": {\n \"sip_addresses\": [\n \"sip:my-sbc.example.com:5060\",\n \"sip:my-sbc.example.com:5061;transport=tls\"\n ],\n \"default_caller_id\": \"<string>\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"sip_cidr\": [\n \"<string>\"\n ],\n \"rtp_cidr\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"encrypted\": true,\n \"inbound\": {\n \"sip_auth\": {\n \"username\": \"<string>\",\n \"password\": \"<string>\"\n },\n \"sip_token_auth\": {\n \"token\": \"<string>\"\n }\n },\n \"outbound\": {\n \"sip_addresses\": [\n \"sip:my-sbc.example.com:5060\",\n \"sip:my-sbc.example.com:5061;transport=tls\"\n ],\n \"default_caller_id\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"sip_cidr\": [\n \"<string>\"\n ],\n \"rtp_cidr\": [\n \"<string>\"\n ],\n \"name\": \"<string>\",\n \"encrypted\": true,\n \"inbound\": {\n \"sip_auth\": {\n \"username\": \"<string>\",\n \"password\": \"<string>\"\n },\n \"sip_token_auth\": {\n \"token\": \"<string>\"\n }\n },\n \"outbound\": {\n \"sip_addresses\": [\n \"sip:my-sbc.example.com:5060\",\n \"sip:my-sbc.example.com:5061;transport=tls\"\n ],\n \"default_caller_id\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"account_id": "<string>",
"sip_cidr": [
"<string>"
],
"rtp_cidr": [
"<string>"
],
"name": "<string>",
"encrypted": true,
"inbound": {
"hostname": "<string>",
"sip_auth": {
"enabled": true,
"username": "<string>",
"realm": "<string>"
},
"sip_token_auth": {
"enabled": true
}
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"outbound": {
"sip_addresses": [
"sip:my-sbc.example.com:5060",
"sip:my-sbc.example.com:5061;transport=tls"
],
"default_caller_id": "<string>"
}
}{
"success": true,
"error": "<string>",
"message": "<string>"
}{
"success": true,
"error": "<string>",
"message": "<string>"
}{
"success": true,
"error": "<string>",
"message": "<string>"
}{
"success": true,
"error": "<string>",
"message": "<string>"
}
