curl --request POST \
--url https://api.verbose.cx/v1/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Booking bot",
"channel": "voice",
"system_prompt": "You book callbacks for Acme.",
"greeting": "Hi, this is Acme!",
"voice_id": "voice_abc"
}
'import requests
url = "https://api.verbose.cx/v1/agents"
payload = {
"name": "Booking bot",
"channel": "voice",
"system_prompt": "You book callbacks for Acme.",
"greeting": "Hi, this is Acme!",
"voice_id": "voice_abc"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Booking bot',
channel: 'voice',
system_prompt: 'You book callbacks for Acme.',
greeting: 'Hi, this is Acme!',
voice_id: 'voice_abc'
})
};
fetch('https://api.verbose.cx/v1/agents', 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.verbose.cx/v1/agents",
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([
'name' => 'Booking bot',
'channel' => 'voice',
'system_prompt' => 'You book callbacks for Acme.',
'greeting' => 'Hi, this is Acme!',
'voice_id' => 'voice_abc'
]),
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.verbose.cx/v1/agents"
payload := strings.NewReader("{\n \"name\": \"Booking bot\",\n \"channel\": \"voice\",\n \"system_prompt\": \"You book callbacks for Acme.\",\n \"greeting\": \"Hi, this is Acme!\",\n \"voice_id\": \"voice_abc\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.verbose.cx/v1/agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Booking bot\",\n \"channel\": \"voice\",\n \"system_prompt\": \"You book callbacks for Acme.\",\n \"greeting\": \"Hi, this is Acme!\",\n \"voice_id\": \"voice_abc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.verbose.cx/v1/agents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Booking bot\",\n \"channel\": \"voice\",\n \"system_prompt\": \"You book callbacks for Acme.\",\n \"greeting\": \"Hi, this is Acme!\",\n \"voice_id\": \"voice_abc\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"agent": {
"id": "a9c1f0d2-...",
"name": "Debt-relief qualifier",
"channel": "sms",
"status": "active",
"system_prompt": "<string>",
"goal": "<string>",
"greeting": "<string>",
"max_turns": 20,
"handoff_keywords": [
"<string>"
],
"voice_id": "<string>",
"voice": {
"voice_id": "11labs-Jenny",
"language": "en-US",
"end_call": true,
"speed": 1,
"temperature": 1,
"volume": 1,
"responsiveness": 1,
"interruption_sensitivity": 1,
"enable_backchannel": false,
"backchannel_frequency": 0.8,
"reminder_trigger_ms": 10000,
"end_call_after_silence_ms": 600000,
"max_call_duration_ms": 3600000,
"ambient_sound": "call-center",
"boosted_keywords": [
"Astrasend",
"tadalafil"
],
"model_temperature": 0.7,
"voicemail_message": "<string>"
},
"sms": {
"tone": "friendly",
"creativity": "medium",
"guardrails": [
"Never quote a price",
"Don't give legal advice"
],
"max_length": 320,
"knowledge": "<string>",
"handoff_on_low_confidence": true,
"handoff_after_turns": 6,
"handoff_on_negative": true,
"handoff_message": "<string>",
"reply_delay_min_sec": 2,
"reply_delay_max_sec": 8,
"max_replies_per_day": 10,
"capture_fields": [
"email",
"zip"
],
"link_domain_id": "<string>",
"conversion_keywords": [
"yes",
"interested"
],
"conversion_on_agent_goal": true,
"followup_enabled": true,
"followup_count": 2,
"followup_delay_hours": 24,
"quiet_start_hour": 21,
"quiet_end_hour": 8,
"quiet_tz": "America/New_York"
},
"inbox": {
"mode": "handoff",
"intent_threshold": "hot",
"suppress_keywords": [
"stop",
"wrong number"
]
},
"created_at": "2026-09-01T14:12:00Z"
}
}{
"ok": false,
"error": "list_id is required"
}{
"ok": false,
"error": "Invalid or missing API key"
}{
"ok": false,
"error": "This API key cannot create and edit.",
"required_scope": "write"
}Create an agent
Creates an AI agent. name and system_prompt are required. channel is sms (default) or voice; a voice agent also needs a voice_id from /v1/voices (plus optional language, greeting). goal tells the agent what a successful conversation achieves. Attach it to a campaign or flow to put it to work.
curl --request POST \
--url https://api.verbose.cx/v1/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Booking bot",
"channel": "voice",
"system_prompt": "You book callbacks for Acme.",
"greeting": "Hi, this is Acme!",
"voice_id": "voice_abc"
}
'import requests
url = "https://api.verbose.cx/v1/agents"
payload = {
"name": "Booking bot",
"channel": "voice",
"system_prompt": "You book callbacks for Acme.",
"greeting": "Hi, this is Acme!",
"voice_id": "voice_abc"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Booking bot',
channel: 'voice',
system_prompt: 'You book callbacks for Acme.',
greeting: 'Hi, this is Acme!',
voice_id: 'voice_abc'
})
};
fetch('https://api.verbose.cx/v1/agents', 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.verbose.cx/v1/agents",
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([
'name' => 'Booking bot',
'channel' => 'voice',
'system_prompt' => 'You book callbacks for Acme.',
'greeting' => 'Hi, this is Acme!',
'voice_id' => 'voice_abc'
]),
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.verbose.cx/v1/agents"
payload := strings.NewReader("{\n \"name\": \"Booking bot\",\n \"channel\": \"voice\",\n \"system_prompt\": \"You book callbacks for Acme.\",\n \"greeting\": \"Hi, this is Acme!\",\n \"voice_id\": \"voice_abc\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.verbose.cx/v1/agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Booking bot\",\n \"channel\": \"voice\",\n \"system_prompt\": \"You book callbacks for Acme.\",\n \"greeting\": \"Hi, this is Acme!\",\n \"voice_id\": \"voice_abc\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.verbose.cx/v1/agents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Booking bot\",\n \"channel\": \"voice\",\n \"system_prompt\": \"You book callbacks for Acme.\",\n \"greeting\": \"Hi, this is Acme!\",\n \"voice_id\": \"voice_abc\"\n}"
response = http.request(request)
puts response.read_body{
"ok": true,
"agent": {
"id": "a9c1f0d2-...",
"name": "Debt-relief qualifier",
"channel": "sms",
"status": "active",
"system_prompt": "<string>",
"goal": "<string>",
"greeting": "<string>",
"max_turns": 20,
"handoff_keywords": [
"<string>"
],
"voice_id": "<string>",
"voice": {
"voice_id": "11labs-Jenny",
"language": "en-US",
"end_call": true,
"speed": 1,
"temperature": 1,
"volume": 1,
"responsiveness": 1,
"interruption_sensitivity": 1,
"enable_backchannel": false,
"backchannel_frequency": 0.8,
"reminder_trigger_ms": 10000,
"end_call_after_silence_ms": 600000,
"max_call_duration_ms": 3600000,
"ambient_sound": "call-center",
"boosted_keywords": [
"Astrasend",
"tadalafil"
],
"model_temperature": 0.7,
"voicemail_message": "<string>"
},
"sms": {
"tone": "friendly",
"creativity": "medium",
"guardrails": [
"Never quote a price",
"Don't give legal advice"
],
"max_length": 320,
"knowledge": "<string>",
"handoff_on_low_confidence": true,
"handoff_after_turns": 6,
"handoff_on_negative": true,
"handoff_message": "<string>",
"reply_delay_min_sec": 2,
"reply_delay_max_sec": 8,
"max_replies_per_day": 10,
"capture_fields": [
"email",
"zip"
],
"link_domain_id": "<string>",
"conversion_keywords": [
"yes",
"interested"
],
"conversion_on_agent_goal": true,
"followup_enabled": true,
"followup_count": 2,
"followup_delay_hours": 24,
"quiet_start_hour": 21,
"quiet_end_hour": 8,
"quiet_tz": "America/New_York"
},
"inbox": {
"mode": "handoff",
"intent_threshold": "hot",
"suppress_keywords": [
"stop",
"wrong number"
]
},
"created_at": "2026-09-01T14:12:00Z"
}
}{
"ok": false,
"error": "list_id is required"
}{
"ok": false,
"error": "Invalid or missing API key"
}{
"ok": false,
"error": "This API key cannot create and edit.",
"required_scope": "write"
}Authorizations
Your API key (as_live_…), created under Settings → API keys.
Body
Create or update an agent. SMS by default; set channel=voice and provide voice.voice_id for a voice agent. Beyond the persona, you can configure the full builder: guardrails, knowledge base, handoff rules, timing (sms), speech + call behavior (voice), and inbox routing.
Agent name.
"Debt-relief qualifier"
The agent's persona and instructions.
"You are a friendly assistant qualifying debt-relief leads…"
sms (default) or voice.
sms, voice "sms"
draft / active / paused.
"active"
What a successful conversation achieves.
"Book a call with a specialist"
Opening message/line.
"Hi {first_name}! Quick question —"
Model tier.
Max back-and-forth turns before wrapping up.
20
Contact phrases that force a human handoff.
["agent", "representative"]
Voice for a voice agent (or set voice.voice_id).
"11labs-Jenny"
Voice language (or set voice.language).
"en-US"
Inbox routing / human-handoff policy.
Show child attributes
Show child attributes
SMS agent behavior. All optional; unset fields use sensible defaults.
Show child attributes
Show child attributes
Voice agent build config. voice_id is required for a voice agent; the rest tune speech and call behavior.
Show child attributes
Show child attributes
Was this page helpful?