curl --request POST \
--url https://api.devic.ai/v1/agents/{agentId}/threads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"messages": [
{
"content": "<string>",
"name": "<string>",
"tool_call_id": "<string>"
}
],
"metadata": {},
"tenantId": "<string>",
"subtenantId": "<string>",
"async": false
}
'import requests
url = "https://api.devic.ai/v1/agents/{agentId}/threads"
payload = {
"messages": [
{
"content": "<string>",
"name": "<string>",
"tool_call_id": "<string>"
}
],
"metadata": {},
"tenantId": "<string>",
"subtenantId": "<string>",
"async": False
}
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({
messages: [{content: '<string>', name: '<string>', tool_call_id: '<string>'}],
metadata: {},
tenantId: '<string>',
subtenantId: '<string>',
async: false
})
};
fetch('https://api.devic.ai/v1/agents/{agentId}/threads', 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.devic.ai/v1/agents/{agentId}/threads",
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([
'messages' => [
[
'content' => '<string>',
'name' => '<string>',
'tool_call_id' => '<string>'
]
],
'metadata' => [
],
'tenantId' => '<string>',
'subtenantId' => '<string>',
'async' => false
]),
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.devic.ai/v1/agents/{agentId}/threads"
payload := strings.NewReader("{\n \"messages\": [\n {\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"tool_call_id\": \"<string>\"\n }\n ],\n \"metadata\": {},\n \"tenantId\": \"<string>\",\n \"subtenantId\": \"<string>\",\n \"async\": false\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.devic.ai/v1/agents/{agentId}/threads")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"messages\": [\n {\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"tool_call_id\": \"<string>\"\n }\n ],\n \"metadata\": {},\n \"tenantId\": \"<string>\",\n \"subtenantId\": \"<string>\",\n \"async\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devic.ai/v1/agents/{agentId}/threads")
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 \"messages\": [\n {\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"tool_call_id\": \"<string>\"\n }\n ],\n \"metadata\": {},\n \"tenantId\": \"<string>\",\n \"subtenantId\": \"<string>\",\n \"async\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "RUNNING",
"createdAt": "2023-11-07T05:31:56Z",
"messages": [
{
"role": "user",
"content": "<string>",
"name": "<string>",
"tool_call_id": "<string>"
}
],
"updatedAt": "2023-11-07T05:31:56Z",
"metadata": {},
"cost": 123
}{
"error": "<string>",
"message": "<string>",
"details": {}
}Create a new thread for an agent
Creates a new execution thread for the specified agent. Threads allow you to run agent tasks, manage their state, and track associated costs.
curl --request POST \
--url https://api.devic.ai/v1/agents/{agentId}/threads \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"messages": [
{
"content": "<string>",
"name": "<string>",
"tool_call_id": "<string>"
}
],
"metadata": {},
"tenantId": "<string>",
"subtenantId": "<string>",
"async": false
}
'import requests
url = "https://api.devic.ai/v1/agents/{agentId}/threads"
payload = {
"messages": [
{
"content": "<string>",
"name": "<string>",
"tool_call_id": "<string>"
}
],
"metadata": {},
"tenantId": "<string>",
"subtenantId": "<string>",
"async": False
}
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({
messages: [{content: '<string>', name: '<string>', tool_call_id: '<string>'}],
metadata: {},
tenantId: '<string>',
subtenantId: '<string>',
async: false
})
};
fetch('https://api.devic.ai/v1/agents/{agentId}/threads', 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.devic.ai/v1/agents/{agentId}/threads",
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([
'messages' => [
[
'content' => '<string>',
'name' => '<string>',
'tool_call_id' => '<string>'
]
],
'metadata' => [
],
'tenantId' => '<string>',
'subtenantId' => '<string>',
'async' => false
]),
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.devic.ai/v1/agents/{agentId}/threads"
payload := strings.NewReader("{\n \"messages\": [\n {\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"tool_call_id\": \"<string>\"\n }\n ],\n \"metadata\": {},\n \"tenantId\": \"<string>\",\n \"subtenantId\": \"<string>\",\n \"async\": false\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.devic.ai/v1/agents/{agentId}/threads")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"messages\": [\n {\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"tool_call_id\": \"<string>\"\n }\n ],\n \"metadata\": {},\n \"tenantId\": \"<string>\",\n \"subtenantId\": \"<string>\",\n \"async\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devic.ai/v1/agents/{agentId}/threads")
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 \"messages\": [\n {\n \"content\": \"<string>\",\n \"name\": \"<string>\",\n \"tool_call_id\": \"<string>\"\n }\n ],\n \"metadata\": {},\n \"tenantId\": \"<string>\",\n \"subtenantId\": \"<string>\",\n \"async\": false\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "RUNNING",
"createdAt": "2023-11-07T05:31:56Z",
"messages": [
{
"role": "user",
"content": "<string>",
"name": "<string>",
"tool_call_id": "<string>"
}
],
"updatedAt": "2023-11-07T05:31:56Z",
"metadata": {},
"cost": 123
}{
"error": "<string>",
"message": "<string>",
"details": {}
}Authorizations
An API key from your Devic console, sent as Authorization: Bearer <key>. An embedded front end sends a tenant-session token instead, so no API key reaches the browser, and an OAuth integration sends its access token. Missing, invalid or expired credentials get a 401. See Authentication.
Path Parameters
UUID of the agent for which to create the thread
Body
Payload to create a new thread
Initial messages for the thread
Show child attributes
Show child attributes
Custom metadata to associate with the thread
Tenant (customer/organization) this thread belongs to in multi-tenant setups. Auto-registers the tenant on first use and attributes its cost/usage. See the Tenants endpoints.
End user/entity inside the tenant. When omitted it is derived from metadata.subtenantMetadata.id or the legacy metadata.userId. Used for per-subtenant cost attribution and usage limits.
Whether to execute the thread asynchronously
Response
Thread created successfully
Unique identifier for the thread
Unique identifier for the associated agent
Current status of the thread
RUNNING, PAUSED, COMPLETED, FAILED, AWAITING_APPROVAL Timestamp when the thread was created
Messages exchanged in the thread
Show child attributes
Show child attributes
Timestamp when the thread was last updated
Custom metadata associated with the thread
Total cost accumulated by this thread