Create user
curl --request POST \
--url https://api.quintus.tec.br/v1/agents/users \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"email": "alice@acme.com",
"info": {
"language": "pt-BR",
"plan": "enterprise"
},
"name": "Alice Smith",
"reference": "crm-customer-42"
}
'import requests
url = "https://api.quintus.tec.br/v1/agents/users"
payload = {
"email": "alice@acme.com",
"info": {
"language": "pt-BR",
"plan": "enterprise"
},
"name": "Alice Smith",
"reference": "crm-customer-42"
}
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({
email: 'alice@acme.com',
info: {language: 'pt-BR', plan: 'enterprise'},
name: 'Alice Smith',
reference: 'crm-customer-42'
})
};
fetch('https://api.quintus.tec.br/v1/agents/users', 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/agents/users",
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([
'email' => 'alice@acme.com',
'info' => [
'language' => 'pt-BR',
'plan' => 'enterprise'
],
'name' => 'Alice Smith',
'reference' => 'crm-customer-42'
]),
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/agents/users"
payload := strings.NewReader("{\n \"email\": \"alice@acme.com\",\n \"info\": {\n \"language\": \"pt-BR\",\n \"plan\": \"enterprise\"\n },\n \"name\": \"Alice Smith\",\n \"reference\": \"crm-customer-42\"\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/agents/users")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"alice@acme.com\",\n \"info\": {\n \"language\": \"pt-BR\",\n \"plan\": \"enterprise\"\n },\n \"name\": \"Alice Smith\",\n \"reference\": \"crm-customer-42\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.quintus.tec.br/v1/agents/users")
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 \"email\": \"alice@acme.com\",\n \"info\": {\n \"language\": \"pt-BR\",\n \"plan\": \"enterprise\"\n },\n \"name\": \"Alice Smith\",\n \"reference\": \"crm-customer-42\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"reference": "<string>",
"name": "<string>",
"email": "<string>",
"phone": "<string>",
"metadata": {},
"info": {}
}{
"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"
}Usuários
Create user
Create a new end-user. If reference is provided and already exists for this tenant, returns 409. Use PATCH to update existing users.
POST
/
v1
/
agents
/
users
Create user
curl --request POST \
--url https://api.quintus.tec.br/v1/agents/users \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"email": "alice@acme.com",
"info": {
"language": "pt-BR",
"plan": "enterprise"
},
"name": "Alice Smith",
"reference": "crm-customer-42"
}
'import requests
url = "https://api.quintus.tec.br/v1/agents/users"
payload = {
"email": "alice@acme.com",
"info": {
"language": "pt-BR",
"plan": "enterprise"
},
"name": "Alice Smith",
"reference": "crm-customer-42"
}
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({
email: 'alice@acme.com',
info: {language: 'pt-BR', plan: 'enterprise'},
name: 'Alice Smith',
reference: 'crm-customer-42'
})
};
fetch('https://api.quintus.tec.br/v1/agents/users', 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/agents/users",
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([
'email' => 'alice@acme.com',
'info' => [
'language' => 'pt-BR',
'plan' => 'enterprise'
],
'name' => 'Alice Smith',
'reference' => 'crm-customer-42'
]),
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/agents/users"
payload := strings.NewReader("{\n \"email\": \"alice@acme.com\",\n \"info\": {\n \"language\": \"pt-BR\",\n \"plan\": \"enterprise\"\n },\n \"name\": \"Alice Smith\",\n \"reference\": \"crm-customer-42\"\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/agents/users")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"email\": \"alice@acme.com\",\n \"info\": {\n \"language\": \"pt-BR\",\n \"plan\": \"enterprise\"\n },\n \"name\": \"Alice Smith\",\n \"reference\": \"crm-customer-42\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.quintus.tec.br/v1/agents/users")
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 \"email\": \"alice@acme.com\",\n \"info\": {\n \"language\": \"pt-BR\",\n \"plan\": \"enterprise\"\n },\n \"name\": \"Alice Smith\",\n \"reference\": \"crm-customer-42\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"reference": "<string>",
"name": "<string>",
"email": "<string>",
"phone": "<string>",
"metadata": {},
"info": {}
}{
"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
application/json
Client-controlled label, unique per tenant if provided. Used for dedup and search; never appears as URL identifier.
Maximum string length:
128Pattern:
^[a-zA-Z0-9_\-:.]+$Display name.
Integrator-defined storage. Persisted with the user and returned on read. Not injected into the agent context.
Personal user attributes that ARE injected into the agent's system context whenever this user is in a session (rendered as a <user_info> block alongside name/email/phone). Use sparingly - large payloads inflate every prompt.
⌘I