Партнёрская документация — управляемые Telegram-аккаунты
Каждый запрос — с заголовком Authorization: Bearer <token>. Для POST — Content-Type: application/json.
https://telegramilti.com/api/v1/gateway
/api/v1/gateway (короткий /gateway/… → 404).
Не путать с /api/v1/accounts — там другая авторизация (по owner_user_id, без Bearer);
gateway-токен туда слать нельзя (Session is invalid).
Список всех управляемых аккаунтов.
curl -sS "https://telegramilti.com/api/v1/gateway/bots" \
-H "Authorization: Bearer $TOKEN"
{ "bots": [ Bot, … ] }
Один аккаунт по bot_tg_id.
curl -sS "https://telegramilti.com/api/v1/gateway/bots/get" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"bot_tg_id":"8160200298"}'
Bot (404, если не найден)Ротация: усыпить аккаунт (AUTO-выбор его пропустит; явный вызов по bot_tg_id всё равно сработает) / разбудить.
curl -sS "…/api/v1/gateway/bots/sleep" -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" -d '{"bot_tg_id":"816…","seconds":300}'
# разбудить: POST /bots/wake {"bot_tg_id":"816…"}
{ "bot_tg_id":"…", "sleeping":true|false, "sleep_until":<ts>|null }
{
"bot_tg_id": "8160200298",
"username": "solo_lux_man",
"display_name": "Snowy",
"is_premium": false,
"status": "available",
"status_reason": null,
"flood_wait_until": null,
"sleep_until": null,
"meta": { "internal_account_id": "…", "phone": "+8190…" },
"last_seen_at": 1783071435
}
| Поле | Тип | Описание |
|---|---|---|
| bot_tg_id | string | Telegram user id (числом). Если не резолвнулся — придёт внутренний UUID + status=unknown: не использовать. |
| username | string · null | @username без «@». |
| display_name | string · null | Имя профиля. |
| is_premiumNEW | bool | Есть ли у аккаунта Telegram Premium. |
| status | enum | available · unavailable · unknown |
| status_reason | string · null | Причина, когда не available (см. ниже). |
| flood_wait_until | int · null | Unix ts (сек) — до конца флуд-ожидания. |
| sleep_until | int · null | Unix ts (сек) — окно «сна»/ротации. |
| meta | object | internal_account_id, phone. |
| last_seen_at | int · null | Unix ts (сек) последней проверки. |
available — можно таргетить.
unavailable — временно нельзя; смотри status_reason:
flood_waitlimitedfrozenbanneddeadauth_requiredsleeping
unknown — состояние неизвестно (unresolved — не резолвнулся tg id, либо error). Не таргетить.
401 нет / невалидный / отозванный токен
404 бот не найден
422 ошибка валидации тела
429 rate-limit (заголовок Retry-After, сек)
Когда отправка вернула source_context_unavailable, в error приходит подсказка
suggested_action: "join_source_chat" + join_chat_peer_id.
Аккаунт вступает в этот чат и повторяет отправку.
operation_id (повтор с тем же id вернёт тот же оп).{
"operation_id": "<uuid>",
"bot_tg_id": "8160200298",
"chat": { "type": "username", "username": "source_channel" }
// либо: "chat": { "type": "invite_link", "invite_link": "https://t.me/+abc…" }
}
{
"operation": { "type":"join_chat", "status":"succeeded", // pending|running|succeeded|failed
"error":null, "result":{…}, "created_at":…, "updated_at":… },
"membership": { "chat_peer_id":"…", "status":"joined", … } // null, если ещё нет
}
membership.status = "join_request_sent",
ждём ручного одобрения. Обойти нельзя — это гейт на стороне Telegram. Как одобрят — статус станет
joined, тогда повторяй отправку.
Статусы membership: joinedjoiningjoin_request_sentbannedrestrictedunknown
Чтение входящих ЛС аккаунтов через Bot API (в обход MTProto) — для быстрых ответов бота.
Список диалогов (собеседников).
// body: { "bot_tg_id":"…"?, "limit":50, "offset":0 }
// resp: { "dialogs": [ { bot_tg_id, user_tg_id, username, source, related_chat_peer_id, last_message_at } ] }
Сообщения одного диалога.
// body: { "bot_tg_id":"…", "user_tg_id":"…", "from_tg_message_id":null?, "to_tg_message_id":null? }
// resp: { "dialog_info":{…}, "messages":[ { sender:{type:"bot|user",tg_id}, tg_message_id, text, entities:[], sent_at, received_at } ] }
Лента новых сообщений по окну времени сохранения (для поллинга входящих).
// body: { "stored_after":<ts>, "stored_before":<ts>, "bot_tg_ids":["…"]?, "limit":1000, "offset":0 }
// resp: { "messages":[ { bot_tg_id, user_tg_id, stored_at, sender, tg_message_id, text, entities, sent_at, received_at } ] }