Phone Numbers
Update phone number
Change the assistants a number answers and dials with, its dial rate, or its inbound call webhook. Send only the fields you are changing.
PUT
/
phone-number
/
{id}
Update phone number
curl --request PUT \
--url https://api.verbeo.ai/v1/phone-number/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inbound_agent_id": {},
"outbound_agent_id": {},
"max_cps": 123,
"inbound_webhook_url": {}
}
'import requests
url = "https://api.verbeo.ai/v1/phone-number/{id}"
payload = {
"inbound_agent_id": {},
"outbound_agent_id": {},
"max_cps": 123,
"inbound_webhook_url": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
inbound_agent_id: {},
outbound_agent_id: {},
max_cps: 123,
inbound_webhook_url: {}
})
};
fetch('https://api.verbeo.ai/v1/phone-number/{id}', 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.verbeo.ai/v1/phone-number/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'inbound_agent_id' => [
],
'outbound_agent_id' => [
],
'max_cps' => 123,
'inbound_webhook_url' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.verbeo.ai/v1/phone-number/{id}"
payload := strings.NewReader("{\n \"inbound_agent_id\": {},\n \"outbound_agent_id\": {},\n \"max_cps\": 123,\n \"inbound_webhook_url\": {}\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.put("https://api.verbeo.ai/v1/phone-number/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inbound_agent_id\": {},\n \"outbound_agent_id\": {},\n \"max_cps\": 123,\n \"inbound_webhook_url\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.verbeo.ai/v1/phone-number/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"inbound_agent_id\": {},\n \"outbound_agent_id\": {},\n \"max_cps\": 123,\n \"inbound_webhook_url\": {}\n}"
response = http.request(request)
puts response.read_bodyUpdates a phone number in place. Every field is optional and anything you leave out is untouched.
The number itself, its label (
nickname), its carrier and its credentials cannot be changed: delete the number and add it again. Fields not listed below are ignored.
Path parameters
string
required
UUID of the phone number.
Body
At least one field is required.string | null
UUID of the assistant that answers calls to this number.
null unassigns it: calls to the number are no longer answered.string | null
UUID of the assistant that places calls from this number when a call names none.
null unassigns it.number
How many calls per second Verbeo dials from this number, at least
0.1. Keep it at or below what your carrier allows on the trunk.string | null
The inbound call webhook: an
https:// URL, up to 2,048 characters. null or an empty string switches it off. Only a SIP-trunk number (provider: "livekit_sip") has one.Request
curl -X PUT "https://api.verbeo.ai/v1/phone-number/7d9f3b52-4c1e-4a8e-9b1a-2f6c0d4e8a11" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"outbound_agent_id": "550e8400-e29b-41d4-a716-446655440000",
"inbound_webhook_url": "https://api.example.com/verbeo/inbound"
}'
const id = "7d9f3b52-4c1e-4a8e-9b1a-2f6c0d4e8a11";
const res = await fetch(`https://api.verbeo.ai/v1/phone-number/${id}`, {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.VERBEO_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
outbound_agent_id: "550e8400-e29b-41d4-a716-446655440000",
inbound_webhook_url: "https://api.example.com/verbeo/inbound",
}),
});
const { data: number } = await res.json();
import os, requests
number_id = "7d9f3b52-4c1e-4a8e-9b1a-2f6c0d4e8a11"
number = requests.put(
f"https://api.verbeo.ai/v1/phone-number/{number_id}",
headers={"Authorization": f"Bearer {os.environ['VERBEO_API_KEY']}"},
json={
"outbound_agent_id": "550e8400-e29b-41d4-a716-446655440000",
"inbound_webhook_url": "https://api.example.com/verbeo/inbound",
},
).json()["data"]
Response
200 OK with the updated phone number object.
{
"success": true,
"data": {
"id": "7d9f3b52-4c1e-4a8e-9b1a-2f6c0d4e8a11",
"phone_number": "+14155550123",
"provider": "livekit_sip",
"max_cps": 1,
"inbound_agent_id": "550e8400-e29b-41d4-a716-446655440000",
"outbound_agent_id": "550e8400-e29b-41d4-a716-446655440000",
"inbound_webhook_url": "https://api.example.com/verbeo/inbound",
"updated_at": "2026-01-23T09:12:00.456789+00:00",
"inbound_agent_name": "Customer Support",
"outbound_agent_name": "Customer Support",
"…": "the rest of the object"
}
}
Errors
| Code | Status | When |
|---|---|---|
VALIDATION_FAILED | 422 | An empty body; an assistant id that is not an assistant of your workspace; max_cps below 0.1; a webhook URL that is not https://; or a webhook URL on a number imported from Twilio. |
NOT_FOUND | 404 | No such phone number, or it belongs to another workspace. |
Was this page helpful?
⌘I
Update phone number
curl --request PUT \
--url https://api.verbeo.ai/v1/phone-number/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"inbound_agent_id": {},
"outbound_agent_id": {},
"max_cps": 123,
"inbound_webhook_url": {}
}
'import requests
url = "https://api.verbeo.ai/v1/phone-number/{id}"
payload = {
"inbound_agent_id": {},
"outbound_agent_id": {},
"max_cps": 123,
"inbound_webhook_url": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
inbound_agent_id: {},
outbound_agent_id: {},
max_cps: 123,
inbound_webhook_url: {}
})
};
fetch('https://api.verbeo.ai/v1/phone-number/{id}', 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.verbeo.ai/v1/phone-number/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'inbound_agent_id' => [
],
'outbound_agent_id' => [
],
'max_cps' => 123,
'inbound_webhook_url' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.verbeo.ai/v1/phone-number/{id}"
payload := strings.NewReader("{\n \"inbound_agent_id\": {},\n \"outbound_agent_id\": {},\n \"max_cps\": 123,\n \"inbound_webhook_url\": {}\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.put("https://api.verbeo.ai/v1/phone-number/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"inbound_agent_id\": {},\n \"outbound_agent_id\": {},\n \"max_cps\": 123,\n \"inbound_webhook_url\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.verbeo.ai/v1/phone-number/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"inbound_agent_id\": {},\n \"outbound_agent_id\": {},\n \"max_cps\": 123,\n \"inbound_webhook_url\": {}\n}"
response = http.request(request)
puts response.read_body