API: AI Brains, bozze e il Playground
Un AI Brain contiene come l'AI vende per una creator: le sue fasi di vendita, regole e impostazioni. Modifichi una bozza, la testi nel Playground, poi la pubblichi; il brain live cambia solo alla pubblicazione. Un brain è collegato a una sola creator e può essere riutilizzato dai suoi account.
Endpoints #
| Method | Path | Descrizione | Permesso | Stato |
|---|---|---|---|---|
| GET | /brains | Elenca i brain (creator_id=) | can_engine | Planned |
| POST | /brains | Crea un brain per una creator, vuoto o copiato da un altro (copy_from) | can_engine | Planned |
| GET | /brains/{id} | La versione live di un brain | can_engine | Planned |
| PATCH | /brains/{id} | Rinomina o collega a un'altra creator | can_engine | Planned |
| DELETE | /brains/{id} | Elimina un brain non usato da nessun account | can_engine | Planned |
| GET | /brains/{id}/draft | La bozza corrente e cosa differisce dal live | can_engine | Planned |
| PATCH | /brains/{id}/draft | Modifica la bozza (fasi, regole, impostazioni) | can_engine | Planned |
| DELETE | /brains/{id}/draft | Elimina la bozza | can_engine | Planned |
| POST | /brains/{id}/publish | Pubblica la bozza; diventa live su tutti gli account collegati | can_publish | Planned |
| GET | /brains/{id}/versions | Versioni pubblicate, dalla più recente | can_engine | Planned |
| POST | /brains/{id}/versions/{version}/restore | Copia una vecchia versione nella bozza | can_engine | Planned |
| POST | /playground/{brain_id}/message | Invia un messaggio di test alla bozza e ricevi la risposta AI | can_engine | Planned |
| DELETE | /playground/{brain_id}/session | Ricomincia la conversazione di test | can_engine | Planned |
L'oggetto brain #
{
"id": "br_lea_main",
"name": "Lea · main",
"creator_id": "cr_lea",
"version": 12,
"published_at": "2026-10-04T21:10:00Z",
"has_draft": true,
"accounts": ["acc_1001", "acc_1004"],
"phases": [
{ "key": "warm_up", "name": "Warm up", "enabled": true },
{ "key": "first_offer", "name": "First offer", "enabled": true }
]
}
| Campo | Tipo | Descrizione |
|---|---|---|
id | string | Inizia con br_ |
name | string | Il suo nome nella Console |
creator_id | string | La creator a cui è collegato |
version | number | La versione live; aumenta di uno a ogni pubblicazione |
published_at | string o null | Quando la versione live è stata pubblicata, ISO 8601 UTC |
has_draft | boolean | true se esiste una bozza diversa dalla versione live |
accounts | array di stringhe | Account Telegram che rispondono con questo brain |
phases | array | Fasi di vendita: key, name e se ciascuna è enabled |
Brain #
Elenca brain #
GET /brains · can_engine
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
creator_id | string | No | Solo i brain di questa creator |
limit, cursor | number, string | No | Paginazione |
curl "https://api.lanachat.ai/v1/brains?creator_id=cr_lea" \
-H "Authorization: Bearer $LANACHAT_TOKEN"
{
"data": [
{ "id": "br_lea_main", "name": "Lea · main", "creator_id": "cr_lea", "version": 12, "published_at": "2026-10-04T21:10:00Z", "has_draft": true, "accounts": ["acc_1001", "acc_1004"], "phases": [ { "key": "warm_up", "name": "Warm up", "enabled": true }, { "key": "first_offer", "name": "First offer", "enabled": true } ] }
],
"next_cursor": null
}
Crea un brain #
POST /brains · can_engine
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
creator_id | string | Sì | La creator per cui è |
name | string | No | Il suo nome nella Console |
copy_from | string | No | Id di un brain da copiare; senza di esso il brain parte vuoto |
curl -X POST https://api.lanachat.ai/v1/brains \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"creator_id": "cr_lea", "name": "Lea · TikTok test", "copy_from": "br_lea_main"}'
La risposta è il nuovo brain (201). Un copy_from che non esiste in questo workspace risponde 404.
Ottieni un brain #
GET /brains/{id} · can_engine
curl https://api.lanachat.ai/v1/brains/br_lea_main \
-H "Authorization: Bearer $LANACHAT_TOKEN"
La risposta è la versione live, come l'oggetto brain. La bozza si legge con GET /brains/{id}/draft.
Rinomina o ricollega un brain #
PATCH /brains/{id} · can_engine
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | No | Nuovo nome |
creator_id | string | No | Collegalo a un'altra creator |
curl -X PATCH https://api.lanachat.ai/v1/brains/br_lea_main \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Lea · main FR"}'
La risposta è il brain aggiornato.
Elimina un brain #
DELETE /brains/{id} · can_engine
curl -X DELETE https://api.lanachat.ai/v1/brains/br_lea_old \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Un brain ancora usato da un account viene rifiutato (409): collega prima quegli account a un altro brain.
Bozze e pubblicazione #
Leggi la bozza #
GET /brains/{id}/draft · can_engine
curl https://api.lanachat.ai/v1/brains/br_lea_main/draft \
-H "Authorization: Bearer $LANACHAT_TOKEN"
La risposta è la bozza corrente (fasi, regole e impostazioni) e cosa differisce dalla versione live.
Modifica la bozza #
PATCH /brains/{id}/draft · can_engine
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
phases | array | No | Fasi di vendita da modificare |
rules | array | No | Regole da modificare |
settings | object | No | Impostazioni da modificare, per esempio first_offer_after_messages o max_discount_percent |
curl -X PATCH https://api.lanachat.ai/v1/brains/br_lea_main/draft \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"settings": {"first_offer_after_messages": 6, "max_discount_percent": 20}}'
Cambiano solo i campi che invii. Il brain live non si modifica finché non pubblichi.
Elimina la bozza #
DELETE /brains/{id}/draft · can_engine
curl -X DELETE https://api.lanachat.ai/v1/brains/br_lea_main/draft \
-H "Authorization: Bearer $LANACHAT_TOKEN"
La bozza viene eliminata; la versione live resta com'è e has_draft diventa false.
Pubblica la bozza #
POST /brains/{id}/publish · can_publish
curl -X POST https://api.lanachat.ai/v1/brains/br_lea_main/publish \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"
{ "id": "br_lea_main", "version": 13, "published_at": "2026-10-06T14:20:03Z", "has_draft": false }
La bozza diventa live su ogni account collegato. Pubblicare senza bozza risponde 409. I profili AI avanzati richiedono permessi proprietario, come nella Console. Un webhook brain.published avvisa il tuo server.
Versioni #
Elenca versioni #
GET /brains/{id}/versions · can_engine
curl https://api.lanachat.ai/v1/brains/br_lea_main/versions \
-H "Authorization: Bearer $LANACHAT_TOKEN"
La risposta elenca le versioni pubblicate, dalla più recente, paginata.
Ripristina una versione #
POST /brains/{id}/versions/{version}/restore · can_engine
curl -X POST https://api.lanachat.ai/v1/brains/br_lea_main/versions/11/restore \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)"
La vecchia versione viene copiata nella bozza. Per i fan non cambia nulla finché non pubblichi. Una versione sconosciuta risponde 404.
Playground #
Il Playground parla con la bozza, mai con un fan. Nulla viene inviato su Telegram e nulla viene venduto.
Invia un messaggio di test #
POST /playground/{brain_id}/message · can_engine
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
text | string | Sì | Cosa scrive il fan di test |
fan | object | No | Il fan di test: language (per esempio en) e is_new |
curl -X POST https://api.lanachat.ai/v1/playground/br_lea_main/message \
-H "Authorization: Bearer $LANACHAT_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"text": "hey, are you real?", "fan": {"language": "en", "is_new": true}}'
{
"reply": { "text": "Haha very real, just slow at typing 🙈 where are you from?", "media": [] },
"phase": "warm_up",
"explain": "Phrase bank answer for \"Are you a bot?\", then a question to keep the fan talking."
}
replyè ciò che l'AI invierebbe: testo e media.phaseè la fase di vendita in cui si trova l'AI.explainspiega in parole semplici perché ha risposto così.
Ogni chiamata continua la stessa conversazione di test.
Ricomincia la conversazione di test #
DELETE /playground/{brain_id}/session · can_engine
curl -X DELETE https://api.lanachat.ai/v1/playground/br_lea_main/session \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Il prossimo messaggio di test inizia una nuova conversazione, come un fan nuovo.