Assistants
Replace assistant
Save an assistant’s whole configuration document at once, replacing the stored one.
PUT
/
assistant
/
{id}
Replace assistant
curl --request PUT \
--url https://api.verbeo.ai/v1/assistant/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"agent_name": "<string>",
"agent_type": "<string>",
"config": {}
}
'import requests
url = "https://api.verbeo.ai/v1/assistant/{id}"
payload = {
"agent_name": "<string>",
"agent_type": "<string>",
"config": {}
}
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({agent_name: '<string>', agent_type: '<string>', config: {}})
};
fetch('https://api.verbeo.ai/v1/assistant/{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/assistant/{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([
'agent_name' => '<string>',
'agent_type' => '<string>',
'config' => [
]
]),
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/assistant/{id}"
payload := strings.NewReader("{\n \"agent_name\": \"<string>\",\n \"agent_type\": \"<string>\",\n \"config\": {}\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/assistant/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"agent_name\": \"<string>\",\n \"agent_type\": \"<string>\",\n \"config\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.verbeo.ai/v1/assistant/{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 \"agent_name\": \"<string>\",\n \"agent_type\": \"<string>\",\n \"config\": {}\n}"
response = http.request(request)
puts response.read_bodySaves an assistant with a configuration document you send whole: the stored
config is replaced, not merged into. Use it when you hold the complete document, for example one you read, edited in full and are saving back. To change part of an assistant, update it with PATCH instead.
agent_name and agent_type are optional here too, and anything you leave out of the body is untouched. Only a config you send replaces the stored one.
Path parameters
string
required
UUID of the assistant.
Body
At least one field is required.string
New display name, 1–255 characters.
string
New prompt style.
object
The whole configuration document. It replaces the stored one: missing settings are filled in with their defaults, so a key you leave out is reset, not kept. Native tools are not switched on for you, as they are on create: a tool your document leaves out of both
nativeTools and toolIds is dropped, end_call included. One exception: a document without kbStoreIds keeps the assistant’s knowledge-base links.{"config": {"systemPrompt": "…"}} resets everything else in config to its default and drops the assistant’s tools, end_call included, so it can no longer hang up. To change one setting, send the same body with PATCH, or read the assistant, edit its config and send all of it back here.Request
curl -X PUT "https://api.verbeo.ai/v1/assistant/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "agent_name": "Customer Support (EU)" }'
const id = "550e8400-e29b-41d4-a716-446655440000";
// Read, edit, send the whole document back.
const current = await fetch(`https://api.verbeo.ai/v1/assistant/${id}`, {
headers: { Authorization: `Bearer ${process.env.VERBEO_API_KEY}` },
}).then((r) => r.json());
const config = current.data.config;
config.settings.maxCallDuration = 5;
const res = await fetch(`https://api.verbeo.ai/v1/assistant/${id}`, {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.VERBEO_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ config }),
});
const { data: assistant } = await res.json();
import os, requests
assistant_id = "550e8400-e29b-41d4-a716-446655440000"
headers = {"Authorization": f"Bearer {os.environ['VERBEO_API_KEY']}"}
current = requests.get(
f"https://api.verbeo.ai/v1/assistant/{assistant_id}", headers=headers
).json()["data"]
config = current["config"]
config["settings"]["maxCallDuration"] = 5
assistant = requests.put(
f"https://api.verbeo.ai/v1/assistant/{assistant_id}",
headers=headers,
json={"config": config},
).json()["data"]
Response
200 OK with the updated assistant, its configuration completed and its toolIds re-checked.
{
"success": true,
"data": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"agent_name": "Customer Support (EU)",
"agent_type": "Single Prompt",
"config": { "…": "the stored document" },
"updated_at": "2026-01-23T09:12:00.000Z"
}
}
Native tools
nativeTools entries are three-state here as well. A tool your document does not mention keeps its row and stays switched on or off as it was, as long as its id stays in toolIds. Since the document replaces toolIds too, send the assistant’s own toolIds back with it. To switch one tool on or off without restating the rest, use PATCH.
Errors
| Code | Status | When |
|---|---|---|
VALIDATION_FAILED | 422 | An empty body, a blank agent_name, an unsupported voice.voiceId, a knowledge-base id from another workspace, or an enabled static transfer with no staticDestination. |
NOT_FOUND | 404 | No such assistant, or it belongs to another workspace. |
Was this page helpful?
⌘I
Replace assistant
curl --request PUT \
--url https://api.verbeo.ai/v1/assistant/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"agent_name": "<string>",
"agent_type": "<string>",
"config": {}
}
'import requests
url = "https://api.verbeo.ai/v1/assistant/{id}"
payload = {
"agent_name": "<string>",
"agent_type": "<string>",
"config": {}
}
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({agent_name: '<string>', agent_type: '<string>', config: {}})
};
fetch('https://api.verbeo.ai/v1/assistant/{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/assistant/{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([
'agent_name' => '<string>',
'agent_type' => '<string>',
'config' => [
]
]),
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/assistant/{id}"
payload := strings.NewReader("{\n \"agent_name\": \"<string>\",\n \"agent_type\": \"<string>\",\n \"config\": {}\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/assistant/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"agent_name\": \"<string>\",\n \"agent_type\": \"<string>\",\n \"config\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.verbeo.ai/v1/assistant/{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 \"agent_name\": \"<string>\",\n \"agent_type\": \"<string>\",\n \"config\": {}\n}"
response = http.request(request)
puts response.read_body