[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-bots\u002Fmanagement":3,"docs-tabs-bots\u002Fmanagement":6},{"content":4,"lastmod":5},"# Управление ботами\n\nЗарегистрируйте бота на портале Битрикс24, получайте и обновляйте его данные, восстанавливайте доступ при сбоях авторизации и удаляйте бота, когда он больше не нужен.\n\n**Скоуп:** `imbot` | **Базовый URL:** `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1` | **Авторизация:** `X-Api-Key`\n\n## Операции\n\n- [Зарегистрировать бота](.\u002Fmanagement\u002Fcreate.md) — `POST \u002Fv1\u002Fbots`\n- [Список ботов](.\u002Fmanagement\u002Flist.md) — `GET \u002Fv1\u002Fbots`\n- [Получить бота](.\u002Fmanagement\u002Fget.md) — `GET \u002Fv1\u002Fbots\u002F:botId`\n- [Обновить бота](.\u002Fmanagement\u002Fupdate.md) — `PATCH \u002Fv1\u002Fbots\u002F:botId`\n- [Удалить бота](.\u002Fmanagement\u002Fdelete.md) — `DELETE \u002Fv1\u002Fbots\u002F:botId`\n- [Повторная авторизация](.\u002Fmanagement\u002Freauth.md) — `POST \u002Fv1\u002Fbots\u002F:botId\u002Freauth`\n- [Перепривязка подписки на события](.\u002Fmanagement\u002Fresubscribe.md) — `POST \u002Fv1\u002Fbots\u002F:botId\u002Fresubscribe`\n- [Ревизия бот-платформы](.\u002Fmanagement\u002Frevision.md) — `GET \u002Fv1\u002Fbots\u002Frevision`\n","2026-06-23",{"management\u002Fcreate.md":7,"management\u002Flist.md":8,"management\u002Fget.md":9,"management\u002Fupdate.md":10,"management\u002Fdelete.md":11,"management\u002Freauth.md":12,"management\u002Fresubscribe.md":13,"management\u002Frevision.md":14},"\n## Зарегистрировать бота\n\n`POST \u002Fv1\u002Fbots`\n\nРегистрирует нового бота на портале Битрикс24. Операция идемпотентна по `code` — повторный вызов с тем же кодом вернёт `409 BOT_ALREADY_EXISTS` с данными существующего бота.\n\n## Поля запроса (body)\n\n| Параметр | Тип | Обяз. | По умолч. | Описание |\n|----------|-----|:-----:|-----------|---------|\n| `code` | string | да | — | Уникальный код бота (латиница, цифры, подчёркивание) |\n| `name` | string | да | — | Отображаемое имя бота |\n| `type` | string | нет | `bot` | [Тип бота](#типы-ботов): `bot`, `personal`, `supervisor`, `openline`. Нельзя изменить после регистрации |\n| `eventMode` | string | нет | `fetch` | Режим событий: `fetch` (polling) или `webhook` (push) |\n| `webhookUrl` | string | нет | — | URL для push-уведомлений (только при `eventMode: \"webhook\"`) |\n| `lastName` | string | нет | — | Фамилия бота |\n| `workPosition` | string | нет | — | Должность бота (отображается под именем) |\n| `color` | string | нет | — | Цвет аватара: `RED`, `GREEN`, `MINT`, `LIGHT_BLUE`, `DARK_BLUE`, `PURPLE`, `AQUA`, `PINK`, `LIME`, `BROWN`, `AZURE`, `KHAKI`, `SAND`, `MARENGO`, `GRAY`, `GRAPHITE` |\n| `gender` | string | нет | — | Пол: `M` или `F` |\n| `avatar` | string | нет | — | Аватар бота: PNG или JPEG как base64-строка без префикса `data:image\u002F...;base64,`, до ~50 КБ. См. «Формат аватара» в «Известных особенностях» |\n| `isHidden` | boolean | нет | `false` | Скрыть бота из списка контактов |\n| `isReactionsEnabled` | boolean | нет | `true` | Разрешить реакции на сообщения бота |\n| `backgroundId` | string | нет | — | Фон чата: `azure`, `mint`, `steel`, `slate`, `teal`, `cornflower`, `sky`, `peach`, `frost` |\n| `isSupportOpenline` | boolean | нет | `false` | Поддержка открытых линий (только для `type: \"openline\"`) |\n\n## Типы ботов\n\n| Тип | Описание |\n|-----|---------|\n| `bot` | Стандартный бот — реагирует на @упоминание и личные сообщения |\n| `personal` | AI-ассистент — получает все сообщения без @упоминания. Доступны `Message.get` и `Message.getContext` |\n| `supervisor` | Системный наблюдатель — получает все сообщения в чатах, где состоит |\n| `openline` | Бот для открытых линий. Требует `isSupportOpenline: true` |\n\n> ⚠ **`personal` и `supervisor` — привилегированные типы:** они получают все сообщения в чатах, где состоят, даже без @упоминания бота. Используйте их осознанно. Регистрация через `POST \u002Fv1\u002Fbots` разрешена и не требует админ-роли на стороне Битрикс24 — ограничение задаётся правами вашего webhook\u002FOAuth-токена.\n\n## Доступные цвета\n\nИспользуются в параметре `color` при создании и обновлении бота:\n\n```\nRED, GREEN, MINT, LIGHT_BLUE, DARK_BLUE, PURPLE, AQUA, PINK,\nLIME, BROWN, AZURE, KHAKI, SAND, MARENGO, GRAY, GRAPHITE\n```\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"code\": \"support_bot\",\n    \"name\": \"Техподдержка\",\n    \"type\": \"bot\",\n    \"eventMode\": \"fetch\",\n    \"color\": \"AZURE\",\n    \"workPosition\": \"Помощник по техническим вопросам\"\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"code\": \"support_bot\",\n    \"name\": \"Техподдержка\",\n    \"type\": \"bot\",\n    \"eventMode\": \"fetch\",\n    \"color\": \"AZURE\",\n    \"workPosition\": \"Помощник по техническим вопросам\"\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    code: 'support_bot',\n    name: 'Техподдержка',\n    type: 'bot',\n    eventMode: 'fetch',\n    color: 'AZURE',\n    workPosition: 'Помощник по техническим вопросам',\n  }),\n})\n\nconst { success, data } = await res.json()\n\u002F\u002F `data.botId` зеркалит ответ 409 BOT_ALREADY_EXISTS — один и тот же путь для\n\u002F\u002F success и conflict. `data.bot.id` оставлен для обратной совместимости.\nconsole.log('Bot ID:', data.botId)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    code: 'support_bot',\n    name: 'Техподдержка',\n    type: 'bot',\n    eventMode: 'fetch',\n    color: 'AZURE',\n    workPosition: 'Помощник по техническим вопросам',\n  }),\n})\n\nconst { success, data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `botId` | number | ID бота на портале Битрикс24. Зеркалит `data.botId` из 409-ответа — один и тот же путь для success и conflict |\n| `bot.id` | number | Дубликат `botId` для обратной совместимости. ID бота на портале Битрикс24 |\n| `bot.code` | string | Уникальный код бота |\n| `bot.type` | string | Тип бота |\n| `bot.eventMode` | string | Режим событий: `fetch` или `webhook` |\n| `bot.isHidden` | boolean | Скрыт из списка контактов |\n| `bot.isReactionsEnabled` | boolean | Разрешены реакции |\n| `users` | array | Массив пользователей Битрикс24, созданных для бота |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"botId\": 42,\n    \"bot\": {\n      \"id\": 42,\n      \"code\": \"support_bot\",\n      \"type\": \"bot\",\n      \"eventMode\": \"fetch\",\n      \"isHidden\": false,\n      \"isReactionsEnabled\": true\n    },\n    \"users\": [\n      {\n        \"id\": 42,\n        \"name\": \"Техподдержка\",\n        \"active\": true,\n        \"bot\": true\n      }\n    ]\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n409 — бот с таким кодом уже существует:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BOT_ALREADY_EXISTS\",\n    \"message\": \"Bot with this code already exists\"\n  },\n  \"data\": {\n    \"botId\": 42,\n    \"code\": \"support_bot\",\n    \"name\": \"Техподдержка\"\n  }\n}\n```\n\nВ поле `data` возвращаются `botId`, `code` и `name` уже зарегистрированного бота — это идемпотентный путь восстановления записи в базе Вайбкод после рассинхронизации.\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `CODE_REQUIRED` | Не передан параметр `code` |\n| 400 | `NAME_REQUIRED` | Не передан параметр `name` |\n| 409 | `BOT_ALREADY_EXISTS` | Бот с таким `code` уже зарегистрирован. Ответ содержит `data` с `botId` |\n| 422 | `BITRIX_ERROR` | Битрикс24 вернул ошибку при регистрации (текст ошибки в `message`) |\n| 502 | `REGISTRATION_FAILED` | Битрикс24 не вернул ID бота |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Тип нельзя изменить:** после регистрации `type` фиксируется. `PATCH \u002Fv1\u002Fbots\u002F:botId` не принимает это поле.\n\n**Восстановление при рассинхронизации:** если бот существует на портале Битрикс24, но отсутствует в базе Вайбкод (после сбоя), повторный `POST` с тем же `code` восстановит запись в базе.\n\n**Формат body отличается от PATCH:** при создании поля передаются плоско (`code`, `name`, `color`). При обновлении — вложенная структура `{ fields: { properties: { name, color } } }`.\n\n**Формат аватара.** Поле `avatar` принимает изображение PNG или JPEG в виде base64-строки **без** префикса `data:image\u002F...;base64,` — передавайте только сами base64-данные. URL изображения или строка с префиксом `data:` приводят к ответу `422 BITRIX_ERROR`. Размер — до ~50 КБ: при превышении запрос завершается успешно, но аватар не сохраняется и остаётся пустым.\n\n**Идемпотентность по code:** если бот с таким кодом уже есть и в базе Вайбкод, и на портале Битрикс24, вернётся `409 BOT_ALREADY_EXISTS` с `data: { botId, code, name }` существующего бота. Подходит для перезапуска скриптов и проверки факта регистрации без обработки 200\u002F400 раздельно.\n\n**Жизненный цикл бота.** Бот существует ровно столько, сколько существует локальное приложение, через которое он зарегистрирован. Удаление приложения с портала удаляет и бота.\n\n**Операции с ботом — тем же ключом.** Бот привязан к API-ключу, которым зарегистрирован. Получение событий, отправка сообщений и обновление выполняются тем же ключом — запрос с другого ключа вернёт `403 BOT_ACCESS_DENIED`. Передать бота на активный ключ того же пользователя — или силами администратора аккаунта — можно через [`POST \u002Fv1\u002Fbots\u002F:botId\u002Ftransfer`](\u002Fdocs\u002Fbots\u002Fmanagement\u002Ftransfer).\n\n**Режим `webhook` требует публичного `webhookUrl`.** При `eventMode: \"webhook\"` Битрикс24 отправляет события напрямую на `webhookUrl`, поэтому адрес должен быть публично достижим. Сервер Black Hole с политикой `OWNER_ONLY` такой запрос не принимает — подробности и решение в разделе [Диагностика проблем](\u002Fdocs\u002Fbots\u002Ftroubleshooting).\n\n## Смотрите также\n\n- [Диагностика проблем](\u002Fdocs\u002Fbots\u002Ftroubleshooting)\n- [События](\u002Fdocs\u002Fbots\u002Fevents)\n- [Сообщения](\u002Fdocs\u002Fbots\u002Fmessages)\n- [Обновить бота](\u002Fdocs\u002Fbots\u002Fmanagement)\n- [Перенос владения ботом](\u002Fdocs\u002Fbots\u002Fmanagement\u002Ftransfer)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Список ботов\n\n`GET \u002Fv1\u002Fbots`\n\nВозвращает список ботов, зарегистрированных текущим API-ключом на портале.\n\nЗапрос **не идёт** в Битрикс24 — возвращаются строки из Вайбкод DB, отфильтрованные по вашему API-ключу. Автоматически отключённые боты (`PORTAL_DELETED` \u002F `AUTH_FAILURES`) в список не попадают — чтобы увидеть их, переключите статус вручную через `PATCH \u002Fv1\u002Fbots\u002F:botId { disabled: false }`.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `limit` | number | нет | Максимальное количество ботов в ответе. По умолчанию 50, максимум 200 |\n| `offset` | number | нет | Смещение для пагинации. По умолчанию 0 |\n| `type` | string | нет | Фильтр по типу бота: `bot`, `personal`, `supervisor`, `openline` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\nconst { data } = await res.json()\nconsole.log('Мои боты:', data.bots)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `bots` | array | Массив объектов ботов |\n| `bots[].id` | number | ID бота на Битрикс24-портале |\n| `bots[].code` | string | Уникальный код бота |\n| `bots[].name` | string | Отображаемое имя бота в чате |\n| `bots[].type` | string | Тип: `bot`, `personal`, `supervisor`, `openline` |\n| `bots[].eventMode` | string | Режим событий: `fetch` или `webhook` |\n| `users` | array | Всегда пустой массив. Сохранён для обратной совместимости — чтобы получить пользователей Битрикс24, используйте `GET \u002Fv1\u002Fusers` |\n| `hasNextPage` | boolean | `true`, если ещё есть записи за пределами текущей страницы — увеличьте `offset` |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"bots\": [\n      {\n        \"id\": 42,\n        \"code\": \"support_bot\",\n        \"name\": \"Техподдержка\",\n        \"type\": \"bot\",\n        \"eventMode\": \"fetch\"\n      },\n      {\n        \"id\": 58,\n        \"code\": \"analytics_bot\",\n        \"name\": \"Аналитик\",\n        \"type\": \"openline\",\n        \"eventMode\": \"webhook\"\n      }\n    ],\n    \"users\": [],\n    \"hasNextPage\": false\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — нет скоупа `imbot`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'imbot' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Смотрите также\n\n- [Получить бота](\u002Fdocs\u002Fbots\u002Fmanagement)\n- [Зарегистрировать бота](\u002Fdocs\u002Fbots\u002Fmanagement)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Получить бота\n\n`GET \u002Fv1\u002Fbots\u002F:botId`\n\nПолучает актуальные данные о боте из Битрикс24 (живой запрос, не из кэша).\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `botId` | number | да | ID бота (path-параметр) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42 \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42 \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\nconst { data } = await res.json()\nconsole.log('Бот:', data)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\nconst { data } = await res.json()\n```\n\n## Поля ответа\n\nОтвет содержит два объекта: `data.bot` — параметры бота, `data.users` — массив пользователей Битрикс24, представляющих бота. В массиве один элемент — учётная запись бота-пользователя.\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data.bot.id` | number | ID бота на портале Битрикс24 |\n| `data.bot.code` | string | Уникальный код бота |\n| `data.bot.type` | string | Тип бота: `bot`, `personal`, `supervisor`, `openline` |\n| `data.bot.isHidden` | boolean | Скрыт из списка контактов |\n| `data.bot.isSupportOpenline` | boolean | Поддержка открытых линий |\n| `data.bot.isReactionsEnabled` | boolean | Разрешены реакции на сообщения |\n| `data.bot.backgroundId` | string | Фон чата. Приходит `null`, когда не задан |\n| `data.bot.language` | string | Язык бота, например `ru` |\n| `data.bot.moduleId` | string | Модуль, зарегистрировавший бота, например `rest` |\n| `data.bot.eventMode` | string | Режим событий: `fetch` или `webhook` |\n| `data.bot.countMessage` | number | Счётчик сообщений |\n| `data.bot.countCommand` | number | Счётчик команд |\n| `data.bot.countChat` | number | Счётчик чатов |\n| `data.bot.countUser` | number | Счётчик пользователей |\n| `data.users[].id` | number | ID пользователя-бота. Совпадает с `data.bot.id` |\n| `data.users[].name` | string | Полное имя |\n| `data.users[].firstName` | string | Имя |\n| `data.users[].lastName` | string | Фамилия. Пустая строка, если не задана |\n| `data.users[].workPosition` | string | Должность |\n| `data.users[].color` | string | Цвет аватара в формате HEX, например `#29619b` |\n| `data.users[].avatar` | string | URL аватара. Пустая строка, если не задан |\n| `data.users[].gender` | string | Пол: `M` или `F` |\n| `data.users[].active` | boolean | Активен ли пользователь |\n| `data.users[].bot` | boolean | Признак бота |\n| `data.users[].departments` | array | Подразделения. Пустой массив, если их нет |\n| `data.users[].lastActivityDate` | string или false | Время последней активности. Приходит `false`, если активности не было |\n\nМассив `data.users` несёт и другие стандартные поля пользователя Битрикс24 — `birthday`, `phones`, `website`, `email`, `status`, `mobileLastDate`, `desktopLastDate`. О том, как кодируются незаполненные значения, — в разделе «Известные особенности».\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"bot\": {\n      \"id\": 42,\n      \"code\": \"support_bot\",\n      \"type\": \"bot\",\n      \"isHidden\": false,\n      \"isSupportOpenline\": false,\n      \"isReactionsEnabled\": true,\n      \"backgroundId\": null,\n      \"language\": \"ru\",\n      \"moduleId\": \"rest\",\n      \"eventMode\": \"fetch\",\n      \"countMessage\": 0,\n      \"countCommand\": 0,\n      \"countChat\": 0,\n      \"countUser\": 0\n    },\n    \"users\": [\n      {\n        \"id\": 42,\n        \"active\": true,\n        \"name\": \"Техподдержка\",\n        \"firstName\": \"Техподдержка\",\n        \"lastName\": \"\",\n        \"workPosition\": \"Помощник по техническим вопросам\",\n        \"color\": \"#29619b\",\n        \"avatar\": \"\",\n        \"gender\": \"M\",\n        \"bot\": true,\n        \"departments\": [],\n        \"lastActivityDate\": false,\n        \"phones\": false\n      }\n    ]\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — бот не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BOT_NOT_FOUND\",\n    \"message\": \"Bot 999 not found. Register it first via POST \u002Fv1\u002Fbots.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_BOT_ID` | `botId` не является числом |\n| 404 | `BOT_NOT_FOUND` | Бот не найден — зарегистрируйте через `POST \u002Fv1\u002Fbots` |\n| 403 | `BOT_ACCESS_DENIED` | Бот принадлежит другому API-ключу |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Незаполненные значения кодируются по-разному.** В `data.users[]` пустое поле приходит в одной из форм в зависимости от типа: пустая строка `\"\"` (`lastName`, `avatar`, `birthday`, `website`, `email`), `false` (даты `lastActivityDate`, `mobileLastDate`, `desktopLastDate` и список `phones`), пустой массив `[]` (`departments`). В `data.bot` незаданный `backgroundId` приходит как `null`. Перед использованием поля проверяйте его форму: `new Date(false)` и `phones.map(...)` на значении `false` дадут некорректный результат.\n\n**Цвет аватара возвращается в HEX.** При записи `color` принимает имя из палитры (`AZURE`, `MINT`, …), но в ответе `data.users[].color` приходит уже как HEX-строка, например `#29619b`. Прочитать обратно записанное имя из палитры нельзя.\n\n## Смотрите также\n\n- [Список ботов](\u002Fdocs\u002Fbots\u002Fmanagement)\n- [Обновить бота](\u002Fdocs\u002Fbots\u002Fmanagement)\n- [События](\u002Fdocs\u002Fbots\u002Fevents)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Обновить бота\n\n`PATCH \u002Fv1\u002Fbots\u002F:botId`\n\nОбновляет свойства бота. Передавайте только те поля, которые хотите изменить.\n\n> **Две формы тела запроса — обе корректны.** Платформа принимает как **плоскую** запись (та же, что у `POST \u002Fv1\u002Fbots`), так и формат Битрикс24 с обёрткой `fields`. Если в теле есть `fields`, запрос передаётся в Битрикс24 без изменений. Иначе известные поля верхнего уровня автоматически разворачиваются в `fields.properties.*` \u002F `fields.*`. Поведение обеих форм идентично.\n\n## Поля запроса (body)\n\n| Параметр (плоский) | Параметр (формат Битрикс24) | Тип | Описание |\n|---|---|-----|---------|\n| `name` | `fields.properties.name` | string | Новое имя бота |\n| `lastName` | `fields.properties.lastName` | string | Новая фамилия |\n| `workPosition` | `fields.properties.workPosition` | string | Новая должность |\n| `color` | `fields.properties.color` | string | Новый цвет аватара |\n| `gender` | `fields.properties.gender` | string | Пол: `M` или `F` |\n| `avatar` | `fields.properties.avatar` | string | Аватар бота: PNG или JPEG как base64-строка без префикса `data:image\u002F...;base64,`, до ~50 КБ. См. «Известные особенности» |\n| `eventMode` | `fields.eventMode` | string | Режим событий: `fetch` или `webhook` |\n| `webhookUrl` | `fields.webhookUrl` | string | URL для push-уведомлений |\n| `isHidden` | `fields.isHidden` | boolean | Скрыть из списка контактов |\n| `isReactionsEnabled` | `fields.isReactionsEnabled` | boolean | Разрешить реакции |\n| `backgroundId` | `fields.backgroundId` | string | Фон чата: `azure`, `mint`, `steel`, `slate`, `teal`, `cornflower`, `sky`, `peach`, `frost` |\n| `isSupportOpenline` | `fields.isSupportOpenline` | boolean | Поддержка открытых линий (только для `type: \"openline\"`) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42 \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"fields\": {\n      \"properties\": { \"name\": \"Новое имя\", \"color\": \"MINT\" },\n      \"eventMode\": \"fetch\"\n    }\n  }'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42 \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"fields\": {\n      \"properties\": { \"name\": \"Новое имя\", \"color\": \"MINT\" },\n      \"eventMode\": \"fetch\"\n    }\n  }'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_API_KEY',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    fields: {\n      properties: { name: 'Новое имя', color: 'MINT' },\n      eventMode: 'fetch',\n    },\n  }),\n})\nconst { data } = await res.json()\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42', {\n  method: 'PATCH',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n    'Content-Type': 'application\u002Fjson',\n  },\n  body: JSON.stringify({\n    fields: {\n      properties: { name: 'Новое имя', color: 'MINT' },\n      eventMode: 'fetch',\n    },\n  }),\n})\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data.bot` | object | Обновлённый бот. Набор полей совпадает с ответом [регистрации](\u002Fdocs\u002Fbots\u002Fmanagement\u002Fcreate) |\n| `data.bot.id` | number | ID бота на портале Битрикс24 |\n| `data.bot.code` | string | Системный код бота |\n| `data.bot.type` | string | Тип бота: `bot`, `personal` или `supervisor` |\n| `data.bot.eventMode` | string | Режим доставки событий: `fetch` или `webhook` |\n| `data.users` | array | Карточка бота как пользователя портала |\n\n## Пример ответа\n\nПоказаны основные поля. Полный набор полей бота — в ответе [регистрации](\u002Fdocs\u002Fbots\u002Fmanagement\u002Fcreate).\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"bot\": {\n      \"id\": 42,\n      \"code\": \"my_helper_bot\",\n      \"type\": \"bot\",\n      \"eventMode\": \"fetch\",\n      \"isHidden\": false,\n      \"isReactionsEnabled\": true,\n      \"language\": \"ru\"\n    },\n    \"users\": []\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — бот принадлежит другому ключу:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BOT_ACCESS_DENIED\",\n    \"message\": \"This bot belongs to a different API key\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_BOT_ID` | `botId` не является числом |\n| 404 | `BOT_NOT_FOUND` | Бот не найден |\n| 403 | `BOT_ACCESS_DENIED` | Бот принадлежит другому API-ключу |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Симметрия с регистрацией.** PATCH принимает как плоское тело (`{ name, eventMode, ... }`), так и формат Битрикс24 с обёрткой `fields` — так же, как `POST \u002Fv1\u002Fbots`. Если в теле есть ключ `fields`, платформа передаёт его в Битрикс24 без изменений. Иначе нормализует плоские поля сама.\n\n**`type` нельзя изменить:** поле `type` не принимается при обновлении.\n\n**Формат аватара.** Поле `avatar` принимает изображение PNG или JPEG в виде base64-строки **без** префикса `data:image\u002F...;base64,` — передавайте только сами base64-данные. Строка с префиксом `data:` приводит к ответу 422. Размер — до ~50 КБ: при превышении запрос завершается успешно (`success: true`), но аватар не сохраняется и в боте остаётся пустым. Эндпоинт принимает только JSON — загрузка файла через `multipart\u002Fform-data` не поддерживается (ответ 415). Передавайте значение как `avatar` (плоская форма) либо как `fields.properties.avatar` (форма с `fields`) — результат одинаковый.\n\n## Смотрите также\n\n- [Получить бота](\u002Fdocs\u002Fbots\u002Fmanagement)\n- [Зарегистрировать бота](\u002Fdocs\u002Fbots\u002Fmanagement)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n- [Лимиты и оптимизация](\u002Fdocs\u002Foptimization)\n","\n## Удалить бота\n\n`DELETE \u002Fv1\u002Fbots\u002F:botId`\n\nУдаляет бота из Битрикс24 и из базы Вайбкод. Действие необратимо.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `botId` | number | да | ID бота (path-параметр) |\n| `force` (query) | boolean | нет | `true` — удалить запись из базы Вайбкод, даже если Битрикс24 отклонил отмену регистрации. По умолчанию при ошибке Битрикс24 запись сохраняется и возвращается `502 BOT_DELETE_PARTIAL` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X DELETE https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42 \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X DELETE https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42 \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42', {\n  method: 'DELETE',\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\nconst { data } = await res.json()\nconsole.log(data) \u002F\u002F { deleted: true }\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42', {\n  method: 'DELETE',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data.deleted` | boolean | `true` при успешном удалении |\n| `data.forced` | boolean | Присутствует при `?force=true`, когда Битрикс24 отклонил отмену регистрации: запись удалена из базы Вайбкод, бот остался на стороне Битрикс24 |\n| `data.b24UnregisterError` | string | Присутствует вместе с `forced`. Текст ошибки Битрикс24, из-за которой отмена регистрации не удалась |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"deleted\": true\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — бот не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BOT_NOT_FOUND\",\n    \"message\": \"Bot 42 not found. Register it first via POST \u002Fv1\u002Fbots.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_BOT_ID` | `botId` не является числом |\n| 404 | `BOT_NOT_FOUND` | Бот не найден |\n| 403 | `BOT_ACCESS_DENIED` | Бот принадлежит другому API-ключу |\n| 502 | `BOT_DELETE_PARTIAL` | Битрикс24 отклонил отмену регистрации, запись в базе Вайбкод сохранена. Текст ошибки — в `error.b24UnregisterError`. Повторите после `POST \u002Fv1\u002Fbots\u002F:botId\u002Freauth` или удалите принудительно через `?force=true` |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Каскадное удаление:** при удалении бота также удаляются связанные записи AI-агента или управляемого бота, если они были привязаны к этому боту.\n\n**Необратимость:** бот удаляется и из Битрикс24, и из базы Вайбкод. Для повторного использования нужна новая регистрация через `POST \u002Fv1\u002Fbots`.\n\n**Частичное удаление и `?force=true`:** если Битрикс24 отклонил отмену регистрации, по умолчанию возвращается `502 BOT_DELETE_PARTIAL` и запись в базе Вайбкод сохраняется — повторите после `POST \u002Fv1\u002Fbots\u002F:botId\u002Freauth` или удалите принудительно через `?force=true`. С `?force=true` запись удаляется из базы Вайбкод даже при ошибке Битрикс24, бот остаётся на стороне Битрикс24 до ручной очистки, а ответ содержит `forced: true` и `b24UnregisterError`.\n\n## Смотрите также\n\n- [События](\u002Fdocs\u002Fbots\u002Fevents)\n- [Сообщения](\u002Fdocs\u002Fbots\u002Fmessages)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n","\n## Повторная авторизация бота\n\n`POST \u002Fv1\u002Fbots\u002F:botId\u002Freauth`\n\nПроверяет учётные данные бота и при необходимости обновляет токен доступа. Снимает автоматическое отключение, если доступ снова действителен. Тело запроса не требуется.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `botId` | number | да | ID бота (path-параметр) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Freauth \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Freauth \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Freauth', {\n  method: 'POST',\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\nconst { data } = await res.json()\nconsole.log(data) \u002F\u002F { validated: true, refreshed: false }\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Freauth', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data.validated` | boolean | `true`, если учётные данные бота действительны |\n| `data.refreshed` | boolean | `true`, если токен доступа был обновлён в ходе проверки |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"validated\": true,\n    \"refreshed\": false\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n410 — учётные данные недействительны и не восстанавливаются автоматически:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"REAUTH_REQUIRED\",\n    \"message\": \"Bot credentials are invalid and could not be refreshed automatically — the refresh token is itself dead. Re-authorize the API key via the OAuth flow (POST \u002Fv1\u002Foauth\u002Fauthorize on an OAuth-app key, or recreate the personal key).\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_BOT_ID` | `botId` не является числом |\n| 404 | `BOT_NOT_FOUND` | Бот не найден |\n| 403 | `BOT_ACCESS_DENIED` | Бот принадлежит другому API-ключу |\n| 410 | `REAUTH_REQUIRED` | Доступ недействителен и не восстанавливается автоматически — ключ нужно авторизовать заново |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Когда применять.** Бот отключён со статусом `BOT_DISABLED` по причине `AUTH_FAILURES`. Проверка подтверждает доступ и снимает отключение — после успешного ответа бот снова принимает события и отправляет сообщения.\n\n**Поле `refreshed`.** Принимает `true` только для ключа авторизации с истёкшим токеном доступа: проверка попутно обновляет токен. Для личного ключа `refreshed` всегда `false`.\n\n**Ответ `410`.** Когда токен обновления тоже недействителен, автоматическое восстановление невозможно — ключ нужно авторизовать заново через OAuth или пересоздать личный ключ.\n\n## Смотрите также\n\n- [Диагностика проблем](\u002Fdocs\u002Fbots\u002Ftroubleshooting)\n- [Перепривязка подписки на события](\u002Fdocs\u002Fbots\u002Fmanagement\u002Fresubscribe)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n","\n## Перепривязка подписки на события\n\n`POST \u002Fv1\u002Fbots\u002F:botId\u002Fresubscribe`\n\nВосстанавливает подписку бота на события Битрикс24. Применяется, когда бот активен, но `GET \u002Fv1\u002Fbots\u002F:botId\u002Fevents` перестал возвращать события. Тело запроса не требуется.\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Описание |\n|----------|-----|:-----:|---------|\n| `botId` | number | да | ID бота (path-параметр) |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fresubscribe \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fresubscribe \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fresubscribe', {\n  method: 'POST',\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\nconst { data } = await res.json()\nconsole.log(data) \u002F\u002F { resubscribed: true, eventMode: 'fetch' }\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002F42\u002Fresubscribe', {\n  method: 'POST',\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data.resubscribed` | boolean | `true` при успешной перепривязке |\n| `data.eventMode` | string | Режим доставки событий бота: `fetch` или `webhook` |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"resubscribed\": true,\n    \"eventMode\": \"fetch\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n404 — бот не найден:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BOT_NOT_FOUND\",\n    \"message\": \"Bot 42 not found. Register it first via POST \u002Fv1\u002Fbots.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 400 | `INVALID_BOT_ID` | `botId` не является числом |\n| 404 | `BOT_NOT_FOUND` | Бот не найден |\n| 403 | `BOT_ACCESS_DENIED` | Бот принадлежит другому API-ключу |\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Когда применять.** Бот зарегистрирован и активен — в чаты приходят сообщения, бот есть в списке `GET \u002Fv1\u002Fbots` — но очередь событий пуста несколько опросов подряд, и в ответе `GET \u002Fv1\u002Fbots\u002F:botId\u002Fevents` появилось поле `hint`. Перепривязка восстанавливает доставку и сохраняет привязки открытых линий и приветственного бота, в отличие от повторной регистрации через `POST \u002Fv1\u002Fbots`.\n\n**Повторный вызов безопасен.** Каждый запрос заново отправляет режим доставки бота в Битрикс24, поэтому перепривязку можно вызывать несколько раз подряд.\n\n**Режим `webhook`.** Для бота с `eventMode: \"webhook\"` перепривязка также повторно отправляет сохранённый адрес вебхука.\n\n## Смотрите также\n\n- [События](\u002Fdocs\u002Fbots\u002Fevents)\n- [Диагностика проблем](\u002Fdocs\u002Fbots\u002Ftroubleshooting)\n- [Повторная авторизация бота](\u002Fdocs\u002Fbots\u002Fmanagement\u002Freauth)\n","\n## Ревизия бот-платформы\n\n`GET \u002Fv1\u002Fbots\u002Frevision`\n\nВозвращает номера ревизий бот-платформы Битрикс24 по типам клиентов. Не требует ID бота. Тело запроса не требуется.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002Frevision \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002Frevision \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002Frevision', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\nconst { data } = await res.json()\nconsole.log(data) \u002F\u002F { rest: 35, web: 130, mobile: 25, desktop: 6 }\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fbots\u002Frevision', {\n  headers: {\n    'X-Api-Key': 'YOUR_APP_KEY',\n    'Authorization': 'Bearer USER_SESSION_TOKEN',\n  },\n})\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|---------|\n| `data.rest` | number | Ревизия REST-возможностей бот-платформы |\n| `data.web` | number | Ревизия веб-клиента |\n| `data.mobile` | number | Ревизия мобильного клиента |\n| `data.desktop` | number | Ревизия десктоп-клиента |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"rest\": 35,\n    \"web\": 130,\n    \"mobile\": 25,\n    \"desktop\": 6\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n403 — нет скоупа:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SCOPE_DENIED\",\n    \"message\": \"This endpoint requires 'imbot' scope\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 403 | `SCOPE_DENIED` | API-ключ не имеет скоупа `imbot` |\n| 401 | `TOKEN_MISSING` | API-ключ не имеет настроенных токенов |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**Назначение поля `rest`.** Значение растёт, когда Битрикс24 выпускает новые возможности REST бот-платформы. Сравнение сохранённого значения с текущим показывает, что на портале появились новые методы и события бот-платформы.\n\n## Смотрите также\n\n- [Управление ботами](\u002Fdocs\u002Fbots\u002Fmanagement)\n- [Бот-платформа](\u002Fdocs\u002Fbots)\n"]