Create an agent
Connect it to an address with POST /v2/agents/{agentId}/channels.
curl --request POST \
--url https://api.zavu.dev/v2/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"model": "<string>",
"systemPrompt": "<string>",
"apiKey": "<string>",
"contextWindowMessages": 10,
"includeContactMetadata": true,
"triggerOnChannels": [
"*"
],
"triggerOnMessageTypes": [
"text"
],
"maxTokens": 2048,
"temperature": 1
}
'import requests
url = "https://api.zavu.dev/v2/agents"
payload = {
"name": "<string>",
"model": "<string>",
"systemPrompt": "<string>",
"apiKey": "<string>",
"contextWindowMessages": 10,
"includeContactMetadata": True,
"triggerOnChannels": ["*"],
"triggerOnMessageTypes": ["text"],
"maxTokens": 2048,
"temperature": 1
}
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: '<string>',
model: '<string>',
systemPrompt: '<string>',
apiKey: '<string>',
contextWindowMessages: 10,
includeContactMetadata: true,
triggerOnChannels: ['*'],
triggerOnMessageTypes: ['text'],
maxTokens: 2048,
temperature: 1
})
};
fetch('https://api.zavu.dev/v2/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.zavu.dev/v2/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' => '<string>',
'model' => '<string>',
'systemPrompt' => '<string>',
'apiKey' => '<string>',
'contextWindowMessages' => 10,
'includeContactMetadata' => true,
'triggerOnChannels' => [
'*'
],
'triggerOnMessageTypes' => [
'text'
],
'maxTokens' => 2048,
'temperature' => 1
]),
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.zavu.dev/v2/agents"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"contextWindowMessages\": 10,\n \"includeContactMetadata\": true,\n \"triggerOnChannels\": [\n \"*\"\n ],\n \"triggerOnMessageTypes\": [\n \"text\"\n ],\n \"maxTokens\": 2048,\n \"temperature\": 1\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.zavu.dev/v2/agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"contextWindowMessages\": 10,\n \"includeContactMetadata\": true,\n \"triggerOnChannels\": [\n \"*\"\n ],\n \"triggerOnMessageTypes\": [\n \"text\"\n ],\n \"maxTokens\": 2048,\n \"temperature\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zavu.dev/v2/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\": \"<string>\",\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"contextWindowMessages\": 10,\n \"includeContactMetadata\": true,\n \"triggerOnChannels\": [\n \"*\"\n ],\n \"triggerOnMessageTypes\": [\n \"text\"\n ],\n \"maxTokens\": 2048,\n \"temperature\": 1\n}"
response = http.request(request)
puts response.read_body{
"agent": {
"id": "agent_abc123",
"name": "Customer Support Agent",
"enabled": true,
"provider": "openai",
"model": "gpt-4o-mini",
"systemPrompt": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"channels": [
{
"address": "<string>",
"type": "sms",
"active": true
}
],
"contextWindowMessages": 10,
"includeContactMetadata": true,
"maxTokens": 123,
"temperature": 123,
"triggerOnChannels": [
"sms",
"whatsapp"
],
"triggerOnMessageTypes": [
"text"
],
"stats": {
"totalInvocations": 123,
"totalTokensUsed": 123,
"totalCost": 123
},
"voice": {
"enabled": true,
"greeting": "Hi, thanks for calling Acme. How can I help you today?",
"greetings": {
"es": "Hola, soy Atlas. Preguntame lo que quieras."
},
"language": "en",
"model": "openai/gpt-4o",
"sttProvider": "<string>",
"sttModel": "<string>",
"ttsProvider": "<string>",
"ttsVoiceId": "aria",
"voiceSpeed": 1,
"interruptible": true,
"maxCallDurationMinutes": 15,
"maxIdleSeconds": 30,
"recordCalls": true,
"voicemailAction": "hangup",
"voicemailMessage": "<string>",
"transferPhoneNumber": "+14155551234"
}
}
}{
"code": "invalid_request",
"message": "<string>",
"details": {
"errors": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
]
}
}{
"code": "invalid_request",
"message": "<string>",
"details": {
"errors": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
]
}
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
Create an agent that exists on its own, disabled and connected to no channel.
100LLM provider for the AI agent.
openai, anthropic, google, mistral, zavu 10000Your key for the model provider. Required for openai, anthropic, google and mistral, where a request without it is refused with 400; not used with zavu. Stored encrypted and never returned.
1 <= x <= 501 <= x <= 40960 <= x <= 2Voice Agent configuration on an AI agent. Controls how the agent behaves on inbound and outbound phone calls through Zavu's managed voice pipeline (speech recognition, the agent's LLM, and speech synthesis, with real-time interruption handling). Requires the Voice Agents feature to be enabled for your team.
Show child attributes
Show child attributes
Response
Created, disabled and connected to no channel.
An AI agent. It answers on the addresses in channels.
Show child attributes
Show child attributes
curl --request POST \
--url https://api.zavu.dev/v2/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"model": "<string>",
"systemPrompt": "<string>",
"apiKey": "<string>",
"contextWindowMessages": 10,
"includeContactMetadata": true,
"triggerOnChannels": [
"*"
],
"triggerOnMessageTypes": [
"text"
],
"maxTokens": 2048,
"temperature": 1
}
'import requests
url = "https://api.zavu.dev/v2/agents"
payload = {
"name": "<string>",
"model": "<string>",
"systemPrompt": "<string>",
"apiKey": "<string>",
"contextWindowMessages": 10,
"includeContactMetadata": True,
"triggerOnChannels": ["*"],
"triggerOnMessageTypes": ["text"],
"maxTokens": 2048,
"temperature": 1
}
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: '<string>',
model: '<string>',
systemPrompt: '<string>',
apiKey: '<string>',
contextWindowMessages: 10,
includeContactMetadata: true,
triggerOnChannels: ['*'],
triggerOnMessageTypes: ['text'],
maxTokens: 2048,
temperature: 1
})
};
fetch('https://api.zavu.dev/v2/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.zavu.dev/v2/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' => '<string>',
'model' => '<string>',
'systemPrompt' => '<string>',
'apiKey' => '<string>',
'contextWindowMessages' => 10,
'includeContactMetadata' => true,
'triggerOnChannels' => [
'*'
],
'triggerOnMessageTypes' => [
'text'
],
'maxTokens' => 2048,
'temperature' => 1
]),
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.zavu.dev/v2/agents"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"contextWindowMessages\": 10,\n \"includeContactMetadata\": true,\n \"triggerOnChannels\": [\n \"*\"\n ],\n \"triggerOnMessageTypes\": [\n \"text\"\n ],\n \"maxTokens\": 2048,\n \"temperature\": 1\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.zavu.dev/v2/agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"contextWindowMessages\": 10,\n \"includeContactMetadata\": true,\n \"triggerOnChannels\": [\n \"*\"\n ],\n \"triggerOnMessageTypes\": [\n \"text\"\n ],\n \"maxTokens\": 2048,\n \"temperature\": 1\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zavu.dev/v2/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\": \"<string>\",\n \"model\": \"<string>\",\n \"systemPrompt\": \"<string>\",\n \"apiKey\": \"<string>\",\n \"contextWindowMessages\": 10,\n \"includeContactMetadata\": true,\n \"triggerOnChannels\": [\n \"*\"\n ],\n \"triggerOnMessageTypes\": [\n \"text\"\n ],\n \"maxTokens\": 2048,\n \"temperature\": 1\n}"
response = http.request(request)
puts response.read_body{
"agent": {
"id": "agent_abc123",
"name": "Customer Support Agent",
"enabled": true,
"provider": "openai",
"model": "gpt-4o-mini",
"systemPrompt": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"channels": [
{
"address": "<string>",
"type": "sms",
"active": true
}
],
"contextWindowMessages": 10,
"includeContactMetadata": true,
"maxTokens": 123,
"temperature": 123,
"triggerOnChannels": [
"sms",
"whatsapp"
],
"triggerOnMessageTypes": [
"text"
],
"stats": {
"totalInvocations": 123,
"totalTokensUsed": 123,
"totalCost": 123
},
"voice": {
"enabled": true,
"greeting": "Hi, thanks for calling Acme. How can I help you today?",
"greetings": {
"es": "Hola, soy Atlas. Preguntame lo que quieras."
},
"language": "en",
"model": "openai/gpt-4o",
"sttProvider": "<string>",
"sttModel": "<string>",
"ttsProvider": "<string>",
"ttsVoiceId": "aria",
"voiceSpeed": 1,
"interruptible": true,
"maxCallDurationMinutes": 15,
"maxIdleSeconds": 30,
"recordCalls": true,
"voicemailAction": "hangup",
"voicemailMessage": "<string>",
"transferPhoneNumber": "+14155551234"
}
}
}{
"code": "invalid_request",
"message": "<string>",
"details": {
"errors": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
]
}
}{
"code": "invalid_request",
"message": "<string>",
"details": {
"errors": [
{
"path": [
"<string>"
],
"message": "<string>",
"code": "<string>"
}
]
}
}