[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-keys-auth\u002Fme":3,"docs-tabs-keys-auth\u002Fme":6},{"content":4,"lastmod":5},"\n## Самоописание ключа\n\n`GET \u002Fv1\u002Fme`\n\nВозвращает самоописание ключа, которым выполнен запрос: его тип, привязанный портал, тариф и доступные на портале возможности платформы. Скоуп не нужен — эндпоинт отвечает на любой действующий ключ и служит для AI-модели стартовой точкой знакомства с порталом.\n\nФорма ответа зависит от типа ключа. Как ключ передаётся в запросе — [Передача ключа](\u002Fdocs\u002Fkeys-auth#передача-ключа).\n\n## Параметры\n\n| Параметр | Тип | Обяз. | Значения | Описание |\n|----------|-----|:-----:|----------|---------|\n| `refresh` (query) | string | нет | `tariff` | Форсирует повторную проверку тарифа портала в Битрикс24 перед формированием ответа. Работает только для ключей, привязанных к порталу. Без параметра ответ отдаётся из серверного кэша. |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fme \\\n  -H \"X-Api-Key: YOUR_API_KEY\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fme \\\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\u002Fme', {\n  headers: { 'X-Api-Key': 'YOUR_API_KEY' },\n})\nconst { data } = await res.json()\nconsole.log('Тип ключа:', data.type, '· портал:', data.portal)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch('https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fme', {\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.*` — это карта возможностей: часть блоков общая для всех ключей, часть появляется только у ключа определённого типа. В колонке «Тип ключа» указано, для какого ключа блок присутствует.\n\nЕсли вы знакомитесь с ключом впервые, достаточно четырёх блоков. `type` говорит, каким ключом вы работаете. `scopes` — к каким данным есть доступ. `accessMode` — разрешена ли запись. `capabilities` — какие операции доступны на этом портале и по какой причине отказано в остальных. Остальные блоки нужны под конкретную задачу: `deployment` и `infra` — при работе с серверами, `ai` и `webSearch` — при вызовах моделей, `storage` — при загрузке файлов.\n\n| Поле | Тип | Тип ключа | Описание |\n|------|-----|-----------|---------|\n| `success` | boolean | все | Всегда `true` при успехе |\n| `data.type` | string | все | Тип ключа: `personal`, `oauth_app` или `management` |\n| `data.portal` | string | `vibe_api_`, `vibe_app_` | Домен привязанного портала Битрикс24 |\n| `data.tariff` | object | все | Тариф портала: `code`, `name`, `isCommercial`, `wasEverCommercial`, `checkedAt`, `kind` |\n| `data.tariff.checkedAt` | string | все | Время последней проверки тарифа в формате ISO 8601. Обновляется при вызове с `?refresh=tariff` |\n| `data.scopes` | array | все | Скоупы ключа. Подбор набора — [Скоупы](\u002Fdocs\u002Fscopes) |\n| `data.accessMode` | string | все | Режим доступа ключа: `READWRITE` или `READONLY`. Подробнее — [Режим доступа](\u002Fdocs\u002Fkeys-auth\u002Faccess-mode) |\n| `data.capabilities` | object | все | Матрица доступных операций. Ключи первого уровня — группы, внутри каждой группы — слоты-операции. Строение слота описано ниже |\n| `data.capabilities.apps` | object | все | Слоты-операции `create` — создать приложение, `publish` — опубликовать в каталоге, `bindPlacements` — привязать места встраивания. Плюс `sourceStorage` — не операция, а блок настроек хранилища исходников со своим набором полей |\n| `data.capabilities.apps.sourceStorage` | object | все | Настройки хранилища исходников: `enabled`, `requiredBeforeDeploy`, `automaticOnDeploy`, `freshnessWindowMinutes`, `limits.maxBlobBytes`, `endpoint`, `mcpToolName`, `contentTypes`, `docs`. Полей `available` и `reason` у этого блока нет |\n| `data.capabilities.servers` | object | все | Слоты `create` — создать сервер, `deploy` — опубликовать исходники, `preview` — выписать ссылку предпросмотра, `wake` — разбудить |\n| `data.capabilities.agents` | object | все | Слот `create` — создать AI-агента |\n| `data.capabilities.managedBots` | object | все | Слот `create` — создать управляемого бота |\n| `data.capabilities.aiRouter` | object | все | Слоты `chatCompletions` — вызовы моделей, `byok` — работа со своим ключом провайдера |\n| `data.capabilities.\u003Cгруппа>.\u003Cслот>.available` | boolean | все | Доступна ли операция этому ключу на этом портале прямо сейчас |\n| `data.capabilities.\u003Cгруппа>.\u003Cслот>.reason` | string | все | Код состояния слота. Приходит и при `available: true` — `COMMERCIAL`, `TRIAL_ACTIVE`, — и при отказе — например `SESSION_REQUIRED`, `WRITE_BLOCKED_READONLY_KEY`, `MARKETPLACE_REQUIRED`, `BILLING_EXHAUSTED`, `FEATURE_DISABLED`, `INFRA_NOT_PERMITTED`, `SERVER_CREATION_DISABLED`, `SERVER_CREATION_ADMINS_ONLY`, `INT_TARIFF_REQUIRED`, `COMMERCIAL_PLAN_REQUIRED`, `TRIAL_PORTAL_LIMIT`, `PLAN_NOT_ALLOWED_ON_TRIAL`. Набор расширяется — обрабатывайте незнакомый код как отказ, опираясь на `available` |\n| `data.capabilities.\u003Cгруппа>.\u003Cслот>.userMessage` | string | все | Готовый текст на языке пользователя. Приходит при отказе, показывайте его как есть |\n| `data.capabilities.\u003Cгруппа>.\u003Cслот>.note` | string | все | Условие, которое `available: true` не покрывает: требование на стороне Битрикс24, счётчик занятых мест лимита или ограничение бесплатного доступа |\n| `data.webResearch.promptForAgents` | string | все | Готовая подсказка для агента: как вызывать исследование и где смотреть каталог провайдеров |\n| `data.capabilities.\u003Cгруппа>.\u003Cслот>.limits` | object | все | Действующие ограничения слота — например `allowedPlans` и `maxPortalTotal` при бесплатном доступе |\n| `data.capabilities.\u003Cгруппа>.\u003Cслот>.alternatives` | array | все | Что сделать вместо заблокированной операции: элементы с полями `type`, `description`, `url` или `endpoint` |\n| `data.api` | object | все | Правила работы с API в массиве `_rules`, список сущностей entity API в `entityApi`, ссылка на полный справочник |\n| `data.rateLimit` | object | все | Действующие для ключа лимиты запросов, поле `requestsPerSecond`. Подробнее — [Лимиты запросов](\u002Fdocs\u002Fkeys-auth#лимиты-запросов) |\n| `data.ai` | object | все | Доступ к AI Router: модель по умолчанию, доступные модели, размер каталога. Подробнее — [AI](\u002Fdocs\u002Fai) |\n| `data.webSearch` | object | все | Провайдеры веб-поиска и их стоимость. Подробнее — [Список провайдеров](\u002Fdocs\u002Fsearch\u002Fproviders) |\n| `data.webResearch` | object | все | Глубокое исследование: `available`, `endpoint`, `providers`, `defaultProvider`, `streaming`, `docs`. Подробнее — [Глубокое исследование](\u002Fdocs\u002Fsearch\u002Fresearch) |\n| `data.webResearch.providers[].cost` | object | все | Стоимость одного исследования у провайдера: `research` — цена в Вайбах (Ꝟ), `currency` — единица списания. У провайдера на своём ключе `research` равен `0` |\n| `data.storage` | object | все | Объектное хранилище: использование, тарифы, эндпоинты загрузки. Подробнее — [Хранилище](\u002Fdocs\u002Fstorage) |\n| `data.deployment` | object | все | Контракт публикации приложений, зависит от типа целевого сервера. Подробнее — [Публикация](\u002Fdocs\u002Finfra\u002Fdeploy) |\n| `data.infra` | object | все | Инфраструктура: провайдеры, лимит серверов, список нездоровых серверов. Подробнее — [Инфраструктура](\u002Fdocs\u002Finfra) |\n| `data.feedback` | object | все | Эндпоинты и лимиты обратной связи. Подробнее — [Обратная связь](\u002Fdocs\u002Ffeedback) |\n| `data.auth` | object | все | Как передать ключ в запросе: заголовки, а для ключа авторизации — шаги OAuth-авторизации |\n| `data.quickstart` | object | все | Короткий список первых вызовов для знакомства с API |\n| `data.docs` | string | все | Ссылка на полный справочник API — `GET \u002Fv1\u002Fguide` |\n| `data.errorCodes` | object | все | Формат ответа при ошибке и ссылка на полный справочник кодов |\n| `data.changelog` | object | все | Ссылка на журнал изменений API |\n| `data.expiresAt` | string или null | `vibe_api_` | Срок действия ключа. `null` — без ограничения |\n| `data.owner` | object | `vibe_api_` | Владелец ключа: `name`, `userId` |\n| `data.portalEmbedding` | object | `vibe_api_` | Пояснение, что личный ключ не встраивает приложение в интерфейс портала |\n| `data.app` | object | `vibe_app_` | Привязанное приложение: `title`, `id` |\n| `data.currentUser` | object или null | `vibe_app_` | Пользователь Битрикс24, от лица которого идёт запрос. Заполняется при переданном токене сессии, без него приходит `null` |\n| `data.placements` | object | `vibe_app_` | Встраивание приложения в интерфейс портала: доступные и зарегистрированные размещения, эндпоинты, порядок приёма запросов. Подробнее — [Встраивание приложения в портал](\u002Fdocs\u002Fkeys-auth#встраивание-приложения-в-портал) |\n| `data.placements.bindPrerequisite` | object | `vibe_app_` | Условие на стороне Битрикс24, без которого [привязка места встраивания](\u002Fdocs\u002Fapps\u002Fplacements\u002Fbind) не пройдёт. Состав блока зависит от региона и типа портала |\n| `data.placements.bindPrerequisite.subscriptionRequired` | boolean | `vibe_app_` | `true` — порталу нужна активная подписка Маркетплейса Битрикс24, коммерческого тарифа недостаточно. `false` — достаточно коммерческого тарифа Битрикс24 |\n| `data.placements.bindPrerequisite.note` | string | `vibe_app_` | Текст с описанием условия и способом его выполнить |\n| `data.placements.bindPrerequisite.errorCodes` | array | `vibe_app_` | Коды, которыми привязка ответит при невыполненном условии. `BITRIX_UNAVAILABLE` приходит в обоих случаях. К нему добавляются `B24_MARKET_SUBSCRIPTION_REQUIRED` и `B24_MARKET_TRIAL_USED` при `subscriptionRequired: true`, либо `INT_TARIFF_REQUIRED` при `false`. На коробочном портале в набор добавляется `SESSION_REQUIRES_ADMIN` |\n| `data.oauth` | object | `vibe_app_` | URL и обязательные параметры OAuth-авторизации |\n| `data.oauthTutorial` | object | `vibe_app_` | Пошаговый порядок OAuth-авторизации |\n| `data.eventDelivery` | object | `vibe_app_` | Серверный приём событий портала без опроса |\n| `data.schemaDiscovery` | object | `vibe_app_` | Как прочитать схему полей без токена сессии |\n\nМенеджмент-ключ (`vibe_live_`) возвращает другой набор блоков — `portals`, `totalAppKeys`, урезанный `capabilities` — и не несёт данных портала. Описание — [Менеджмент-ключи](\u002Fdocs\u002Fmanagement-keys).\n\n## Пример ответа\n\nЛичный ключ (`vibe_api_`) — показаны основные поля:\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"type\": \"personal\",\n    \"portal\": \"mycompany.bitrix24.ru\",\n    \"tariff\": {\n      \"code\": \"ru_basic\",\n      \"name\": \"Базовый\",\n      \"isCommercial\": true,\n      \"wasEverCommercial\": true,\n      \"checkedAt\": \"2026-07-08T08:57:58.270Z\",\n      \"kind\": \"CLOUD\"\n    },\n    \"scopes\": [\"crm\", \"task\", \"tasks\", \"im\", \"imbot\", \"disk\", \"user\"],\n    \"accessMode\": \"READWRITE\",\n    \"capabilities\": {\n      \"apps\": {\n        \"create\": { \"available\": true },\n        \"publish\": { \"available\": true },\n        \"bindPlacements\": { \"available\": true }\n      },\n      \"servers\": {\n        \"create\": { \"available\": true, \"reason\": \"COMMERCIAL\" },\n        \"deploy\": { \"available\": true, \"reason\": \"COMMERCIAL\" },\n        \"preview\": { \"available\": true },\n        \"wake\": { \"available\": true }\n      },\n      \"agents\": {\n        \"create\": {\n          \"available\": true,\n          \"reason\": \"COMMERCIAL\",\n          \"note\": \"Agent servers count toward the portal's infrastructure limit (currently 2\u002F10).\"\n        }\n      },\n      \"managedBots\": {\n        \"create\": {\n          \"available\": true,\n          \"reason\": \"COMMERCIAL\",\n          \"note\": \"Managed bot servers count toward the portal infrastructure limit.\"\n        }\n      },\n      \"aiRouter\": {\n        \"chatCompletions\": { \"available\": true },\n        \"byok\": { \"available\": true }\n      }\n    },\n    \"owner\": { \"name\": \"Иван Петров\", \"userId\": \"1\" },\n    \"expiresAt\": null\n  }\n}\n```\n\nУ слотов `apps.publish` и `apps.bindPlacements` поле `note` приходит всегда — в примере выше оно опущено, полный текст возвращает сам эндпоинт.\n\nКлюч авторизации (`vibe_app_`) без токена сессии — показаны блоки, которых нет у личного ключа:\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"type\": \"oauth_app\",\n    \"portal\": \"mycompany.bitrix24.ru\",\n    \"accessMode\": \"READWRITE\",\n    \"app\": { \"title\": \"CRM Dashboard\", \"id\": \"f2342f7a-…\" },\n    \"currentUser\": null,\n    \"placements\": {\n      \"available\": true,\n      \"registered\": [\"LEFT_MENU\"],\n      \"endpoints\": [\n        \"POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fplacements\u002Fbind\",\n        \"POST https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fplacements\u002Funbind\",\n        \"GET https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fplacements\",\n        \"GET https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Fplacements\u002Favailable\"\n      ],\n      \"bindPrerequisite\": {\n        \"subscriptionRequired\": true,\n        \"note\": \"Binding a placement requires a Bitrix24-side prerequisite that depends on the dispatch path…\",\n        \"errorCodes\": [\n          \"B24_MARKET_SUBSCRIPTION_REQUIRED\",\n          \"B24_MARKET_TRIAL_USED\",\n          \"BITRIX_UNAVAILABLE\"\n        ]\n      }\n    }\n  }\n}\n```\n\n> ⚠ **`oauth.authorizeUrl` — это шаблон, а не готовая ссылка.** Эндпоинт `\u002Fv1\u002Foauth\u002Fauthorize` требует обязательный параметр `state` (16–512 символов) — это CSRF-токен по RFC 6749 §10.12, который **генерирует клиент**: создайте криптослучайную строку, добавьте её в URL и сверьте значение, вернувшееся в callback. Сервер не может сгенерировать `state` за вас — иначе защита от CSRF не работает. Открытие `authorizeUrl` как есть вернёт `400 INVALID_REQUEST \"state: Required\"`. Опционально добавьте `redirect_uri` — ваш адрес возврата, без него используется встроенная страница `\u002Foauth\u002Fcomplete`, — и `scope`. Пример полной ссылки:\n>\n> ```\n> https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Foauth\u002Fauthorize?app_key=vibe_app_…&state=aAbBcCdDeEfFgGhH&redirect_uri=https:\u002F\u002Fmyapp.com\u002Fcallback\n> ```\n\n## Пример ответа при ошибке\n\n401 — неверный ключ:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"INVALID_API_KEY\",\n    \"message\": \"Invalid API key\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|---------|\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Ключ не найден |\n| 401 | `KEY_INACTIVE` | Ключ отозван |\n| 401 | `KEY_EXPIRED` | Срок действия ключа истёк |\n| 403 | `IP_NOT_ALLOWED` | Запрос с адреса вне списка разрешённых IP |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n**`?refresh=tariff` проверяет тариф не чаще одного раза в минуту.** Параметр форсирует живую проверку тарифа портала в Битрикс24 и сбрасывает кэш ответа. Если предыдущая проверка была меньше минуты назад, запрос возвращает уже известное значение без новой проверки. Для менеджмент-ключа параметр не делает ничего — такой ключ не привязан к порталу.\n\n**Ответ кэшируется на стороне сервера около 30 секунд.** Смена скоупов или режима доступа отражается в ответе сразу. Тариф, баланс и состояние инфраструктуры обновляются при первом чтении после истечения кэша. Запрос с `?refresh=tariff` сбрасывает кэш, и следующее чтение без этого параметра отдаёт свежий тариф.\n\n**У ключа в режиме «только чтение» шесть слотов `capabilities` приходят закрытыми.** Это `apps.create`, `apps.publish`, `apps.bindPlacements`, `servers.create`, `agents.create` и `managedBots.create` — все шесть отдают `available: false` и `reason: \"WRITE_BLOCKED_READONLY_KEY\"`. Остальные слоты, включая `servers.deploy`, `servers.preview`, `servers.wake` и обе операции `aiRouter`, режим доступа не затрагивает. Подробнее — [Режим доступа](\u002Fdocs\u002Fkeys-auth\u002Faccess-mode).\n\n**Без ключа в браузере эндпоинт отдаёт HTML.** Запрос `GET \u002Fv1\u002Fme` без заголовка `X-Api-Key` и с заголовком `Accept: text\u002Fhtml` возвращает страницу-заглушку со статусом `200`, а не JSON. Запрос с ключом или без `text\u002Fhtml` в заголовке `Accept` всегда получает JSON-самоописание.\n\n## Смотрите также\n\n- [Создание и использование ключа](\u002Fdocs\u002Fkeys-auth)\n- [Справочник API для модели](\u002Fdocs\u002Fkeys-auth\u002Fguide)\n- [Режим доступа](\u002Fdocs\u002Fkeys-auth\u002Faccess-mode)\n- [Скоупы](\u002Fdocs\u002Fscopes)\n- [Менеджмент-ключи](\u002Fdocs\u002Fmanagement-keys)\n- [Ошибки](\u002Fdocs\u002Ferrors)\n","2026-07-22",{}]