LanaChat

API : Comptes Telegram, pools et stories

Lecture de 8 minMis à jour Markdown

Un compte Telegram est un compte d’une créatrice, connecté à LanaChat via une connexion business (un bot qu’elle ajoute dans ses paramètres Telegram). Les comptes sont regroupés en pools : un pool correspond à une créatrice, un marché et une source de trafic, et les nouvelles conversations issues d’un lien de tracking sont réparties entre les comptes d’envoi du pool adéquat. Les stories sont publiées sur un ou plusieurs comptes simultanément.

Endpoints #

MéthodeCheminDescriptionPermissionStatut
GET/accountsListe des comptes (creator_id=, health=connected,pending,expired)can_setupPlanned
POST/accountsAjouter un compte avec son token de bot ; vérifié avec Telegram avant sauvegardecan_setupPlanned
GET/accounts/{id}Un compte, son état et sa charge cette heurecan_setupPlanned
PATCH/accounts/{id}Modifier son brain, marché, trafic, alias ou langue de réponse ; l’activer ou le désactivercan_setupPlanned
DELETE/accounts/{id}Déconnecter le compte (ses conversations sont conservées)can_setupPlanned
POST/accounts/{id}/checkTester la connexion immédiatement au lieu d’attendre la vérification horairecan_setupPlanned
GET/poolsTous les pools avec leurs comptes, capacité et statutcan_trackingPlanned
GET/pools/settingsPlafond horaire de l’espace de travail et règles de distributioncan_trackingPlanned
PUT/pools/settingsModifier le plafond horaire (100 à 100 000) et la distributioncan_trackingPlanned
PATCH/pools/accounts/{account_id}Ajouter ou retirer un compte du pool, le mettre en pause, définir son poids ou sa limite horairecan_trackingPlanned
GET/pools/eventsJournal du pool : attentes flood, pauses, reprises, liens en attentecan_trackingPlanned
GET/storiesStories publiées et programmées (creator_id=, status=)can_setupPlanned
POST/storiesPublier une story maintenant ou la programmer sur un ou plusieurs comptescan_setupPlanned
GET/stories/{id}Une story avec ses vues, réactions et clics sur lienscan_setupPlanned
DELETE/stories/{id}Annuler une story programméecan_setupPlanned

L’objet compte #

{
  "id": "acc_1001",
  "creator_id": "cr_lea",
  "username": "lea_officiel",
  "bot_username": "lea_helper_bot",
  "health": "connected",
  "active": true,
  "brain_id": "br_lea_main",
  "pool_id": "pool_lea_fr_instagram",
  "market": "fr",
  "traffic": "instagram",
  "story_rights": true,
  "last_activity_at": "2026-10-06T13:58:20Z"
}
ChampTypeDescription
idstringCommence par acc_
creator_idstringLa créatrice à laquelle ce compte appartient
usernamestringLe @username Telegram du compte, sans le @
bot_usernamestringLe bot lié via la connexion business
healthstringconnected, pending ou expired
activebooleanfalse quand le compte est désactivé : l’IA ne répond plus dessus
brain_idstring ou nullLe AI Brain qui répond sur ce compte
pool_idstringLe pool dans lequel ses tags market et traffic le placent
marketstringMarché linguistique, par exemple fr, en, pt-BR ou all
trafficstringSource de trafic, par exemple instagram ou tiktok
story_rightsbooleanSi la connexion business autorise LanaChat à publier des stories
last_activity_atstringDernier message envoyé ou reçu, ISO 8601 UTC
  • health est connected, pending (la connexion business n’est pas encore confirmée) ou expired (le bot a perdu l’accès ; reconnectez-le).
  • Le token du bot n’est jamais retourné. LanaChat ne demande jamais de numéro de téléphone, mot de passe ou code 2FA.

Comptes #

Lister les comptes #

GET /accounts · can_setup

