Skip to content

HTTP API ​

Базовый путь /v1 на gateway (http://localhost:8080/v1 в примерах).

  • Каждый запрос — с Authorization: Bearer <BOT_TOKEN>. Без него — только GET /healthz и POST /hooks/<секрет>.
  • Тела — JSON (Content-Type: application/json), если не сказано иное.
  • id — строки, время — Unix в миллисекундах.
  • id личного чата — id собеседника.
  • Запросы, которым нечего вернуть, отвечают {}.

Ошибки ​

Ошибка — HTTP-код и тело:

json
{"error": "message text is too long", "code": "bad_request"}
codeКодКогда
unauthorized401Нет токена или он неверный.
bad_request400Неверные параметры или отказ ядра: слишком длинный текст, чужое сообщение, закрытый опрос…
not_found404Нет такого чата, сообщения, хука или пути.
webhook409GET /v1/updates при заданном webhook или UPDATES=off.

Бот ​

Получить бота ​

http
GET /v1/me

→ {id, name, invite_url, about, commands}. invite_url — ссылка, открывающая чат с ботом в приложениях.

Сменить имя или описание ​

http
PATCH /v1/me
{"name": "Погода", "about": "Прогноз для любого города"}

Не указанные поля остаются как есть. about — до 512 символов.

Задать команды ​

http
PUT /v1/me/commands
{"commands": [{"name": "weather", "description": "Прогноз", "args": "<город>"}]}

До 100 команд; [] — убрать. См. Команды и кнопки.

Задать аватар ​

http
PUT /v1/me/avatar
Content-Type: image/jpeg

<байты картинки>

JPEG, PNG или WebP до 20 МБ; обрезается до квадрата и уменьшается сам.

Чаты ​

Список чатов ​

http
GET /v1/chats

→ массив Chat.

Получить чат ​

http
GET /v1/chats/{chat}

→ Chat.

Принять запрос ​

http
POST /v1/chats/{chat}/accept

Принимает запрос на переписку или приглашение в группу (нужно при ACCEPT_REQUESTS=contacts) → Chat.

Создать группу ​

http
POST /v1/groups
{"name": "Дежурные", "members": ["u7f…", "u2c…"]}

→ Chat.

Сообщения ​

Список сообщений ​

http
GET /v1/chats/{chat}/messages?before=&limit=

Сообщения из базы бота, старые первыми. before — время в мс; limit — 1–100, по умолчанию 50. → массив Message.

Получить сообщение ​

http
GET /v1/chats/{chat}/messages/{msg}

Отправить текст ​

http
POST /v1/chats/{chat}/messages
{"text": "Привет, @Анна", "reply_to": "m1…",
 "mentions": [{"user": "u7f…", "offset": 8, "length": 5}],
 "buttons": [[{"text": "OK", "data": "ok"}]]}

Обязателен только text. offset и length упоминаний — в единицах UTF-16, как длина строки в JavaScript. Кнопки: до 3 рядов по 2. → Message.

Отправить файл ​

http
POST /v1/chats/{chat}/files
Content-Type: multipart/form-data
Поле
fileФайл (до 300 МБ).
captionПодпись.
reply_toid сообщения.
kindphoto, video, voice или file; по умолчанию — по типу файла. Фото: JPEG, PNG, WebP.
duration_ms, width, heightДля видео и голосовых.

Превью фото gateway делает сам. → Message.

sh
curl -H "Authorization: Bearer $BOT_TOKEN" -F file=@chart.png -F caption='CPU за час' \
  localhost:8080/v1/chats/u7f…/files

Скачать вложение ​

http
GET /v1/chats/{chat}/messages/{msg}/file

Байты файла с его Content-Type. Скачивается и расшифровывается при первом запросе.

Изменить сообщение ​

http
PATCH /v1/chats/{chat}/messages/{msg}
{"text": "Выкачено ✅", "buttons": []}

Правит свой текст или подпись. Без text текст остаётся; без buttons кнопки остаются, [] убирает их. Сообщения с кнопками правятся в любое время. → Message.

Удалить сообщение ​

http
DELETE /v1/chats/{chat}/messages/{msg}?for=all

for=all (по умолчанию) — у всех, только свои; for=me — только в базе бота.

Реакция ​

http
PUT /v1/chats/{chat}/messages/{msg}/reaction
{"emoji": "👍"}

DELETE /v1/chats/{chat}/messages/{msg}/reaction убирает реакцию бота.

Отметить прочитанным ​

http
POST /v1/chats/{chat}/read
{"up_to": "m9…"}

Отмечает прочитанным до up_to, или всё, если он пуст.

Опросы ​

Отправить опрос ​

http
POST /v1/chats/{chat}/polls
{"question": "Обед?", "options": ["Пицца", "Хинкали"], "multiple": false,
 "close_ts": 1791373600000, "reply_to": ""}

→ Message с poll.

Проголосовать ​

http
POST /v1/chats/{chat}/messages/{msg}/vote
{"options": [1]}

Номера вариантов с 0; [] — забрать голос.

Закрыть опрос ​

http
POST /v1/chats/{chat}/messages/{msg}/close

Только свои опросы.

Кнопки ​

Ответить на нажатие ​

http
POST /v1/presses/{press_id}/answer
{"text": "Готово"}

Всплывающая строка только у нажавшего; до 200 символов, не позже минуты после нажатия.

Входящие ​

http
GET /v1/updates?offset=&timeout=&limit=

→ массив Update. См. Входящие.

Хуки ​

Доступны при заданном HOOKS_URL. См. Входящие хуки.

Запрос
GET /v1/hooks?chat=Хуки чата (без chat — все).
POST /v1/hooks {chat_id, format}Завести → {id, chat_id, format, ts, url}; url показывается только здесь.
DELETE /v1/hooks/{id}Удалить.
POST /hooks/<секрет>Отправить в хук; без токена.