Autenticazione
Ogni richiesta porta l'intestazione Authorization: Bearer tea_…. Le chiavi si creano dal profilo, vengono mostrate una sola volta e si possono revocare in qualsiasi momento. Nel database ne conserviamo solo l'impronta SHA-256.
Limiti
| Limite | Valore | Risposta se superato |
|---|---|---|
| Richieste per chiave | 10 al minuto | 429 con Retry-After |
| Messaggi AI per account | quota giornaliera del piano | 429 |
| Capacità del motore | gestita dal governor (limiti Groq per modello) | 429 con secondi di attesa |
| Lunghezza del messaggio | 6.000 caratteri | 400 |
POST /v1.php — chat
Il campo mode è facoltativo: con auto il router sceglie tra rapido, profondo, web (ricerca con fonti) e codice (Python in sandbox). Passa conversation per continuare una conversazione: la memoria viene gestita lato server.
curl -X POST https://teamevoluto.it/v1.php \
-H "Authorization: Bearer tea_LA_TUA_CHIAVE" \
-H "Content-Type: application/json" \
-d '{"endpoint":"chat","message":"EBITDA 6,4 M€, PFN 10,8 M€, covenant PFN/EBITDA ≤ 3: simula 20.000 scenari 2027 con perdita del 32% dei ricavi al 35%","mode":"auto"}'
Risposta:
{
"object": "chat.completion",
"conversation": "8911caea0ddf6d50e2ba0e3c062caaa4",
"message_id": 42,
"mode": "codice",
"engine": "GPT-OSS 120B",
"content": "## Sintesi esecutiva\n…",
"citations": [],
"code": [{ "code": "…", "output": "breach_probability = 0.511" }],
"usage": { "prompt": 1850, "cached": 1024, "completion": 420 },
"latency_ms": 1840,
"quota_left_today": 57
}
POST /v1.php — redteam
Sottopone una risposta già generata al red team DAVS e restituisce il report strutturato.
{"endpoint":"redteam","message_id":42}
→ { "object":"davs.report", "verdetto":"…", "contradiction_score":0.34,
"banda_confidenza":"MEDIA", "a_rischio":false,
"panel":[{"ruolo":"CFO","posizione":"contesta","argomento":"…"}],
"failure_modes":[{"descrizione":"…","gravita":"critico","probabilita":"media"}],
"condizioni_falsificazione":["…"], "chi_dissentirebbe":"…" }
GET /v1.php?endpoint=…
models: modalità disponibili e motore usato.me: piano e quota residua di oggi.conversations: elenco delle conversazioni (parametroqper cercare).
Esempi
Python
import requests
r = requests.post("https://teamevoluto.it/v1.php",
headers={"Authorization": "Bearer tea_LA_TUA_CHIAVE"},
json={"endpoint": "chat", "message": "Rischi principali di un contratto di agenzia", "mode": "profondo"},
timeout=120)
r.raise_for_status()
print(r.json()["content"])
JavaScript
const r = await fetch("https://teamevoluto.it/v1.php", {
method: "POST",
headers: { Authorization: "Bearer tea_LA_TUA_CHIAVE", "Content-Type": "application/json" },
body: JSON.stringify({ endpoint: "chat", message: "Bandi aperti per PMI in Calabria", mode: "web" }),
});
const data = await r.json();
console.log(data.content, data.citations);
PHP
$ch = curl_init('https://teamevoluto.it/v1.php');
curl_setopt_array($ch, [
CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 120,
CURLOPT_HTTPHEADER => ['Authorization: Bearer tea_LA_TUA_CHIAVE', 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['endpoint' => 'chat', 'message' => 'Sintesi della NIS2 per una PMI']),
]);
$data = json_decode(curl_exec($ch), true);
Errori
Tutti gli errori rispondono con {"ok": false, "error": "messaggio leggibile", "ref": "codice"}. Comunica il codice ref al supporto per l'analisi.
| Codice | Significato |
|---|---|
| 400 | Richiesta non valida (campo mancante o formato errato) |
| 401 | Chiave assente, errata o revocata |
| 404 | Conversazione o messaggio non trovati per il tuo account |
| 413 | Richiesta troppo grande per il modello |
| 429 | Limite raggiunto: rispetta Retry-After |
| 503 | Manutenzione o motore non configurato |