{"name":"MAX Bot API","vendor":"MAX (VK)","industry":"communications","summary":"HTTP API для ботов мессенджера MAX: информация о боте, отправка, редактирование, удаление и получение сообщений, ответы на нажатия кнопок, загрузка файлов, управление чатами и участниками. Получать события можно через Webhook-подписку (рекомендуется для production) или long polling (`GET /updates`, для разработки и тестов). Ответы — JSON.","docsUrl":"https://dev.max.ru/docs-api","coverage":{"included":[],"excluded":[]},"scenarios":[{"id":"otpravit-soobschenie-polzovatelyu-ili","title":"Отправить сообщение пользователю или в чат","summary":"Уведомления из своего сервиса в мессенджер MAX: заказ оформлен, запись подтверждена, новая заявка.","steps":["Получи токен бота и передавай его в заголовке Authorization без префикса. Передача токена в параметре access_token больше не работает. Проверь токен: GET /me вернёт данные бота.","Отправь сообщение: POST /messages с user_id (личное сообщение) или chat_id (чат или канал) в строке запроса и text в теле — до 4000 символов. Для форматирования передай format = html или markdown.","В ответе — объект message с ID сообщения: сохрани его, если сообщение потом нужно будет изменить через PUT /messages или удалить через DELETE /messages.","Не отправляй больше 2 сообщений в секунду в один диалог или чат и больше 30 запросов в секунду всего — иначе придёт 429. Ответ 403 значит, что пользователь остановил бота."],"code":"curl -X POST \"https://platform-api2.max.ru/messages?user_id=<user_id>\" \\\n  -H \"Authorization: $MAX_TOKEN\" \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"text\": \"<b>Заказ №1042 оформлен</b>\\nСумма: 15 000 ₽\", \"format\": \"html\"}'","language":"bash","methods":["GET /me","POST /messages","PUT /messages","DELETE /messages"]},{"id":"prinimat-soobscheniya-cherez-vebhuk","title":"Принимать сообщения через вебхук","summary":"Бот на сервере: MAX присылает каждое событие на твой адрес — рекомендуемый способ для боевого режима.","steps":["Подпишись: POST /subscriptions с url (только HTTPS на порту 443, порт в адресе не указывается), update_types (например, message_created и bot_started) и secret — строкой от 5 до 256 символов.","Сертификат сервера должен быть от доверенного центра или Минцифры, с полной цепочкой. Самоподписанные не принимаются.","В каждом запросе MAX передаёт заголовок X-Max-Bot-Api-Secret — сверяй его со своим secret и отбрасывай чужие запросы.","Отвечай пользователю отдельным вызовом POST /messages с chat_id или user_id из события.","Метод возвращает HTTP 200 и при неудаче — проверяй поле success в ответе."],"code":"curl -X POST https://platform-api2.max.ru/subscriptions \\\n  -H \"Authorization: $MAX_TOKEN\" \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"url\": \"https://example.ru/max/webhook\", \"update_types\": [\"message_created\", \"message_callback\", \"bot_started\"], \"secret\": \"s3cr3t_Random_42\"}'","language":"bash","methods":["POST /messages","POST /subscriptions"]},{"id":"bot-bez-servera-long-polling-dlya","title":"Бот без сервера: long polling для разработки","summary":"Получать события в цикле — удобно для отладки и ботов без публичного HTTPS-адреса.","steps":["В цикле вызывай GET /updates с timeout (до 90 секунд ожидания) и types — нужными типами событий.","В ответе updates и marker. В следующий запрос передай этот marker: всё до него считается прочитанным. Без marker вернётся только последнее обновление.","На каждое сообщение отвечай через POST /messages.","Для событий из групповых чатов и каналов бот должен быть администратором."],"code":"import requests\n\nAPI = \"https://platform-api2.max.ru\"\nH = {\"Authorization\": \"<токен бота>\"}\nmarker = None\nwhile True:\n    params = {\"timeout\": 30, \"types\": \"message_created\"}\n    if marker:\n        params[\"marker\"] = marker\n    r = requests.get(f\"{API}/updates\", headers=H, params=params, timeout=40).json()\n    marker = r.get(\"marker\", marker)\n    for upd in r.get(\"updates\", []):\n        msg = upd.get(\"message\", {})\n        chat_id = msg.get(\"recipient\", {}).get(\"chat_id\")\n        text = msg.get(\"body\", {}).get(\"text\")\n        if chat_id and text:\n            requests.post(f\"{API}/messages\", headers=H, params={\"chat_id\": chat_id}, json={\"text\": f\"Вы написали: {text}\"})","language":"python","methods":["POST /messages","GET /updates"]},{"id":"knopki-pod-soobscheniem-i-otvet","title":"Кнопки под сообщением и ответ на нажатие","summary":"Подтвердить или отменить заказ одной кнопкой, без ввода текста.","steps":["Отправь сообщение с кнопками: POST /messages с attachments, где type = inline_keyboard и payload.buttons — строки кнопок. Кнопка type = callback несёт payload — по нему поймёшь, что нажали; кнопка type = link открывает ссылку.","Нажатие приходит событием message_callback (через вебхук или GET /updates) с callback_id и payload.","Ответь на нажатие: POST /answers с callback_id в строке запроса. В теле можно передать message — новое содержимое сообщения, например без кнопок и с итогом.","Сообщения с inline_keyboard можно редактировать без ограничения срока через PUT /messages с message_id."],"code":"curl -X POST \"https://platform-api2.max.ru/messages?user_id=<user_id>\" \\\n  -H \"Authorization: $MAX_TOKEN\" -H 'Content-Type: application/json' \\\n  -d '{\n        \"text\": \"Заказ №1042 на 15 000 ₽. Подтвердить?\",\n        \"attachments\": [{\"type\": \"inline_keyboard\", \"payload\": {\"buttons\": [[\n          {\"type\": \"callback\", \"text\": \"Подтвердить\", \"payload\": \"order:1042:ok\"},\n          {\"type\": \"callback\", \"text\": \"Отменить\", \"payload\": \"order:1042:cancel\"}\n        ]]}}]\n      }'\n\ncurl -X POST \"https://platform-api2.max.ru/answers?callback_id=<callback_id>\" \\\n  -H \"Authorization: $MAX_TOKEN\" -H 'Content-Type: application/json' \\\n  -d '{\"message\": {\"text\": \"Заказ №1042 подтверждён\"}}'","language":"bash","methods":["POST /messages","PUT /messages","POST /answers","GET /updates"]},{"id":"otpravit-fayl-ili-kartinku","title":"Отправить файл или картинку","summary":"Прислать счёт, договор или фото товара вложением.","steps":["Получи адрес загрузки: POST /uploads с type — image, video, audio или file (photo больше не поддерживается). На один url загружается один файл.","Загрузи файл на полученный url multipart-формой. Токен вложения приходит в ответе /uploads (для части типов) или в ответе на загрузку.","Отправь сообщение: POST /messages с attachments = [{type, payload: {token}}].","Сразу после загрузки файл может быть ещё не обработан — придёт ошибка attachment.not.ready. Повторяй отправку с растущим интервалом.","Ограничения: картинка — до 50 МБ, видео — до 250 МБ, файл — до 4 ГБ."],"code":"UPLOAD_URL=$(curl -s -X POST \"https://platform-api2.max.ru/uploads?type=file\" -H \"Authorization: $MAX_TOKEN\" | jq -r .url)\nTOKEN=$(curl -s -F \"data=@invoice-1042.pdf\" \"$UPLOAD_URL\" | jq -r .token)\n\ncurl -X POST \"https://platform-api2.max.ru/messages?user_id=<user_id>\" \\\n  -H \"Authorization: $MAX_TOKEN\" -H 'Content-Type: application/json' \\\n  -d \"{\\\"text\\\": \\\"Счёт по заказу №1042\\\", \\\"attachments\\\": [{\\\"type\\\": \\\"file\\\", \\\"payload\\\": {\\\"token\\\": \\\"$TOKEN\\\"}}]}\"","language":"bash","methods":["POST /messages","POST /uploads"]}],"baseUrls":[{"label":"Боевой","url":"https://platform-api2.max.ru"},{"label":"Документация просит отправлять запросы на  вместо старого .","url":"platform-api2.max.ru"}],"auth":{"type":"api_key","description":"Токен бота передаётся в заголовке `Authorization: <access_token>` (без префикса). Передача токена в query-параметре `access_token` больше не поддерживается.","example":"curl -X GET \"https://platform-api2.max.ru/me\" \\\n  -H \"Authorization: {access_token}\""},"methods":[{"id":"GET /me","title":"Информация о боте","httpMethod":"GET","path":"/me","description":"Возвращает объект User (BotInfo): `user_id`, `first_name`, `username`, `is_bot`, `last_activity_time`, `description`, `avatar_url`, `commands`.","params":[],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /messages","title":"Отправка сообщения","httpMethod":"POST","path":"/messages","description":"Адресат задаётся `user_id` или `chat_id`. В ответе — объект `message` созданного сообщения или поста.","params":[{"name":"user_id","in":"query","type":"integer","required":false,"description":"ID пользователя-получателя"},{"name":"chat_id","in":"query","type":"integer","required":false,"description":"ID чата или канала"},{"name":"disable_link_preview","in":"query","type":"boolean","required":false,"description":"Не генерировать превью ссылок"},{"name":"text","in":"body","type":"string","required":false,"description":"Текст, до 4000 символов"},{"name":"attachments","in":"body","type":"array","required":false,"description":"Вложения: файлы (payload.token из /uploads), inline_keyboard и др."},{"name":"link","in":"body","type":"object","required":false,"description":"Ссылка на сообщение в чате или пост в канале (ответ или пересылка)"},{"name":"notify","in":"body","type":"boolean","required":false,"description":"Push-уведомления участникам, по умолчанию true"},{"name":"format","in":"body","type":"string","required":false,"description":"Форматирование текста: markdown или html"}],"requestExample":"curl -X POST \"https://platform-api2.max.ru/messages?user_id={user_id}\" \\\n  -H \"Authorization: {access_token}\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"text\": \"Это сообщение с кнопкой-ссылкой\",\n  \"attachments\": [\n    {\n      \"type\": \"inline_keyboard\",\n      \"payload\": {\n        \"buttons\": [\n          [\n            {\n              \"type\": \"link\",\n              \"text\": \"Откройте сайт\",\n              \"url\": \"https://example.com\"\n            }\n          ]\n        ]\n      }\n    }\n  ]\n}'","responseExample":"","docsUrl":""},{"id":"PUT /messages","title":"Редактирование сообщения","httpMethod":"PUT","path":"/messages","description":"Сообщения с `inline_keyboard` и любые сообщения в групповых чатах и каналах редактируются без ограничения срока; остальные сообщения в диалогах с ботом — если отправлены меньше 7 суток назад. Ответ: `success`, `message`.","params":[{"name":"message_id","in":"query","type":"string","required":true,"description":"ID редактируемого сообщения"},{"name":"text","in":"body","type":"string","required":false,"description":"Новый текст, до 4000 символов"},{"name":"attachments","in":"body","type":"array","required":false,"description":"null или отсутствие — без изменений; пустой массив удаляет все вложения"},{"name":"link","in":"body","type":"object","required":false,"description":"Ссылка на сообщение или пост"},{"name":"notify","in":"body","type":"boolean","required":false,"description":"Push-уведомления, по умолчанию true"},{"name":"format","in":"body","type":"string","required":false,"description":"markdown или html"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"DELETE /messages","title":"Удаление сообщения","httpMethod":"DELETE","path":"/messages","description":"Удаляет сообщение или пост.","params":[],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /messages","title":"Получение сообщений","httpMethod":"GET","path":"/messages","description":"Нужен `chat_id` или `message_ids`. Сообщения по `chat_id` возвращаются от новых к старым; бот должен быть администратором чата.","params":[{"name":"chat_id","in":"query","type":"integer","required":false,"description":"ID чата или канала"},{"name":"message_ids","in":"query","type":"array","required":false,"description":"ID сообщений через запятую"},{"name":"from","in":"query","type":"integer","required":false,"description":"Граница времени, Unix-время в миллисекундах"},{"name":"to","in":"query","type":"integer","required":false,"description":"Граница времени, Unix-время в миллисекундах"},{"name":"count","in":"query","type":"integer","required":false,"description":"1–100, по умолчанию 50"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /answers","title":"Ответ на нажатие кнопки","httpMethod":"POST","path":"/answers","description":"Ответ: `success`, `message`.","params":[{"name":"callback_id","in":"query","type":"string","required":true,"description":"ID нажатой кнопки"},{"name":"disable_link_preview","in":"query","type":"boolean","required":false,"description":"Не генерировать превью ссылок"},{"name":"message","in":"body","type":"object","required":false,"description":"Новое содержимое текущего сообщения, если его нужно изменить"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"GET /updates","title":"Получение событий (long polling)","httpMethod":"GET","path":"/updates","description":"Для событий из групповых чатов и каналов бот должен быть администратором.\n\nВ ответе: `updates[]` и `marker` — указатель на следующую страницу; всё до него считается прочитанным.","params":[{"name":"limit","in":"query","type":"integer","required":false,"description":"1–1000, по умолчанию 100"},{"name":"timeout","in":"query","type":"integer","required":false,"description":"Ожидание в секундах, 0–90, по умолчанию 30"},{"name":"marker","in":"query","type":"integer","required":false,"description":"marker из предыдущего ответа; без него вернётся только последнее обновление"},{"name":"types","in":"query","type":"array","required":false,"description":"Типы событий, например message_created,message_callback"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /subscriptions","title":"Подписка на Webhook","httpMethod":"POST","path":"/subscriptions","description":"Ответ: `success`, `message`.\n\nТакже есть `GET /subscriptions` (список подписок) и `DELETE /subscriptions` (отписка).","params":[{"name":"url","in":"body","type":"string","required":true,"description":"HTTPS-адрес, только порт 443 (порт в URL не указывается)"},{"name":"update_types","in":"body","type":"array","required":false,"description":"Типы событий, например [\"message_created\", \"bot_started\"]"},{"name":"secret","in":"body","type":"string","required":false,"description":"5–256 символов; приходит в заголовке X-Max-Bot-Api-Secret каждого вебхука"}],"requestExample":"","responseExample":"","docsUrl":""},{"id":"POST /uploads","title":"Получение URL для загрузки файла","httpMethod":"POST","path":"/uploads","description":"Возвращает `url` для загрузки и (для части типов) `token` для вложения. По одному `url` загружается один файл.","params":[{"name":"type","in":"query","type":"string","required":true,"description":"image, video, audio или file (photo больше не поддерживается)"}],"requestExample":"","responseExample":"","docsUrl":""}],"codeExamples":[],"errors":[{"code":"400","description":"Некорректный запрос"},{"code":"401","description":"Ошибка авторизации: токен неверен или недействителен"},{"code":"403","description":"Бот приостановлен пользователем или нет доступа к чату"},{"code":"404","description":"Ресурс не найден"},{"code":"405","description":"Метод не разрешён"},{"code":"429","description":"Превышено количество запросов"},{"code":"503","description":"Сервис недоступен"}],"limits":"- Не больше 30 запросов в секунду на `platform-api2.max.ru`.\n- Не больше 2 отправленных или отредактированных сообщений в секунду в один диалог, чат или канал.\n- Размер файлов: `image` — до 50 МБ и 7680×7680 px; `video` — до 250 МБ; `audio` — до 256 МБ и 60 минут; `file` — до 4 ГБ.","gotchas":["Загрузка файла: `POST /uploads?type=...` → загрузить файл на `url` (multipart целиком или resumable частями) → передать токен в `attachments[].payload.token` в `POST /messages` или `PUT /messages`.","Сразу после загрузки файл может быть не обработан — ошибка `attachment.not.ready`; повторяйте отправку с растущим интервалом.","Вебхук: только HTTPS на порту 443, сертификат доверенного центра или Минцифры, полная цепочка сертификатов; самоподписанные сертификаты не поддерживаются. Проверяйте заголовок `X-Max-Bot-Api-Secret`.","`GET /chats` не поддерживается с июня 2026; `POST /chats/{chatId}/members` удалён с 30 сентября 2026.","Методы `PUT`/`POST /subscriptions`/`POST /answers` возвращают HTTP 200 и при неуспехе — проверяйте поле `success`."],"slug":"max-bot-api","version":2,"updatedAt":"2026-10-24T17:05:34.074Z","sources":[{"title":"MAX Bot API","url":"https://dev.max.ru/docs-api","kind":"research","addedAt":"2026-10-14T18:41:16.133Z"},{"title":"GET /me","url":"https://dev.max.ru/docs-api/methods/GET/me","kind":"research","addedAt":"2026-10-14T18:41:16.133Z"},{"title":"POST /messages","url":"https://dev.max.ru/docs-api/methods/POST/messages","kind":"research","addedAt":"2026-10-14T18:41:16.133Z"},{"title":"PUT /messages","url":"https://dev.max.ru/docs-api/methods/PUT/messages","kind":"research","addedAt":"2026-10-14T18:41:16.133Z"},{"title":"GET /messages","url":"https://dev.max.ru/docs-api/methods/GET/messages","kind":"research","addedAt":"2026-10-14T18:41:16.133Z"},{"title":"POST /answers","url":"https://dev.max.ru/docs-api/methods/POST/answers","kind":"research","addedAt":"2026-10-14T18:41:16.133Z"},{"title":"GET /updates","url":"https://dev.max.ru/docs-api/methods/GET/updates","kind":"research","addedAt":"2026-10-14T18:41:16.133Z"},{"title":"POST /subscriptions","url":"https://dev.max.ru/docs-api/methods/POST/subscriptions","kind":"research","addedAt":"2026-10-14T18:41:16.133Z"},{"title":"POST /uploads","url":"https://dev.max.ru/docs-api/methods/POST/uploads","kind":"research","addedAt":"2026-10-14T18:41:16.133Z"},{"title":"Вставленный текст","url":"","kind":"import","addedAt":"2026-10-14T18:41:16.133Z"},{"title":"scenarios-max-bot-api.md","url":"","kind":"import","addedAt":"2026-10-24T17:05:25.266Z"}],"logoUrl":null}