curl --request POST \
--url https://devtune.ai/api/v2/projects/{projectId}/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"displayName": "<string>",
"description": "<string>",
"instructions": "<string>",
"modelId": "<string>",
"quickActions": [
"<string>"
],
"toolAllowlist": [
"<string>"
]
}
'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/agents"
payload = {
"displayName": "<string>",
"description": "<string>",
"instructions": "<string>",
"modelId": "<string>",
"quickActions": ["<string>"],
"toolAllowlist": ["<string>"]
}
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({
displayName: '<string>',
description: '<string>',
instructions: '<string>',
modelId: '<string>',
quickActions: ['<string>'],
toolAllowlist: ['<string>']
})
};
fetch('https://devtune.ai/api/v2/projects/{projectId}/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://devtune.ai/api/v2/projects/{projectId}/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([
'displayName' => '<string>',
'description' => '<string>',
'instructions' => '<string>',
'modelId' => '<string>',
'quickActions' => [
'<string>'
],
'toolAllowlist' => [
'<string>'
]
]),
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://devtune.ai/api/v2/projects/{projectId}/agents"
payload := strings.NewReader("{\n \"displayName\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"modelId\": \"<string>\",\n \"quickActions\": [\n \"<string>\"\n ],\n \"toolAllowlist\": [\n \"<string>\"\n ]\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://devtune.ai/api/v2/projects/{projectId}/agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"displayName\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"modelId\": \"<string>\",\n \"quickActions\": [\n \"<string>\"\n ],\n \"toolAllowlist\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/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 \"displayName\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"modelId\": \"<string>\",\n \"quickActions\": [\n \"<string>\"\n ],\n \"toolAllowlist\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"agent": {
"agentKey": "<string>",
"displayName": "<string>",
"description": "<string>",
"instructions": "<string>",
"modelId": "<string>",
"quickActions": [
"<string>"
],
"toolAllowlist": [
"<string>"
],
"outputArtifactType": "action",
"workflowKey": "<string>",
"isCustom": true,
"scheduling": {
"autonomyLevel": "manual",
"schedule": {
"cadence": "daily",
"time": "<string>",
"timezone": "<string>",
"modelId": "<string>"
},
"modelId": "<string>",
"scheduledAt": "2023-11-07T05:31:56Z"
}
}
},
"meta": {
"timestamp": "2023-11-07T05:31:56Z",
"projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}Create a custom agent
Creates a custom agent, as Create agent does on the Agents page, with the same validation; a model that is not available now is refused with 400. The agent starts with no schedule. The response carries its agentKey. A retry creates a second agent. The OAuth member, or the member who created the API key, must belong to the project and hold the manage permission; otherwise 403. Requires the agents.write scope.
curl --request POST \
--url https://devtune.ai/api/v2/projects/{projectId}/agents \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"displayName": "<string>",
"description": "<string>",
"instructions": "<string>",
"modelId": "<string>",
"quickActions": [
"<string>"
],
"toolAllowlist": [
"<string>"
]
}
'import requests
url = "https://devtune.ai/api/v2/projects/{projectId}/agents"
payload = {
"displayName": "<string>",
"description": "<string>",
"instructions": "<string>",
"modelId": "<string>",
"quickActions": ["<string>"],
"toolAllowlist": ["<string>"]
}
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({
displayName: '<string>',
description: '<string>',
instructions: '<string>',
modelId: '<string>',
quickActions: ['<string>'],
toolAllowlist: ['<string>']
})
};
fetch('https://devtune.ai/api/v2/projects/{projectId}/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://devtune.ai/api/v2/projects/{projectId}/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([
'displayName' => '<string>',
'description' => '<string>',
'instructions' => '<string>',
'modelId' => '<string>',
'quickActions' => [
'<string>'
],
'toolAllowlist' => [
'<string>'
]
]),
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://devtune.ai/api/v2/projects/{projectId}/agents"
payload := strings.NewReader("{\n \"displayName\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"modelId\": \"<string>\",\n \"quickActions\": [\n \"<string>\"\n ],\n \"toolAllowlist\": [\n \"<string>\"\n ]\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://devtune.ai/api/v2/projects/{projectId}/agents")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"displayName\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"modelId\": \"<string>\",\n \"quickActions\": [\n \"<string>\"\n ],\n \"toolAllowlist\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://devtune.ai/api/v2/projects/{projectId}/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 \"displayName\": \"<string>\",\n \"description\": \"<string>\",\n \"instructions\": \"<string>\",\n \"modelId\": \"<string>\",\n \"quickActions\": [\n \"<string>\"\n ],\n \"toolAllowlist\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"data": {
"agent": {
"agentKey": "<string>",
"displayName": "<string>",
"description": "<string>",
"instructions": "<string>",
"modelId": "<string>",
"quickActions": [
"<string>"
],
"toolAllowlist": [
"<string>"
],
"outputArtifactType": "action",
"workflowKey": "<string>",
"isCustom": true,
"scheduling": {
"autonomyLevel": "manual",
"schedule": {
"cadence": "daily",
"time": "<string>",
"timezone": "<string>",
"modelId": "<string>"
},
"modelId": "<string>",
"scheduledAt": "2023-11-07T05:31:56Z"
}
}
},
"meta": {
"timestamp": "2023-11-07T05:31:56Z",
"projectId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}{
"error": "<string>",
"message": "<string>",
"status": 123,
"reason": "<string>",
"details": {}
}Authorizations
API key with dtk_live_ prefix. Obtain it from API Keys in the account sidebar. New keys start with all supported scopes selected for the chosen project, and you can narrow them to specific read/write scopes as needed.
Path Parameters
Body
1 - 80One sentence saying what the agent does.
1 - 240What the agent does on every run.
1 - 12000A model available now; others are refused with 400.
1 - 120Suggested requests shown with the agent.
1 - 6 elements1 - 160Tools the agent may use, including exactly one draft output: create_draft_action, create_draft_brief or create_report_artifact.
1