Create an extension
POST
/
v1
/
accounts
/
{account_id}
/
telephony
/
sip-trunks
/
{trunk_id}
/
extensions
Create an extension
curl --request POST \
--url https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks/{trunk_id}/extensions \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"extension": "<string>",
"agent": {
"agent_id": "<string>",
"variant_id": "<string>"
}
}
'import requests
url = "https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks/{trunk_id}/extensions"
payload = {
"extension": "<string>",
"agent": {
"agent_id": "<string>",
"variant_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({extension: '<string>', agent: {agent_id: '<string>', variant_id: '<string>'}})
};
fetch('https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks/{trunk_id}/extensions', 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/{trunk_id}/extensions",
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([
'extension' => '<string>',
'agent' => [
'agent_id' => '<string>',
'variant_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/{trunk_id}/extensions"
payload := strings.NewReader("{\n \"extension\": \"<string>\",\n \"agent\": {\n \"agent_id\": \"<string>\",\n \"variant_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/{trunk_id}/extensions")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"extension\": \"<string>\",\n \"agent\": {\n \"agent_id\": \"<string>\",\n \"variant_id\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks/{trunk_id}/extensions")
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 \"extension\": \"<string>\",\n \"agent\": {\n \"agent_id\": \"<string>\",\n \"variant_id\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"extension": "<string>",
"agent": {
"agent_id": "<string>",
"client_env": "sandbox",
"variant_id": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"success": true,
"error": "<string>",
"message": "<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>"
}The
extension is the dialed number or extension sent in the Request URI of the SIP INVITE to PolyAI — it selects which agent the call routes to. In the below example, the extension would be 1000:
INVITE sip:1000@sbc.sip.eu.poly.ai SIP/2.0
Authorizations
Path Parameters
ID of the account that owns the SIP Trunk.
The SIP Trunk ID.
Body
application/json
Response
The created extension.
An Extension binds a dialed number on a trunk to a PolyAI agent.
The dialed number or extension.
The PolyAI agent an extension routes calls to.
Show child attributes
Show child attributes
RFC 3339 timestamp of when the extension was created.
RFC 3339 timestamp of when the extension was last updated.
Last modified on July 30, 2026
Was this page helpful?
⌘I
Create an extension
curl --request POST \
--url https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks/{trunk_id}/extensions \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"extension": "<string>",
"agent": {
"agent_id": "<string>",
"variant_id": "<string>"
}
}
'import requests
url = "https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks/{trunk_id}/extensions"
payload = {
"extension": "<string>",
"agent": {
"agent_id": "<string>",
"variant_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({extension: '<string>', agent: {agent_id: '<string>', variant_id: '<string>'}})
};
fetch('https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks/{trunk_id}/extensions', 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/{trunk_id}/extensions",
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([
'extension' => '<string>',
'agent' => [
'agent_id' => '<string>',
'variant_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/{trunk_id}/extensions"
payload := strings.NewReader("{\n \"extension\": \"<string>\",\n \"agent\": {\n \"agent_id\": \"<string>\",\n \"variant_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/{trunk_id}/extensions")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"extension\": \"<string>\",\n \"agent\": {\n \"agent_id\": \"<string>\",\n \"variant_id\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.us.poly.ai/v1/accounts/{account_id}/telephony/sip-trunks/{trunk_id}/extensions")
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 \"extension\": \"<string>\",\n \"agent\": {\n \"agent_id\": \"<string>\",\n \"variant_id\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_body{
"extension": "<string>",
"agent": {
"agent_id": "<string>",
"client_env": "sandbox",
"variant_id": "<string>"
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"success": true,
"error": "<string>",
"message": "<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>"
}
