LanaChat

API: Аккаунты Telegram, пулы и истории

Чтение 8 минОбновлено Markdown

Аккаунт Telegram, это один аккаунт автора, подключённый к LanaChat через бизнес-связь (бот, которого она добавляет в настройках Telegram). Аккаунты объединены в пулы: пул, это один автор, один рынок и один источник трафика, и новые разговоры с трекинговой ссылки распределяются между аккаунтами нужного пула. Истории публикуются сразу на одном или нескольких аккаунтах.

Endpoints #

MethodPathDescriptionPermissionStatus
GET/accountsСписок аккаунтов (creator_id=, health=connected,pending,expired)can_setupPlanned
POST/accountsДобавить аккаунт с токеном бота; проверяется у Telegram перед сохранениемcan_setupPlanned
GET/accounts/{id}Один аккаунт, его состояние и нагрузка за этот часcan_setupPlanned
PATCH/accounts/{id}Изменить brain, рынок, трафик, псевдоним или язык ответов; включить или выключитьcan_setupPlanned
DELETE/accounts/{id}Отключить аккаунт (разговоры сохраняются)can_setupPlanned
POST/accounts/{id}/checkПроверить соединение сейчас, не дожидаясь часовой проверкиcan_setupPlanned
GET/poolsВсе пулы с аккаунтами, ёмкостью и статусомcan_trackingPlanned
GET/pools/settingsЧасовой лимит рабочего пространства и правила распределенияcan_trackingPlanned
PUT/pools/settingsИзменить часовой лимит (от 100 до 100000) и распределениеcan_trackingPlanned
PATCH/pools/accounts/{account_id}Включить или исключить аккаунт из пула, приостановить, задать вес или часовой лимитcan_trackingPlanned
GET/pools/eventsЛог пула: ожидания flood, паузы, возобновления, удержания ссылокcan_trackingPlanned
GET/storiesОпубликованные и запланированные истории (creator_id=, status=)can_setupPlanned
POST/storiesОпубликовать историю сейчас или запланировать на одном или нескольких аккаунтахcan_setupPlanned
GET/stories/{id}Одна история с просмотрами, реакциями и кликами по ссылкамcan_setupPlanned
DELETE/stories/{id}Отменить запланированную историюcan_setupPlanned

Объект аккаунта #

{
  "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"
}
ПолеТипОписание
idstringНачинается с acc_
creator_idstringАвтор, которому принадлежит аккаунт
usernamestringTelegram @username аккаунта без символа @
bot_usernamestringБот, связанный через бизнес-связь
healthstringconnected, pending или expired
activebooleanfalse, если аккаунт выключен: AI не отвечает на нём
brain_idstring или nullAI Brain, отвечающий на этом аккаунте
pool_idstringПул, в который аккаунт попадает по тегам market и traffic
marketstringЯзыковой рынок, например fr, en, pt-BR или all
trafficstringИсточник трафика, например instagram или tiktok
story_rightsbooleanРазрешает ли бизнес-связь публиковать истории LanaChat
last_activity_atstringВремя последнего отправленного или полученного сообщения, ISO 8601 UTC
  • health может быть connected, pending (бизнес-связь ещё не подтверждена) или expired (бот потерял доступ; переподключите).
  • Токен бота никогда не возвращается. LanaChat не запрашивает номер телефона, пароль или код 2FA.

Аккаунты #

Список аккаунтов #

GET /accounts · can_setup

ПараметрТипОбязателенОписание
creator_idstringНетТолько аккаунты этого автора
healthstringНетconnected, pending или expired; несколько через запятую
limit, cursornumber, 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_idstringДаАвтор, которому принадлежит аккаунт
bot_tokenstringДаТокен бота, связанного в бизнес-настройках Telegram
marketstringНетЯзыковой рынок, например fr
trafficstringНетИсточник трафика, например 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_idstringНетBrain, который отвечает на этом аккаунте
marketstringНетЯзыковой рынок; перемещает аккаунт в соответствующий пул
trafficstringНетИсточник трафика; перемещает аккаунт в соответствующий пул
activebooleanНет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_hournumberСообщения, которые всё рабочее пространство может отправить за скользящий час, от 100 до 100000
default_limit_per_hournumberЧасовой лимит для нового аккаунта в пуле
distribution.modestringweighted (случайно, пропорционально весу аккаунта), round_robin (по очереди) или least_loaded (аккаунт с наименьшей нагрузкой)
distribution.warmupbooleanНовый аккаунт начинает с 50 сообщений в час и достигает полного лимита на 7-й день
distribution.hold_when_saturatedbooleanЕсли ни один аккаунт не может принять нового фаната, удерживать фаната до освобождения аккаунта (сначала самые старые); иначе отдавать фаната аккаунту с наименьшей нагрузкой, даже если лимит превышен

Когда рабочее пространство достигает cap_per_hour, ссылки продолжают перенаправлять, но новые разговоры удерживаются, пока часовой лимит не снизится.

Изменить настройки пула #

PUT /pools/settings · can_tracking

ПараметрТипОбязателенОписание
cap_per_hournumberДаОт 100 до 100000, целое число
default_limit_per_hournumberДаОт 10 до 1000, целое число
distributionobjectДа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_poolbooleanНетfalse исключает аккаунт из пула: разговоры сохраняются, но новых фанатов не получает
pausedbooleanНетtrue приостанавливает аккаунт в пуле
weightnumberНетОт 0 до 100; доля новых фанатов в режиме weighted (0, не получает новых фанатов)
limit_per_hournumberНетОт 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_idstringНетТолько события аккаунтов этого автора
limit, cursornumber, 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_idstringНетТолько истории этого автора
statusstringНетНапример, scheduled
limit, cursornumber, 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_idstringДаФото или видео из Vault автора
textstringНетПодпись
link_idstringНетТрекинговая ссылка, отображаемая в истории
duration_hoursnumberНетСколько часов история будет доступна
run_atstring или 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"

Отменить можно только запланированную историю.

Последние новости о Lana в Telegram

Новые релизы и приглашения в бету, первыми в канале.