ParamètreTypeObligatoireDescription
creator_idstringNonSeulement les comptes de cette créatrice
healthstringNonconnected, pending ou expired ; plusieurs séparés par des virgules
limit, cursornumber, stringNonPagination
curl "https://api.lanachat.ai/v1/accounts?creator_id=cr_lea&health=connected,expired" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [
    { "id": "acc_1001", "creator_id": "cr_lea", "username": "lea_officiel", "bot_username": "lea_helper_bot", "health": "connected", "active": true, "brain_id": "br_lea_main", "pool_id": "pool_lea_fr_instagram", "market": "fr", "traffic": "instagram", "story_rights": true, "last_activity_at": "2026-10-06T13:58:20Z" },
    { "id": "acc_1004", "creator_id": "cr_lea", "username": "lea_backup", "bot_username": "lea_helper2_bot", "health": "connected", "active": true, "brain_id": "br_lea_main", "pool_id": "pool_lea_fr_instagram", "market": "fr", "traffic": "instagram", "story_rights": false, "last_activity_at": "2026-10-06T13:51:02Z" }
  ],
  "next_cursor": null
}

Ajouter un compte #

POST /accounts · can_setup

ParamètreTypeObligatoireDescription
creator_idstringOuiLa créatrice à laquelle appartient le compte
bot_tokenstringOuiLe token du bot qu’elle a lié dans ses paramètres Telegram Business
marketstringNonMarché linguistique, par exemple fr
trafficstringNonSource de trafic, par exemple instagram
curl -X POST https://api.lanachat.ai/v1/accounts \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"creator_id": "cr_lea", "bot_token": "<bot token>", "market": "fr", "traffic": "instagram"}'
{
  "id": "acc_1007",
  "creator_id": "cr_lea",
  "username": "lea_officiel",
  "bot_username": "lea_helper_bot",
  "health": "pending",
  "active": true,
  "brain_id": "br_lea_main",
  "pool_id": "pool_lea_fr_instagram",
  "market": "fr",
  "traffic": "instagram",
  "story_rights": false,
  "last_activity_at": null
}

La réponse est le compte (201) avec health: "pending" jusqu’à ce que la créatrice confirme la connexion business dans Telegram. Le token du bot est vérifié avec Telegram avant toute sauvegarde : un token refusé par Telegram répond 400. Un compte déjà actif dans un autre workspace est refusé (409). Chaque compte nécessite une licence pour répondre : voir Billing.

Obtenir un compte #

GET /accounts/{id} · can_setup

curl https://api.lanachat.ai/v1/accounts/acc_1001 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

La réponse est l’objet compte, avec sa charge cette heure. Un id inconnu répond 404.

Mettre à jour un compte #

PATCH /accounts/{id} · can_setup

ParamètreTypeObligatoireDescription
brain_idstringNonLe brain qui répond sur ce compte
marketstringNonMarché linguistique ; déplace le compte dans le pool correspondant
trafficstringNonSource de trafic ; déplace le compte dans le pool correspondant
activebooleanNonfalse désactive le compte, true le réactive

L’alias et la langue de réponse du compte peuvent être modifiés de la même manière.

curl -X PATCH https://api.lanachat.ai/v1/accounts/acc_1004 \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"traffic": "tiktok", "active": true}'

La réponse est le compte mis à jour. Désactiver le dernier compte d’envoi d’une créatrice ayant des liens actifs répond 409.

Déconnecter un compte #

DELETE /accounts/{id} · can_setup

curl -X DELETE https://api.lanachat.ai/v1/accounts/acc_1004 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Ses conversations sont conservées. Supprimer le dernier compte d’envoi d’une créatrice ayant des liens actifs répond 409.

Vérifier la connexion immédiatement #

POST /accounts/{id}/check · can_setup

curl -X POST https://api.lanachat.ai/v1/accounts/acc_1001/check \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)"

LanaChat vérifie chaque compte toutes les heures ; cet appel teste la connexion immédiatement. La réponse est le compte avec son health actualisé.

