API: Telegram-акаунти, пули та історії
Telegram-акаунт, це один акаунт авторки, підключений до LanaChat через бізнес-зв’язок (бот, якого вона додає у своїх налаштуваннях Telegram). Акаунти згруповані у пули: пул, це одна авторка, один ринок і одне джерело трафіку, а нові розмови з трекінгового посилання розподіляються між акаунтами потрібного пулу. Історії публікуються одночасно на одному або кількох акаунтах.
Endpoints #
| Method | Path | Description | Permission | Status |
|---|---|---|---|---|
| GET | /accounts | Список акаунтів (creator_id=, health=connected,pending,expired) | can_setup | Planned |
| POST | /accounts | Додати акаунт з токеном бота; перевіряється у Telegram перед збереженням | can_setup | Planned |
| GET | /accounts/{id} | Один акаунт, його стан і навантаження за годину | can_setup | Planned |
| PATCH | /accounts/{id} | Змінити brain, ринок, трафік, псевдонім або мову відповіді; увімкнути або вимкнути | can_setup | Planned |
| DELETE | /accounts/{id} | Відключити акаунт (розмови збережені) | can_setup | Planned |
| POST | /accounts/{id}/check | Перевірити з’єднання зараз замість очікування щогодинної перевірки | can_setup | Planned |
| GET | /pools | Кожен пул з акаунтами, місткістю та статусом | can_tracking | Planned |
| GET | /pools/settings | Щогодинний ліміт робочого простору та правила розподілу | can_tracking | Planned |
| PUT | /pools/settings | Змінити щогодинний ліміт (100-100000) і розподіл | can_tracking | Planned |
| PATCH | /pools/accounts/{account_id} | Взяти акаунт у пул або вивести з нього, призупинити, встановити вагу або ліміт за годину | can_tracking | Planned |
| GET | /pools/events | Лог пулу: очікування через flood wait, паузи, відновлення, утримання посилань | can_tracking | Planned |
| GET | /stories | Опубліковані та заплановані історії (creator_id=, status=) | can_setup | Planned |
| POST | /stories | Опублікувати історію зараз або запланувати на одному чи кількох акаунтах | can_setup | Planned |
| GET | /stories/{id} | Одна історія з переглядами, реакціями та кліками по посиланнях | can_setup | Planned |
| DELETE | /stories/{id} | Скасувати заплановану історію | can_setup | Planned |
Об’єкт акаунта #
{
"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 | string | Починається з acc_ |
creator_id | string | Авторка, якій належить акаунт |
username | string | Telegram @username акаунта без знаку @ |
bot_username | string | Бот, пов’язаний через бізнес-зв’язок |
health | string | connected, pending або expired |
active | boolean | false, якщо акаунт вимкнено: AI не відповідає |
brain_id | string або null | AI Brain, що відповідає на цьому акаунті |
pool_id | string | Пул, до якого належить акаунт за тегами market і traffic |
market | string | Ринок мови, наприклад fr, en, pt-BR або all |
traffic | string | Джерело трафіку, наприклад instagram або tiktok |
story_rights | boolean | Чи дозволяє бізнес-зв’язок LanaChat публікувати історії |
last_activity_at | string | Час останнього надісланого або отриманого повідомлення, ISO 8601 UTC |
healthможе бутиconnected,pending(бізнес-зв’язок ще не підтверджено) абоexpired(бот втратив доступ; потрібно перепідключити).- Токен бота ніколи не повертається. LanaChat ніколи не запитує номер телефону, пароль або код 2FA.
Акаунти #
Список акаунтів #
GET /accounts · can_setup
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
creator_id | string | Ні | Тільки акаунти цієї авторки |
health | string | Ні | connected, pending або expired; кілька через кому |
limit, cursor | number, string | Ні | Пагінація |
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
}
Додати акаунт #
POST /accounts · can_setup
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
creator_id | string | Так | Авторка, якій належить акаунт |
bot_token | string | Так | Токен бота, якого вона пов’язала у бізнес-налаштуваннях Telegram |
market | string | Ні | Ринок мови, наприклад fr |
traffic | string | Ні | Джерело трафіку, наприклад 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
}
Відповідь, акаунт (201) зі статусом health: "pending" до підтвердження бізнес-зв’язку авторкою в Telegram. Токен бота перевіряється у Telegram перед збереженням: токен, який Telegram відхиляє, повертає 400. Акаунт, що вже активний в іншому робочому просторі, відхиляється (409). Кожен акаунт потребує ліцензії для відповіді: див. Billing.
Отримати акаунт #
GET /accounts/{id} · can_setup
curl https://api.lanachat.ai/v1/accounts/acc_1001 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Відповідь, об’єкт акаунта з навантаженням за годину. Невідомий id повертає 404.
Оновити акаунт #
PATCH /accounts/{id} · can_setup
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
brain_id | string | Ні | Brain, що відповідає на цьому акаунті |
market | string | Ні | Ринок мови; переміщує акаунт у відповідний пул |
traffic | string | Ні | Джерело трафіку; переміщує акаунт у відповідний пул |
active | boolean | Ні | false вимикає акаунт, true вмикає назад |
Псевдонім і мову відповіді акаунта можна змінити так само.
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}'
Відповідь, оновлений акаунт. Вимкнення останнього акаунта відправлення авторки, яка має активні посилання, повертає 409.
Відключити акаунт #
DELETE /accounts/{id} · can_setup
curl -X DELETE https://api.lanachat.ai/v1/accounts/acc_1004 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Розмови збережені. Видалення останнього акаунта відправлення авторки з активними посиланнями повертає 409.
Перевірити з’єднання зараз #
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 перевіряє кожен акаунт раз на годину; цей виклик перевіряє негайно. Відповідь, акаунт з оновленим health.
Пули #
Пул формується тегами акаунтів (market і traffic); створювати його не потрібно. Нова розмова потрапляє у пул, де трафік відповідає джерелу посилання, а ринок, мові фана, потім у пул "All traffic" авторки, потім у будь-який її пул, що ще відправляє. Існуючі розмови завжди залишаються на своєму акаунті.
Список пулів #
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 може бути sending, near (80% місткості), saturated (95%) або none (немає акаунтів, що відправляють).
Отримати налаштування пулу #
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 }
}
| Поле | Тип | Опис |
|---|---|---|
cap_per_hour | number | Кількість повідомлень, які весь робочий простір може відправити за скользьку годину, від 100 до 100000 |
default_limit_per_hour | number | Ліміт за годину для нового акаунта в пулі |
distribution.mode | string | weighted (випадково пропорційно вазі акаунта), round_robin (по черзі), least_loaded (акаунт з найменшим навантаженням) |
distribution.warmup | boolean | Новий акаунт починає з 50 повідомлень за годину, досягає повного ліміту на 7-й день |
distribution.hold_when_saturated | boolean | Якщо жоден акаунт не може прийняти нового фана, утримувати фана до звільнення акаунта (спочатку найстаріший); інакше віддавати фана акаунту з найменшим навантаженням навіть понад ліміт |
Коли робочий простір досягає cap_per_hour, посилання продовжують перенаправляти, але нові розмови утримуються, доки ліміт не знизиться.
Змінити налаштування пулу #
PUT /pools/settings · can_tracking
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
cap_per_hour | number | Так | 100-100000, ціле число |
default_limit_per_hour | number | Так | 10-1000, ціле число |
distribution | object | Так | mode, warmup і hold_when_saturated, як вище |
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}}'
Відповідь, нові налаштування. Ліміт поза 100-100000 повертає 400.
Змінити акаунт у пулі #
PATCH /pools/accounts/{account_id} · can_tracking
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
in_pool | boolean | Ні | false виводить акаунт з пулу: розмови збережені, але нові фани не надходять |
paused | boolean | Ні | true призупиняє акаунт у пулі |
weight | number | Ні | 0-100; частка нових фанів у режимі weighted (0 означає без нових фанів) |
limit_per_hour | number | Ні | 10-1000 повідомлень за годину для цього акаунта |
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,activeабоflood_wait: при Telegram flood wait акаунт призупиняється доflood_wait_until, потім автоматично відновлюється.- Під час розігріву (
warmup_dayвід 1 до 7) акаунт відправляє менше заlimit_per_hour: 50 повідомлень за годину в перший день, повний ліміт на 7-й. - Виведення, пауза або видалення останнього акаунта відправлення авторки з активними посиланнями відхиляється (
409).
Прочитати лог пулу #
GET /pools/events · can_tracking
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
creator_id | string | Ні | Тільки події акаунтів цієї авторки |
limit, cursor | number, string | Ні | Пагінація |
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, flood_wait, account_paused, resumed, link_paused (досягнуто ліміт робочого простору, нові фани утримуються), account_added, account_removed або settings. text, просте речення англійською.
Історії #
Список історій #
GET /stories · can_setup
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
creator_id | string | Ні | Тільки історії цієї авторки |
status | string | Ні | Наприклад, scheduled |
limit, cursor | number, string | Ні | Пагінація |
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
}
Опублікувати історію #
POST /stories · can_setup
| Параметр | Тип | Обов’язковий | Опис |
|---|---|---|---|
account_ids | масив рядків | Так | Акаунти, що публікують історію |
media_id | string | Так | Фото або відео з Vault авторки |
text | string | Ні | Підпис |
link_id | string | Ні | Трекінгове посилання, що показується в історії |
duration_hours | number | Ні | Як довго історія буде доступна |
run_at | string або null | Ні | Коли опублікувати (ISO 8601 UTC); пропустити, щоб опублікувати зараз |
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"] }
Акаунт без права "manage stories" у бізнес-зв’язку (story_rights: false) отримує відмову з причиною у message.
Отримати історію #
GET /stories/{id} · can_setup
curl https://api.lanachat.ai/v1/stories/sto_88 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Відповідь, історія з переглядами, реакціями та кліками по посиланнях після публікації.
Скасувати заплановану історію #
DELETE /stories/{id} · can_setup
curl -X DELETE https://api.lanachat.ai/v1/stories/sto_88 \
-H "Authorization: Bearer $LANACHAT_TOKEN"
Можна скасувати лише заплановану історію.