curl --request POST \
--url https://api.quintus.tec.br/v1/public/agents/conversations \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"agent_id": "f3a1...",
"context": {
"page": "/pricing"
},
"metadata": {
"campaign": "spring-2026"
},
"user_data": {
"email": "a@example.com",
"name": "Andre"
}
}
'import requests
url = "https://api.quintus.tec.br/v1/public/agents/conversations"
payload = {
"agent_id": "f3a1...",
"context": { "page": "/pricing" },
"metadata": { "campaign": "spring-2026" },
"user_data": {
"email": "a@example.com",
"name": "Andre"
}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
agent_id: 'f3a1...',
context: {page: '/pricing'},
metadata: {campaign: 'spring-2026'},
user_data: {email: 'a@example.com', name: 'Andre'}
})
};
fetch('https://api.quintus.tec.br/v1/public/agents/conversations', 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.quintus.tec.br/v1/public/agents/conversations",
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([
'agent_id' => 'f3a1...',
'context' => [
'page' => '/pricing'
],
'metadata' => [
'campaign' => 'spring-2026'
],
'user_data' => [
'email' => 'a@example.com',
'name' => 'Andre'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.quintus.tec.br/v1/public/agents/conversations"
payload := strings.NewReader("{\n \"agent_id\": \"f3a1...\",\n \"context\": {\n \"page\": \"/pricing\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"user_data\": {\n \"email\": \"a@example.com\",\n \"name\": \"Andre\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.quintus.tec.br/v1/public/agents/conversations")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"agent_id\": \"f3a1...\",\n \"context\": {\n \"page\": \"/pricing\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"user_data\": {\n \"email\": \"a@example.com\",\n \"name\": \"Andre\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.quintus.tec.br/v1/public/agents/conversations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agent_id\": \"f3a1...\",\n \"context\": {\n \"page\": \"/pricing\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"user_data\": {\n \"email\": \"a@example.com\",\n \"name\": \"Andre\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"agent_id": "<string>",
"session_token": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"expires_in": 123,
"created_at": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "session_token_expired",
"context": {},
"message": "Session token has expired. Refresh to continue.",
"name": "SessionTokenExpiredError"
},
"request_id": "5f0c-...",
"timestamp": "2026-04-27T12:00:00Z"
}{
"error": {
"code": "session_token_expired",
"context": {},
"message": "Session token has expired. Refresh to continue.",
"name": "SessionTokenExpiredError"
},
"request_id": "5f0c-...",
"timestamp": "2026-04-27T12:00:00Z"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"error": {
"code": "session_token_expired",
"context": {},
"message": "Session token has expired. Refresh to continue.",
"name": "SessionTokenExpiredError"
},
"request_id": "5f0c-...",
"timestamp": "2026-04-27T12:00:00Z"
}Create a conversation
Create a new conversation with an agent and receive a session token.
curl --request POST \
--url https://api.quintus.tec.br/v1/public/agents/conversations \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"agent_id": "f3a1...",
"context": {
"page": "/pricing"
},
"metadata": {
"campaign": "spring-2026"
},
"user_data": {
"email": "a@example.com",
"name": "Andre"
}
}
'import requests
url = "https://api.quintus.tec.br/v1/public/agents/conversations"
payload = {
"agent_id": "f3a1...",
"context": { "page": "/pricing" },
"metadata": { "campaign": "spring-2026" },
"user_data": {
"email": "a@example.com",
"name": "Andre"
}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
agent_id: 'f3a1...',
context: {page: '/pricing'},
metadata: {campaign: 'spring-2026'},
user_data: {email: 'a@example.com', name: 'Andre'}
})
};
fetch('https://api.quintus.tec.br/v1/public/agents/conversations', 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.quintus.tec.br/v1/public/agents/conversations",
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([
'agent_id' => 'f3a1...',
'context' => [
'page' => '/pricing'
],
'metadata' => [
'campaign' => 'spring-2026'
],
'user_data' => [
'email' => 'a@example.com',
'name' => 'Andre'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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.quintus.tec.br/v1/public/agents/conversations"
payload := strings.NewReader("{\n \"agent_id\": \"f3a1...\",\n \"context\": {\n \"page\": \"/pricing\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"user_data\": {\n \"email\": \"a@example.com\",\n \"name\": \"Andre\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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.quintus.tec.br/v1/public/agents/conversations")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"agent_id\": \"f3a1...\",\n \"context\": {\n \"page\": \"/pricing\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"user_data\": {\n \"email\": \"a@example.com\",\n \"name\": \"Andre\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.quintus.tec.br/v1/public/agents/conversations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agent_id\": \"f3a1...\",\n \"context\": {\n \"page\": \"/pricing\"\n },\n \"metadata\": {\n \"campaign\": \"spring-2026\"\n },\n \"user_data\": {\n \"email\": \"a@example.com\",\n \"name\": \"Andre\"\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"agent_id": "<string>",
"session_token": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"expires_in": 123,
"created_at": "2023-11-07T05:31:56Z"
}{
"error": {
"code": "session_token_expired",
"context": {},
"message": "Session token has expired. Refresh to continue.",
"name": "SessionTokenExpiredError"
},
"request_id": "5f0c-...",
"timestamp": "2026-04-27T12:00:00Z"
}{
"error": {
"code": "session_token_expired",
"context": {},
"message": "Session token has expired. Refresh to continue.",
"name": "SessionTokenExpiredError"
},
"request_id": "5f0c-...",
"timestamp": "2026-04-27T12:00:00Z"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}{
"error": {
"code": "session_token_expired",
"context": {},
"message": "Session token has expired. Refresh to continue.",
"name": "SessionTokenExpiredError"
},
"request_id": "5f0c-...",
"timestamp": "2026-04-27T12:00:00Z"
}Autorizações
Corpo
ID of the agent to converse with.
End-user identification stored on the conversation (e.g. {name, email, external_id}). Visible in the dashboard and available to the agent runtime when looking up user history. Not injected verbatim into the LLM context.
Free-form key/value pairs injected into the agent's system context for this conversation. Use for page URL, plan tier, language, etc. Keys and values must be JSON-serializable; keep payload small.
Free-form storage for the integrator. Saved with the conversation and returned on read. Not seen by the agent. Use for your own tracking IDs, campaign tags, audit fields, etc.
Resposta
Successful Response
Conversation identifier.
Bearer token to authenticate subsequent calls in this conversation.
Seconds until session_token expires.