Discover SIP Endpoint
curl --request POST \
--url https://api.bland.ai/v1/sip/discover \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"host": "<string>",
"port": 123,
"transport": "<string>"
}
'import requests
url = "https://api.bland.ai/v1/sip/discover"
payload = {
"host": "<string>",
"port": 123,
"transport": "<string>"
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({host: '<string>', port: 123, transport: '<string>'})
};
fetch('https://api.bland.ai/v1/sip/discover', 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.bland.ai/v1/sip/discover",
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([
'host' => '<string>',
'port' => 123,
'transport' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$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.bland.ai/v1/sip/discover"
payload := strings.NewReader("{\n \"host\": \"<string>\",\n \"port\": 123,\n \"transport\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("authorization", "<authorization>")
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.bland.ai/v1/sip/discover")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"host\": \"<string>\",\n \"port\": 123,\n \"transport\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/sip/discover")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"host\": \"<string>\",\n \"port\": 123,\n \"transport\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"discovery_id": "disc_abc123",
"status": "completed",
"host": "sip.example.com",
"resolved_addresses": ["203.0.113.10"],
"srv_records": [],
"attempts": [
{
"port": 5060,
"transport": "udp",
"response_time_ms": 45,
"response_code": 200,
"user_agent": "Asterisk PBX 18.0.0"
}
],
"recommended": {
"port": 5060,
"transport": "udp",
"detected_system": "Asterisk",
"codecs": ["PCMU", "PCMA", "G.722"],
"methods": ["INVITE", "ACK", "BYE", "CANCEL", "OPTIONS"]
},
"started_at": "2026-03-09T12:00:00Z",
"completed_at": "2026-03-09T12:00:05Z"
},
"errors": null
}
SIP Trunks
Discover SIP Endpoint
Auto-discover optimal SIP connection settings by probing your endpoint with DNS resolution and SIP OPTIONS.
POST
/
v1
/
sip
/
discover
Discover SIP Endpoint
curl --request POST \
--url https://api.bland.ai/v1/sip/discover \
--header 'Content-Type: application/json' \
--header 'authorization: <authorization>' \
--data '
{
"host": "<string>",
"port": 123,
"transport": "<string>"
}
'import requests
url = "https://api.bland.ai/v1/sip/discover"
payload = {
"host": "<string>",
"port": 123,
"transport": "<string>"
}
headers = {
"authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({host: '<string>', port: 123, transport: '<string>'})
};
fetch('https://api.bland.ai/v1/sip/discover', 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.bland.ai/v1/sip/discover",
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([
'host' => '<string>',
'port' => 123,
'transport' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"authorization: <authorization>"
],
]);
$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.bland.ai/v1/sip/discover"
payload := strings.NewReader("{\n \"host\": \"<string>\",\n \"port\": 123,\n \"transport\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("authorization", "<authorization>")
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.bland.ai/v1/sip/discover")
.header("authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"host\": \"<string>\",\n \"port\": 123,\n \"transport\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bland.ai/v1/sip/discover")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"host\": \"<string>\",\n \"port\": 123,\n \"transport\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"discovery_id": "disc_abc123",
"status": "completed",
"host": "sip.example.com",
"resolved_addresses": ["203.0.113.10"],
"srv_records": [],
"attempts": [
{
"port": 5060,
"transport": "udp",
"response_time_ms": 45,
"response_code": 200,
"user_agent": "Asterisk PBX 18.0.0"
}
],
"recommended": {
"port": 5060,
"transport": "udp",
"detected_system": "Asterisk",
"codecs": ["PCMU", "PCMA", "G.722"],
"methods": ["INVITE", "ACK", "BYE", "CANCEL", "OPTIONS"]
},
"started_at": "2026-03-09T12:00:00Z",
"completed_at": "2026-03-09T12:00:05Z"
},
"errors": null
}
Headers
string
required
Your API key for authentication.
Body
string
required
The hostname or IP address of your SIP endpoint.
number
Specific port to probe. If omitted, ports 5060, 5061, and 5080 are tested.
string
Specific transport to test:
"udp", "tcp", or "tls". If omitted, both UDP and TCP are tested.Response
string
Unique identifier for this discovery session.
string
Discovery status:
"running", "completed", or "failed".string
The host that was probed.
array
IP addresses resolved from DNS A/AAAA lookups.
array
SRV records found for
_sip._udp, _sip._tcp, _sips._tcp.array
Details of each probe attempt including port, transport, response time, response code, and user agent.
object
Recommended connection settings:
port, transport, user_agent, detected_system (e.g., “Asterisk”, “FreeSWITCH”, “Kamailio”), codecs, and methods.Example Request
curl -X POST https://api.bland.ai/v1/sip/discover \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"host": "sip.example.com"
}'
{
"data": {
"discovery_id": "disc_abc123",
"status": "completed",
"host": "sip.example.com",
"resolved_addresses": ["203.0.113.10"],
"srv_records": [],
"attempts": [
{
"port": 5060,
"transport": "udp",
"response_time_ms": 45,
"response_code": 200,
"user_agent": "Asterisk PBX 18.0.0"
}
],
"recommended": {
"port": 5060,
"transport": "udp",
"detected_system": "Asterisk",
"codecs": ["PCMU", "PCMA", "G.722"],
"methods": ["INVITE", "ACK", "BYE", "CANCEL", "OPTIONS"]
},
"started_at": "2026-03-09T12:00:00Z",
"completed_at": "2026-03-09T12:00:05Z"
},
"errors": null
}
Docs for agents: llms.txt
Was this page helpful?
⌘I