Pools #

Un pool est formé par les tags (market et traffic) de ses comptes ; il n’y a rien à créer. Une nouvelle conversation va dans le pool dont le trafic correspond à la source du lien et dont le marché correspond à la langue du fan, puis dans le pool "All traffic" de la créatrice, puis dans n’importe lequel de ses pools encore actif. Les conversations existantes restent toujours sur leur compte.

Lister les pools #

GET /pools · can_tracking

curl https://api.lanachat.ai/v1/pools \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [
    {
      "id": "pool_lea_fr_instagram",
      "name": "French · Instagram",
      "creator_id": "cr_lea",
      "accounts": ["acc_1001", "acc_1004"],
      "sent_last_hour": 312,
      "capacity_per_hour": 400,
      "status": "near"
    }
  ],
  "next_cursor": null
}

status est sending, near (80 % de sa capacité), saturated (95 %) ou none (pas de compte d’envoi).

Obtenir les réglages du pool #

GET /pools/settings · can_tracking

curl https://api.lanachat.ai/v1/pools/settings \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "cap_per_hour": 2000,
  "default_limit_per_hour": 200,
  "distribution": { "mode": "weighted", "warmup": true, "hold_when_saturated": true }
}
ChampTypeDescription
cap_per_hournumberNombre de messages que tout l’espace de travail peut envoyer sur une heure glissante, 100 à 100 000
default_limit_per_hournumberLimite horaire donnée à un nouveau compte dans le pool
distribution.modestringweighted (aléatoire, proportionnel au poids de chaque compte), round_robin (chaque compte à son tour) ou least_loaded (le compte le plus éloigné de sa limite)
distribution.warmupbooleanUn nouveau compte commence à 50 messages par heure et atteint sa limite complète au jour 7
distribution.hold_when_saturatedbooleanQuand aucun compte ne peut prendre un nouveau fan, retenir le fan jusqu’à ce qu’un compte se libère, du plus ancien au plus récent ; sinon donner le fan au compte le moins chargé même au-delà de sa limite

Quand l’espace de travail atteint cap_per_hour, les liens continuent de rediriger mais les nouvelles conversations sont retenues jusqu’à ce que l’heure glissante repasse sous le plafond.

Modifier les réglages du pool #

PUT /pools/settings · can_tracking

ParamètreTypeObligatoireDescription
cap_per_hournumberOui100 à 100 000, entier
default_limit_per_hournumberOui10 à 1 000, entier
distributionobjectOuimode, warmup et hold_when_saturated, comme ci-dessus
curl -X PUT https://api.lanachat.ai/v1/pools/settings \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"cap_per_hour": 3000, "default_limit_per_hour": 200, "distribution": {"mode": "least_loaded", "warmup": true, "hold_when_saturated": true}}'

La réponse est les nouveaux réglages. Un plafond hors de 100 à 100 000 répond 400.

Modifier un compte dans le pool #

PATCH /pools/accounts/{account_id} · can_tracking

ParamètreTypeObligatoireDescription
in_poolbooleanNonfalse retire le compte du pool : il conserve ses conversations mais ne reçoit plus de nouveaux fans
pausedbooleanNontrue le met en pause dans le pool
weightnumberNon0 à 100 ; part des nouveaux fans en mode weighted (0 autorisé : pas de nouveau fan)
limit_per_hournumberNon10 à 1 000 messages par heure pour ce compte
curl -X PATCH https://api.lanachat.ai/v1/pools/accounts/acc_1004 \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"weight": 40, "limit_per_hour": 300}'
{
  "account_id": "acc_1004",
  "creator_id": "cr_lea",
  "username": "lea_backup",
  "in_pool": true,
  "paused": false,
  "weight": 40,
  "limit_per_hour": 300,
  "sent_last_hour": 88,
  "new_conversations_today": 41,
  "state": "active",
  "flood_wait_until": null,
  "warmup_day": 7,
  "added_at": "2026-09-20T10:00:00Z"
}
  • state est active ou flood_wait : en cas d’attente flood Telegram, le compte se met en pause jusqu’à flood_wait_until, puis reprend automatiquement.
  • Pendant la montée en charge (warmup_day 1 à 7), le compte envoie moins que sa limit_per_hour : 50 messages à l’heure au jour 1, limite complète au jour 7.
  • Retirer, mettre en pause ou supprimer le dernier compte d’envoi d’une créatrice ayant des liens actifs est refusé (409).

