curl --request POST \
--url https://api.duvo.ai/v2/teams/{teamId}/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"type": "agent",
"thread_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_build_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"automation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.duvo.ai/v2/teams/{teamId}/agents"
payload = {
"name": "<string>",
"type": "agent",
"thread_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_build_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"automation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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>',
type: 'agent',
thread_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
source_build_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
automation_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.duvo.ai/v2/teams/{teamId}/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.duvo.ai/v2/teams/{teamId}/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>',
'type' => 'agent',
'thread_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'source_build_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'automation_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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.duvo.ai/v2/teams/{teamId}/agents"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"type\": \"agent\",\n \"thread_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source_build_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"automation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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.duvo.ai/v2/teams/{teamId}/agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"type\": \"agent\",\n \"thread_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source_build_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"automation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.duvo.ai/v2/teams/{teamId}/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 \"type\": \"agent\",\n \"thread_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source_build_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"automation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"agent": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"slack_enabled": true,
"microsoft_teams_enabled": true,
"agentic_memory_enabled": true,
"team_id": "<string>",
"thread_id": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"type": "agent",
"computer_use_sandbox_template_id": "<string>",
"computer_use_vpn_config_id": "<string>",
"folder_id": "<string>",
"automation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by": {
"id": "<string>",
"name": "<string>",
"email": "<string>"
},
"updated_by": {
"id": "<string>",
"name": "<string>",
"email": "<string>"
}
},
"build": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"copilot_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"config": {
"version": "v1",
"data": {
"language": "python",
"source": {
"kind": "inline",
"code": "<string>"
},
"files": [],
"timeoutMs": 600000,
"handoverRequired": false
}
},
"status": "<string>",
"revision_number": 123,
"parent_build_id": "<string>",
"created_by": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"revision_name": "<string>",
"revision_description": "<string>",
"created_by_name": "<string>",
"schedules": [
{
"id": "<string>",
"build_id": "<string>",
"agent_id": "<string>",
"user_id": "<string>",
"enabled": true,
"frequency": "every_5_minutes",
"time": "<string>",
"timezone": "<string>",
"day": "<string>",
"day_of_month": 123,
"cron": "<string>",
"source": "<string>",
"task": "<string>",
"recurring": true,
"auto_disabled_at": "<string>",
"auto_disabled_reason": "<string>",
"consecutive_missing_connection_failures": 4503599627370495,
"first_missing_connection_failure_at": "<string>",
"last_missing_connection_failure_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"user_name": "<string>",
"user_email": "<string>"
}
],
"handover_to": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"handover_options": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
]
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Create Agent
Create a new agent. Optionally include a build configuration to create the first build in the same request. On a team that versions its automations, an agent created inside an automation joins that automation’s draft revision: its first build is a draft and goes live when the draft is made active.
curl --request POST \
--url https://api.duvo.ai/v2/teams/{teamId}/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"type": "agent",
"thread_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_build_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"automation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'import requests
url = "https://api.duvo.ai/v2/teams/{teamId}/agents"
payload = {
"name": "<string>",
"type": "agent",
"thread_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"source_build_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"automation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
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>',
type: 'agent',
thread_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
source_build_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
automation_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.duvo.ai/v2/teams/{teamId}/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.duvo.ai/v2/teams/{teamId}/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>',
'type' => 'agent',
'thread_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'source_build_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'automation_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a'
]),
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.duvo.ai/v2/teams/{teamId}/agents"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"type\": \"agent\",\n \"thread_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source_build_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"automation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\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.duvo.ai/v2/teams/{teamId}/agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"type\": \"agent\",\n \"thread_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source_build_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"automation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.duvo.ai/v2/teams/{teamId}/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 \"type\": \"agent\",\n \"thread_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"source_build_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"automation_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\"\n}"
response = http.request(request)
puts response.read_body{
"agent": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"slack_enabled": true,
"microsoft_teams_enabled": true,
"agentic_memory_enabled": true,
"team_id": "<string>",
"thread_id": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"type": "agent",
"computer_use_sandbox_template_id": "<string>",
"computer_use_vpn_config_id": "<string>",
"folder_id": "<string>",
"automation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by": {
"id": "<string>",
"name": "<string>",
"email": "<string>"
},
"updated_by": {
"id": "<string>",
"name": "<string>",
"email": "<string>"
}
},
"build": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"copilot_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agent_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"config": {
"version": "v1",
"data": {
"language": "python",
"source": {
"kind": "inline",
"code": "<string>"
},
"files": [],
"timeoutMs": 600000,
"handoverRequired": false
}
},
"status": "<string>",
"revision_number": 123,
"parent_build_id": "<string>",
"created_by": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"revision_name": "<string>",
"revision_description": "<string>",
"created_by_name": "<string>",
"schedules": [
{
"id": "<string>",
"build_id": "<string>",
"agent_id": "<string>",
"user_id": "<string>",
"enabled": true,
"frequency": "every_5_minutes",
"time": "<string>",
"timezone": "<string>",
"day": "<string>",
"day_of_month": 123,
"cron": "<string>",
"source": "<string>",
"task": "<string>",
"recurring": true,
"auto_disabled_at": "<string>",
"auto_disabled_reason": "<string>",
"consecutive_missing_connection_failures": 4503599627370495,
"first_missing_connection_failure_at": "<string>",
"last_missing_connection_failure_at": "<string>",
"created_at": "<string>",
"updated_at": "<string>",
"user_name": "<string>",
"user_email": "<string>"
}
],
"handover_to": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"handover_options": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
]
}
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Authorizations
API key authentication. Get your API key from the Duvo dashboard.
Path Parameters
Body
Human-readable agent name
1Flavour of the step to create. Fixed at creation — it selects the config family every build of this step must use, and the two cannot be mixed.
agent, code Existing thread ID to associate with the agent
Build ID whose case-queue-consumer setup should be copied to the new agent. When automation_id is omitted, the new agent also joins the automation of the agent this build belongs to.
Automation this agent belongs to. If omitted on a team using the automations model, a new automation named after the agent is created automatically.
Optional inline build. When present, a first build is created alongside the agent. Only valid for an agent step.
Show child attributes
Show child attributes
Was this page helpful?