Lire le journal du pool #

GET /pools/events · can_tracking

ParamètreTypeObligatoireDescription
creator_idstringNonSeulement les événements des comptes de cette créatrice
limit, cursornumber, stringNonPagination
curl "https://api.lanachat.ai/v1/pools/events?creator_id=cr_lea&limit=2" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [
    { "at": "2026-10-06T13:40:12Z", "kind": "resumed", "creator_id": "cr_lea", "account_id": "acc_1004", "text": "@lea_backup is sending again." },
    { "at": "2026-10-06T13:25:12Z", "kind": "flood_wait", "creator_id": "cr_lea", "account_id": "acc_1004", "text": "@lea_backup hit a Telegram flood wait of 900 seconds." }
  ],
  "next_cursor": "eyJhdCI6IjIwMjYtMTAtMDZUMTM6MjU6MTJaIn0"
}

kind est flood_wait, account_paused, resumed, link_paused (le plafond workspace a été atteint, les nouveaux fans sont retenus), account_added, account_removed ou settings. text est une phrase en anglais simple.

Stories #

Lister les stories #

GET /stories · can_setup

ParamètreTypeObligatoireDescription
creator_idstringNonSeulement les stories de cette créatrice
statusstringNonPar exemple scheduled
limit, cursornumber, stringNonPagination
curl "https://api.lanachat.ai/v1/stories?creator_id=cr_lea&status=scheduled" \
  -H "Authorization: Bearer $LANACHAT_TOKEN"
{
  "data": [ { "id": "sto_88", "status": "scheduled", "run_at": "2026-10-06T19:00:00Z", "account_ids": ["acc_1001", "acc_1004"] } ],
  "next_cursor": null
}

Publier une story #

POST /stories · can_setup

ParamètreTypeObligatoireDescription
account_idstableau de stringsOuiLes comptes qui la publient
media_idstringOuiUne photo ou vidéo du Vault de la créatrice
textstringNonLégende
link_idstringNonUn lien de tracking affiché sur la story
duration_hoursnumberNonDurée de visibilité de la story
run_atstring ou nullNonMoment de publication (ISO 8601 UTC) ; omettez pour publier immédiatement
curl -X POST https://api.lanachat.ai/v1/stories \
  -H "Authorization: Bearer $LANACHAT_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"account_ids": ["acc_1001", "acc_1004"], "media_id": "med_5521", "text": "New set tonight", "link_id": "lnk_3", "duration_hours": 24, "run_at": "2026-10-06T19:00:00Z"}'
{ "id": "sto_88", "status": "scheduled", "run_at": "2026-10-06T19:00:00Z", "account_ids": ["acc_1001", "acc_1004"] }

Un compte sans le droit "manage stories" dans sa connexion business (story_rights: false) est refusé, avec la raison dans message.

Obtenir une story #

GET /stories/{id} · can_setup

curl https://api.lanachat.ai/v1/stories/sto_88 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

La réponse est la story avec ses vues, réactions et clics sur liens une fois publiée.

Annuler une story programmée #

DELETE /stories/{id} · can_setup

curl -X DELETE https://api.lanachat.ai/v1/stories/sto_88 \
  -H "Authorization: Bearer $LANACHAT_TOKEN"

Seule une story programmée peut être annulée.

Les dernières nouvelles de Lana sur Telegram

Nouveautés et invitations à la bêta, en premier sur le canal.