Для AI-агентов: markdown этой страницы — /docs-content/keys-auth/me.md индекс документации — /llms.txt
Самоописание ключа
Необязательный объект data.deployment.standalone.reuseTarget содержит serverId существующего подходящего сервера, kind: "STANDALONE", action: "deploy" и createRequired: false. При его наличии checklist ведёт к тому же серверу вместо создания нового; это не разрешение перезаписать работающий код без проверки. Сигнал возможен и при capabilities.servers.create.available: false, поскольку новая VM не создаётся. GET ничего не восстанавливает: пустая личная привязка карточки заполняется только при create-reuse или уже авторизованном деплое на точный id. Состояние повторно проверяется на write-пути.
GET /v1/me
Возвращает самоописание ключа, которым выполнен запрос: его тип, привязанный портал, тариф и доступные на портале возможности платформы. Скоуп не нужен — эндпоинт отвечает на любой действующий ключ и служит для AI-модели стартовой точкой знакомства с порталом.
Форма ответа зависит от типа ключа. Как ключ передаётся в запросе — Передача ключа.
Создание приложения по инструкции
Если пользователь передал промпт создания, выполните шаги ниже до публикации приложения.
- Прочитайте полный успешный ответ
GET /v1/meс переданным ключом в заголовкеX-Api-Key. Через MCP вызовите полныйget_me({})безsections. До выбора оформления и вопросов о месте использования или бренде применитеdata.uiDesignсpolicyVersion=2(в MCP — полеuiDesign). - Для стандартного нового приложения без указанного места использования при
context.status=portal_boundпримените светлый дизайн Битрикс24 без вопроса о месте или бренде. Явное пожелание пользователя об оформлении имеет приоритет; для явно внешней страницы уточните бренд. Приunresolvedвыберите аккаунт Битрикс24 и повторите запрос с его ключом приложения либо уточните назначение. Привязка ключа не доказывает встраивание и не даёт прав на создание, встраивание или публикацию: проверьте их отдельно. Существующий интерфейс сохраняет оформление; приложение без интерфейса не требует стилей. Для нового интерфейса следуйтеuiDesign.instructionsиuiDesign.css, закрепив указанную версию стилей. - Если запрос не удался, блок
uiDesignотсутствует или версия политики не поддерживается, сообщите, что правило оформления не прочитано, и уточните оформление. - Если есть ссылка на ТЗ чертежа, прочитайте его с переданным ключом и кратко сверьте с пользователем требования по пунктам. Без ТЗ задайте не больше трёх коротких вопросов о том, что приложение должно делать и какие данные использовать. Учитывайте уже указанные требования и выбранное по правилу оформление, затем покажите короткий план.
- Создайте приложение и разместите его на сервере по
data.deploymentи инструкции публикации. Если в промпте указан идентификатор сервера, используйте его. Для уже готового приложения выполняйте только публикацию, без повторного опроса и смены оформления.
Параметры
| Параметр | Тип | Обяз. | Значения | Описание |
|---|---|---|---|---|
Параметрrefresh (query) |
Типstring | Обяз.нет | Значенияtariff |
ОписаниеФорсирует повторную проверку тарифа портала в Битрикс24 перед формированием ответа. Работает только для ключей, привязанных к порталу. Без параметра ответ отдаётся из серверного кэша. |
Примеры
curl — личный ключ
curl https://vibecode.bitrix24.tech/v1/me \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth-приложение
curl https://vibecode.bitrix24.tech/v1/me \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — личный ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/me', {
headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data } = await res.json()
console.log('Тип ключа:', data.type, '· портал:', data.portal)
JavaScript — OAuth-приложение
const res = await fetch('https://vibecode.bitrix24.tech/v1/me', {
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
})
const { data } = await res.json()
Поля ответа
Ответ описывает ключ, а не сущность портала. Верхнеуровневые блоки data.* — это карта возможностей: часть блоков общая для всех ключей, часть появляется только у ключа определённого типа. В колонке «Тип ключа» указано, для какого ключа блок присутствует.
Если вы знакомитесь с ключом впервые, достаточно четырёх блоков. type говорит, каким ключом вы работаете. scopes — к каким данным есть доступ. accessMode — разрешена ли запись. capabilities — какие операции доступны на этом портале и по какой причине отказано в остальных. Остальные блоки нужны под конкретную задачу: deployment и infra — при работе с серверами, ai и webSearch — при вызовах моделей, storage — при загрузке файлов.
| Поле | Тип | Тип ключа | Описание |
|---|---|---|---|
Полеsuccess |
Типboolean | Тип ключавсе | ОписаниеВсегда true при успехе |
Полеdata.type |
Типstring | Тип ключавсе | ОписаниеТип ключа: personal, oauth_app или management |
Полеdata.portal |
Типstring | Тип ключаvibe_api_, vibe_app_ |
ОписаниеДомен привязанного портала Битрикс24 |
Полеdata.portalId |
Типstring | Тип ключаvibe_api_, vibe_app_ |
ОписаниеУстойчивый идентификатор привязанного портала Битрикс24. В отличие от домена не меняется при переименовании и переезде портала — берите его, когда локальные данные раскладываются по аккаунтам. Ключ без портала до этого ответа не доходит: он получает 401 NO_PORTAL, поэтому в успешном ответе поле непустое |
Полеdata.features |
Типobject | Тип ключаvibe_api_, vibe_app_ |
ОписаниеПлатформенные возможности, включённые для портала |
Полеdata.features.appDb |
Типboolean | Тип ключаvibe_api_, vibe_app_ |
Описаниеtrue — для портала включена база данных приложения. При false эндпоинты раздела отвечают 403 APP_DB_DISABLED |
Полеdata.tariff |
Типobject | Тип ключавсе | ОписаниеТариф портала: code, name, isCommercial, wasEverCommercial, checkedAt, kind |
Полеdata.tariff.name |
Типstring · null | Тип ключавсе | ОписаниеЧитаемое название редакции — для показа человеку, не для сравнения в коде. Может быть null. Подробности ниже |
Полеdata.tariff.wasEverCommercial |
Типboolean | Тип ключавсе | ОписаниеПортал когда-либо наблюдался на коммерческом тарифе. Это история, а не доступ. Признак не односторонний — см. ниже |
Полеdata.tariff.checkedAt |
Типstring | Тип ключавсе | ОписаниеВремя последней ПОПЫТКИ сверить тариф с Битрикс24, ISO 8601. Обновляется при вызове с ?refresh=tariff — в том числе тогда, когда сверка не удалась и тариф прочитать не вышло. Отметку об УДАЧНОЙ сверке несёт отдельный заголовок ответа X-Tariff-Checked-At (см. Инфраструктура и деплой), и на этот же ответ он может не прийти вовсе. Поле есть, а заголовка нет — значит сверку пробовали и тариф не прочитали |
Полеdata.scopes |
Типarray | Тип ключавсе | ОписаниеСкоупы ключа. Подбор набора — Скоупы |
Полеdata.api.scopeRequirements |
Типobject | Тип ключавсе | ОписаниеКарта прав ключа: чего у него нет и что каждое недостающее право откроет. Предварительная проверка вместо вызова наугад. Разбор ниже |
Полеdata.api.scopeRequirements.granted |
Типobject | Тип ключавсе | ОписаниеВыданные права, разложенные на bitrix24 и platform — их получают по-разному |
Полеdata.api.scopeRequirements.coverage |
Типobject | Тип ключавсе | ОписаниеПолнота карты: entities — всегда complete, paths — complete либо partial. При partial перечень путей неполон, и отсутствие пути в unlocks НЕ доказывает, что путь не гейтится |
Полеdata.api.scopeRequirements.missing |
Типobject | Тип ключавсе | ОписаниеНедостающие права. У каждого: entities — сущности, которые оно откроет, unlocks — адреса (не более пяти, остаток в unlocksRemaining рядом с truncated), howToObtain — способ получить. Право модуля, который включается для портала отдельно, попадает сюда только на портале, где модуль включён. Уже выданное такое право остаётся в granted |
Полеdata.api.scopeRequirements.unobtainable |
Типobject | Тип ключавсе | ОписаниеПрава, которые этому ключу получить нельзя, и почему. Две причины: личный ключ-вебхук не несёт прав контекста приложения, и есть права, которые платформа выдаёт сама — пользователю они недоступны ни на какой поверхности |
Полеdata.api.scopeRequirements.aliases |
Типobject | Тип ключавсе | ОписаниеНаписания, которые Битрикс24 считает одним правом (task и tasks) |
Полеdata.accessMode |
Типstring | Тип ключавсе | ОписаниеРежим доступа ключа: READWRITE или READONLY. Подробнее — Режим доступа |
Полеdata.portalWriteRestriction |
Типobject | Тип ключаvibe_api_, vibe_app_ |
ОписаниеВторое заявление о запрете — про данные Битрикс24. Все ключи объекта: restricted (код WRITE_BLOCKED_READONLY_KEY), appliesTo (область — изменения данных Битрикс24), routes (закрытые маршруты, у каждой записи своё условие отказа), note и docs (ссылка на страницу режима). Приходит у ключа, чей режим запрещает менять данные Битрикс24, независимо от аварийного рычага — в отличие от writeRestriction. Подробнее — Режим доступа |
Полеdata.capabilities |
Типobject | Тип ключавсе | ОписаниеМатрица доступных операций. Ключи первого уровня — группы, внутри каждой группы — слоты-операции. Строение слота описано ниже |
Полеdata.capabilities.apps |
Типobject | Тип ключавсе | ОписаниеСлоты-операции create — создать приложение, publish — опубликовать в каталоге, bindPlacements — привязать места встраивания. Плюс sourceStorage — не операция, а блок настроек хранилища исходников со своим набором полей |
Полеdata.capabilities.apps.sourceStorage |
Типobject | Тип ключавсе | ОписаниеНастройки хранилища исходников: enabled, requiredBeforeDeploy, automaticOnDeploy, limits.maxBlobBytes, endpoint, mcpToolName, contentTypes, docs. Поле freshnessWindowMinutes добавляется, только когда платформа проверяет возраст снапшота перед публикацией. Полей available и reason у этого блока нет |
Полеdata.capabilities.servers |
Типobject | Тип ключавсе | ОписаниеСлоты create — создать сервер, deploy — опубликовать исходники, preview — работать с токенами доступа: ссылка предпросмотра и Bearer-токен для сквозной (E2E) проверки, wake — разбудить |
Полеdata.capabilities.agents |
Типobject | Тип ключавсе | ОписаниеСлот create — создать AI-агента |
Полеdata.capabilities.managedBots |
Типobject | Тип ключавсе | ОписаниеСлот create — создать управляемого бота |
Полеdata.capabilities.aiRouter |
Типobject | Тип ключавсе | ОписаниеСлоты chatCompletions — вызовы моделей, byok — работа со своим ключом провайдера |
Полеdata.capabilities.appUserSignIn |
Типobject | Тип ключавсе | ОписаниеСлот setup — настройка входа пользователей приложения через SDK платформы. Пока функция не включена для владельца ключа, слот приходит с available: false и reason: "FEATURE_DISABLED" |
Полеdata.capabilities.<группа>.<слот>.available |
Типboolean | Тип ключавсе | ОписаниеДоступна ли операция этому ключу на этом портале прямо сейчас |
Полеdata.capabilities.<группа>.<слот>.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 |
Полеdata.capabilities.<группа>.<слот>.userMessage |
Типstring | Тип ключавсе | ОписаниеГотовый текст на языке пользователя. Приходит при отказе, показывайте его как есть |
Полеdata.capabilities.<группа>.<слот>.note |
Типstring | Тип ключавсе | ОписаниеУсловие, которое available: true не покрывает: требование на стороне Битрикс24, счётчик занятых мест лимита или ограничение бесплатного доступа |
Полеdata.webResearch.promptForAgents |
Типstring | Тип ключавсе | ОписаниеГотовая подсказка для агента: как вызывать исследование и где смотреть каталог провайдеров |
Полеdata.capabilities.<группа>.<слот>.limits |
Типobject | Тип ключавсе | ОписаниеДействующие ограничения слота — например allowedPlans и maxPortalTotal при бесплатном доступе |
Полеdata.capabilities.<группа>.<слот>.alternatives |
Типarray | Тип ключавсе | ОписаниеЧто сделать вместо заблокированной операции: элементы с полями type, description, url или endpoint |
Полеdata.api |
Типobject | Тип ключавсе | ОписаниеПравила работы с API в массиве _rules, список сущностей entity API в entityApi, ссылка на полный справочник |
Полеdata.rateLimit |
Типobject | Тип ключавсе | ОписаниеЛимиты скорости вызовов: requestsPerSecond — лимит портала Битрикс24, общий для всех его ключей, edgeRequestsPerSecondPerIp — граница платформы на IP-адрес клиента. Подробнее — Лимиты запросов |
Полеdata.ai |
Типobject | Тип ключавсе | ОписаниеДоступ к AI Router: модель по умолчанию, доступные модели, размер каталога. Подробнее — AI |
Полеdata.ai.structuredOutputs.models |
Типarray | Тип ключавсе | ОписаниеМодели, которые принимают response_format с типом json_schema. Подробнее — Гарантированный JSON-ответ |
Полеdata.webSearch |
Типobject | Тип ключавсе | ОписаниеПровайдеры веб-поиска и их стоимость. Подробнее — Список провайдеров |
Полеdata.webResearch |
Типobject | Тип ключавсе | ОписаниеГлубокое исследование: available, endpoint, providers, defaultProvider, streaming, docs. Подробнее — Глубокое исследование |
Полеdata.webResearch.providers[].cost |
Типobject | Тип ключавсе | ОписаниеСтоимость одного исследования у провайдера: research — цена в Вайбах (Ꝟ), currency — единица списания. У провайдера на своём ключе research равен 0 |
Полеdata.storage |
Типobject | Тип ключавсе | ОписаниеОбъектное хранилище: использование, тарифы, эндпоинты загрузки. Подробнее — Хранилище |
Полеdata.deployment |
Типobject | Тип ключавсе | ОписаниеКонтракт публикации приложений, зависит от типа целевого сервера. Подробнее — Публикация |
Полеdata.deployment.primary |
Типstring | Тип ключавсе | ОписаниеОсновная модель размещения для этого аккаунта: galaxyApp — приложение в галактике, standalone — отдельная виртуальная машина |
Полеdata.deployment.galaxyApp |
Типobject | Тип ключавсе | ОписаниеКонтракт развёртывания в галактике. На пробном доступе блок приходит, только когда сохранённое состояние показывает подходящий хост. Это предварительная оценка: текущую вместимость окончательно проверяет POST /v1/infra/servers |
Полеdata.deployment.placementNote |
Типstring | Тип ключавсе | ОписаниеПричина недоступности галактики и порядок развёртывания в этом состоянии. На пробном доступе поле различает отсутствие хоста и существующий, но непригодный хост. При выключенном режиме галактик поля нет, см. Galaxy-приложение |
Полеdata.deployment.limits |
Типobject | Тип ключавсе | ОписаниеДействующие пределы публикации: потолки тела и архива, бюджет времени на шаг, число строк лога, потолок одновременных публикаций встроенным телом |
Полеdata.deployment.limits.uploadInlineMax |
Типstring | Тип ключавсе | ОписаниеПотолок HTTP-тела для публикации со встроенным архивом, строкой с единицей измерения — например 96MB. Сверх него приходит 413 INLINE_SOURCE_TOO_LARGE. См. Публикация |
Полеdata.deployment.limits.uploadInlineMaxArchive |
Типstring | Тип ключавсе | ОписаниеТот же потолок, выраженный в размере самого архива, — например 72MB. Меньше uploadInlineMax примерно на четверть: содержимое едет в base64 и тяжелее исходных байт. Значение приходит из той же константы, что и отказ, поэтому пересчитывать потолок самостоятельно не нужно |
Полеdata.deployment.limits.uploadUrlMax |
Типstring | Тип ключавсе | ОписаниеПотолок для публикации по ссылке и по сохранённой версии — 500MB. Эти пути передаются потоком и под потолок встроенного тела не попадают |
Полеdata.infra |
Типobject | Тип ключавсе | ОписаниеИнфраструктура: провайдеры, лимит серверов, список нездоровых серверов, серверы чужих команд, в которых состоит владелец ключа. Подробнее — Инфраструктура |
Полеdata.infra.collaboratorServers |
Типobject | Тип ключавсе | ОписаниеСерверы, где владелец ключа состоит в команде разработки, а не владеет: total — сколько членств всего, count — сколько строк уместилось в ответ, items — сами строки. В лимит infra.limits эти серверы не входят — машины чужие. Те же серверы приходят в GET /v1/infra/servers с блоком access.via: "collaborator" |
Полеdata.infraState |
Типobject | Тип ключавсе | ОписаниеОстановлена ли инфраструктура за неуплату. Строки внутри блока машинные, текст для человека пишет клиент |
Полеdata.infraState.frozen |
Типboolean | Тип ключавсе | ОписаниеОстановлены ли за неуплату серверы, деплой и хранилище. При true отказ 402 ACCOUNT_FROZEN приходит на вызовах, которые оплачиваются балансом Вайбкод, а обращения к своему Битрикс24, AI в пределах месячной квоты тарифа и оплаченный период подписки Cowork/Code продолжают работать. Пока сужение отказа не дошло до портала, true означает «остановлено практически всё»: работают самоописание, справочник, спека, четыре вызова переписки по обращениям — создание, список, чтение одного обращения и комментарий к нему — и отзыв своего ключа Cowork/Code, остальное отвечает 402 ACCOUNT_FROZEN. Полный состав отказа — Коды ошибок |
Полеdata.infraState.reason |
Типstring или null | Тип ключавсе | ОписаниеКод причины остановки: DEBT либо null, когда остановки нет |
Полеdata.infraState.topupUrl |
Типstring или null | Тип ключавсе | ОписаниеАдрес пополнения кабинета либо null, когда пополнять нечего |
Полеdata.feedback |
Типobject | Тип ключавсе | ОписаниеЭндпоинты и лимиты обратной связи. Подробнее — Обратная связь |
Полеdata.auth |
Типobject | Тип ключавсе | ОписаниеКак передать ключ в запросе: заголовки, а для ключа авторизации — шаги OAuth-авторизации |
Полеdata.quickstart |
Типobject | Тип ключавсе | ОписаниеКороткий список первых вызовов для знакомства с API |
Полеdata.b24Credentials |
Типobject | Тип ключаvibe_api_ |
ОписаниеГотовность ключа к вызовам Битрикс24: ready. При ready: false дополнительно reason, а для тарифных причин paywallCode и upgradeUrl. Поле hint приходит, когда состояние доступа стоит перечитать. Блок отсутствует у ключа без портала и у ключа без скоупов Битрикс24 — там признак неприменим. Значения reason и что делать по каждому — Коды ошибок |
Полеdata.b24Credentials.ready |
Типboolean | Тип ключаvibe_api_ |
Описаниеtrue — на ключе есть креды для вызовов портала, false — их нет, и любой вызов к порталу ответит 401 TOKEN_MISSING |
Полеdata.docs |
Типstring | Тип ключавсе | ОписаниеСсылка на полный справочник API — GET /v1/guide |
Полеdata.errorCodes |
Типobject | Тип ключавсе | ОписаниеФормат ответа при ошибке и ссылка на полный справочник кодов |
Полеdata.changelog |
Типobject | Тип ключавсе | ОписаниеСсылка на журнал изменений API |
Полеdata.expiresAt |
Типstring или null | Тип ключаvibe_api_ |
ОписаниеСрок действия ключа. null — без ограничения |
Полеdata.owner |
Типobject | Тип ключаvibe_api_ |
ОписаниеВладелец ключа: name, userId, необязательный userIdSource |
Полеdata.owner.userId |
Типstring или null | Тип ключаvibe_api_ |
ОписаниеНомер сотрудника из вебхука. Ключ Коворка без вебхука может получить подтверждённый номер из участия в Битрикс24; после присвоения ключу этот номер закреплён. null, если номер недоступен. Пока происхождение номера участия не определено (bitrixUserIdSource: null), номер из участия не выдаётся. Поле не даёт доступа к данным Битрикс24: при b24Credentials.ready: false вызовы возвращают 401 TOKEN_MISSING |
Полеdata.owner.userIdSource |
Типstring | Тип ключаvibe_api_ |
Описаниеwebhook или portal-membership. Есть только при заполненном userId |
Полеdata.portalEmbedding |
Типobject | Тип ключаvibe_api_ |
ОписаниеПорядок встраивания через POST /v1/apps → OAuth-авторизацию → POST /v1/apps/:id/publish и границы личного ключа: он не вызывает placements/bind напрямую и сам не является ключом прозрачной авторизации |
Полеdata.app |
Типobject | Тип ключаvibe_app_ |
ОписаниеПривязанное приложение: title, id |
Полеdata.currentUser |
Типobject или null | Тип ключаvibe_app_ |
ОписаниеПользователь Битрикс24, от лица которого идёт запрос. Заполняется при переданном токене сессии, без него приходит null |
Полеdata.placements |
Типobject | Тип ключаvibe_app_ |
ОписаниеВстраивание приложения в интерфейс портала: доступные и зарегистрированные размещения, эндпоинты, порядок приёма запросов. Подробнее — Встраивание приложения в портал |
Полеdata.placements.note |
Типstring | Тип ключаvibe_app_ |
ОписаниеГраница встраивания для ключа, которому запись в данные Битрикс24 закрыта: что из мест встраивания остаётся доступным. У ключа, которому такая запись открыта, поля нет |
Полеdata.placements.bindPrerequisite |
Типobject | Тип ключаvibe_app_ |
ОписаниеУсловие на стороне Битрикс24, без которого привязка места встраивания не пройдёт. Состав блока зависит от региона и типа портала |
Полеdata.placements.bindPrerequisite.subscriptionRequired |
Типboolean | Тип ключаvibe_app_ |
Описаниеtrue — порталу нужна активная подписка Маркетплейса Битрикс24, коммерческого тарифа недостаточно. false — достаточно коммерческого тарифа Битрикс24 |
Полеdata.placements.bindPrerequisite.note |
Типstring | Тип ключаvibe_app_ |
ОписаниеТекст с описанием условия и способом его выполнить |
Полеdata.placements.bindPrerequisite.errorCodes |
Типarray | Тип ключаvibe_app_ |
ОписаниеВозможные отказы привязки, а не результат проверки текущего доступа. Набор объединяет коды тарифного или подписочного условия, ключа разработчика и общие отказы по приложению и месту встраивания; он зависит от региона и типа портала и может расширяться. Читайте актуальный состав из этого поля, а пояснение условий — из note. На коробочном портале добавляется SESSION_REQUIRES_ADMIN. Отказ BOX_WEBHOOK_NOT_DEVELOPER_KEY возможен на обоих типах портала: право rest.developer задаётся при выпуске ключа, повышение прав его владельца ключ не исправит |
Полеdata.oauth |
Типobject | Тип ключаvibe_app_ |
ОписаниеURL и обязательные параметры OAuth-авторизации |
Полеdata.oauthTutorial |
Типobject | Тип ключаvibe_app_ |
ОписаниеПошаговый порядок OAuth-авторизации |
Полеdata.eventDelivery |
Типobject | Тип ключаvibe_app_ |
ОписаниеСерверный приём событий портала без опроса |
Полеdata.eventDelivery.note |
Типstring | Тип ключаvibe_app_ |
ОписаниеПояснение: при каких ключах события портала и вызовы роботов приходят без auth[access_token] и auth[refresh_token], что из этого следует и как вернуть токены. Приходит всегда вместе с блоком eventDelivery, при любом режиме ключа, которым вызван GET /v1/me. Подробнее — Обработчик на стороне приложения |
Полеdata.schemaDiscovery |
Типobject | Тип ключаvibe_app_ |
ОписаниеКак прочитать схему полей без токена сессии |
Для облачного RU-портала bindPrerequisite.errorCodes дополнительно включает B24_EMBEDDING_INSTALL_DENIED. Этот отказ означает, что при действующей подписке Маркетплейса остаётся ограничение на установку приложения; на коробке и в остальных регионах этот код в набор не входит.
Менеджмент-ключ (vibe_live_) возвращает другой набор блоков — portals, totalAppKeys, урезанный capabilities — и не несёт данных портала. Описание — Менеджмент-ключи.
Пример ответа
Личный ключ (vibe_api_) — показаны основные поля:
{
"success": true,
"data": {
"type": "personal",
"portal": "mycompany.bitrix24.ru",
"portalId": "8c3d1e04-…",
"tariff": {
"code": "ru_basic",
"name": "Базовый",
"isCommercial": true,
"wasEverCommercial": true,
"checkedAt": "2026-07-08T08:57:58.270Z",
"kind": "CLOUD"
},
"scopes": ["crm", "task", "tasks", "im", "imbot", "disk", "user"],
"accessMode": "READWRITE",
"capabilities": {
"apps": {
"create": { "available": true },
"publish": { "available": true },
"bindPlacements": { "available": true }
},
"servers": {
"create": { "available": true, "reason": "COMMERCIAL" },
"deploy": { "available": true, "reason": "COMMERCIAL" },
"preview": { "available": true },
"wake": { "available": true }
},
"agents": {
"create": {
"available": true,
"reason": "COMMERCIAL",
"note": "Agent servers count toward the portal's infrastructure limit (currently 2/10)."
}
},
"managedBots": {
"create": {
"available": true,
"reason": "COMMERCIAL",
"note": "Managed bot servers count toward the portal infrastructure limit."
}
},
"aiRouter": {
"chatCompletions": { "available": true },
"byok": { "available": true }
},
"appUserSignIn": {
"setup": { "available": false, "reason": "FEATURE_DISABLED" }
}
},
"owner": { "name": "Иван Петров", "userId": "1" },
"expiresAt": null
}
}
У слотов apps.publish и apps.bindPlacements поле note приходит всегда — в примере выше оно опущено, полный текст возвращает сам эндпоинт.
Ключ авторизации (vibe_app_) без токена сессии — показаны блоки, которых нет у личного ключа:
{
"success": true,
"data": {
"type": "oauth_app",
"portal": "mycompany.bitrix24.ru",
"portalId": "8c3d1e04-…",
"accessMode": "READWRITE",
"app": { "title": "CRM Dashboard", "id": "f2342f7a-…" },
"currentUser": null,
"placements": {
"available": true,
"registered": ["LEFT_MENU"],
"endpoints": [
"POST https://vibecode.bitrix24.tech/v1/placements/bind",
"POST https://vibecode.bitrix24.tech/v1/placements/unbind",
"GET https://vibecode.bitrix24.tech/v1/placements",
"GET https://vibecode.bitrix24.tech/v1/placements/available"
],
"bindPrerequisite": {
"subscriptionRequired": true,
"note": "Binding a placement requires a Bitrix24-side prerequisite that depends on the dispatch path…",
"errorCodes": [
"B24_MARKET_SUBSCRIPTION_REQUIRED",
"B24_MARKET_TRIAL_USED",
"BITRIX_UNAVAILABLE",
"BOX_WEBHOOK_NOT_DEVELOPER_KEY",
"PLACEMENT_APP_GRANT_MISSING",
"PLACEMENT_OPTIONS_REQUIRED",
"PLACEMENT_NOT_REST_BINDABLE",
"B24_EMBEDDING_APP_NOT_FOUND",
"B24_EMBEDDING_INSTALL_DENIED"
]
}
}
}
}
oauth.authorizeUrl— это шаблон, а не готовая ссылка. Эндпоинт/v1/oauth/authorizeтребует обязательный параметрstate(16–512 символов) — это CSRF-токен по RFC 6749 §10.12, который генерирует клиент: создайте криптослучайную строку, добавьте её в URL и сверьте значение, вернувшееся в callback. Сервер не может сгенерироватьstateза вас — иначе защита от CSRF не работает. Запрос поauthorizeUrlкак есть вернёт400 INVALID_REQUEST "state: Required". Опционально добавьтеredirect_uri— ваш адрес возврата, без него используется встроенная страница/oauth/complete, — иscope. Пример полной ссылки:https://vibecode.bitrix24.tech/v1/oauth/authorize?app_key=vibe_app_…&state=aAbBcCdDeEfFgGhH&redirect_uri=https://myapp.com/callbackЗапрос по этой ссылке делает сервер приложения: в ней
app_key, поэтому браузеру её не передавайте. Браузер пользователя перенаправьте на адрес из заголовкаLocationв ответе — шаг 1 авторизации.
Пример ответа при ошибке
401 — неверный ключ:
{
"success": false,
"error": {
"code": "INVALID_API_KEY",
"message": "Invalid API key"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP401 | КодMISSING_API_KEY |
ОписаниеНе передан заголовок X-Api-Key |
| HTTP401 | КодINVALID_API_KEY |
ОписаниеКлюч не опознан: такой строки на платформе нет |
| HTTP401 | КодKEY_INACTIVE |
ОписаниеКлюч отозван |
| HTTP401 | КодKEY_EXPIRED |
ОписаниеСрок действия ключа истёк |
| HTTP401 | КодKEY_NOT_FOUND |
ОписаниеКлюч удалён во время обработки запроса |
| HTTP403 | КодIP_NOT_ALLOWED |
ОписаниеЗапрос с адреса вне списка разрешённых IP |
Полный список общих ошибок API — Ошибки.
Известные особенности
?refresh=tariff проверяет тариф не чаще одного раза в минуту. Параметр форсирует живую проверку тарифа портала в Битрикс24 и сбрасывает кэш ответа. Если предыдущая проверка была меньше минуты назад, запрос возвращает уже известное значение без новой проверки. Для менеджмент-ключа параметр не делает ничего — такой ключ не привязан к порталу.
Ответ кэшируется на стороне сервера около 30 секунд. Смена скоупов или режима доступа отражается в ответе сразу. Тариф, баланс и состояние инфраструктуры обновляются при первом чтении после истечения кэша. Запрос с ?refresh=tariff сбрасывает кэш, и следующее чтение без этого параметра отдаёт свежий тариф.
У ключа в режиме «только чтение» часть слотов capabilities приходит закрытыми. Это apps.publish, apps.bindPlacements, servers.create, servers.wake, agents.create, managedBots.create и обе операции aiRouter — все они отдают available: false и reason: "WRITE_BLOCKED_READONLY_KEY". Слот servers.deploy в этот список не входит: доставка на уже свой сервер такому ключу разрешена. У ключа «только чтение» в корне ответа приходит и поле writeRestriction — код WRITE_BLOCKED_READONLY_KEY, область действия и ссылка на страницу про режимы. Поле появляется только пока запрет включён: платформенный админ вправе его снять, и тогда поле из ответа исчезает вместе с самим запретом. Внутри поля есть список exceptions — маршруты, которые центральный запрет не трогает. Читайте состав из ответа, а не из прозы этой страницы; напечатанный состав с разбором по группам — на странице Режим доступа, раздел «Исключения из запрета записи». У управляющего ключа поле тоже приходит, но снять его нельзя ничем: запрет записи для таких ключей безусловен. Оно нужно потому, что тело ответа называет пишущие ручки в трёх десятках мест (подсказки хранилища, обращений, автосохранения исходников, коворка): это адреса, а не разрешения. Доступность конкретной операции — в capabilities.
Заявлений о запрете два, и они про разное. Рядом с writeRestriction у того же ключа приходит portalWriteRestriction — про изменение данных Битрикс24: код, область, список маршрутов, у каждой записи которого своё условие отказа, и ссылка на страницу режима. writeRestriction описывает платформенные записи и исчезает, если платформенный админ снимает этот запрет аварийным рычагом. portalWriteRestriction описывает данные Битрикс24 и от этого рычага не зависит: делегированные записи в Битрикс24 отказывают и при снятом платформенном запрете. Состав маршрутов читайте из ответа — раздел «Поле portalWriteRestriction» на странице режима объясняет группы.
Слот apps.create закрытым НЕ приходит: приложение в режиме READONLY таким ключом создаётся, а запрет на режим READWRITE описан в поле note этого слота. Чтения режим не затрагивает — например, servers.preview. Подробнее — Режим доступа.
Название тарифа предназначено для показа, а не для сравнения. Поле data.tariff.name собирается при чтении и может меняться, не меняя самого тарифа. Платформа берёт его по такому порядку. Если код тарифа известен справочнику редакций — оттуда, на русском языке. Иначе — название лицензии, как его сообщил Битрикс24, на языке портала. Иначе — сохранённое ранее название. Иначе — null. Из этого следуют три вещи. Первая: null — штатное значение, а не ошибка. Вторая: название не зависит от того, кто спрашивает, — его не меняют ни Accept-Language, ни язык интерфейса владельца ключа. Третья: код тарифа вместо названия не подставляется никогда — если названия нет, приходит null, а не pro100. Ветвить логику нужно по data.tariff.code, isCommercial и kind. Подписи известных редакций при этом уточнены — три из них: «Демо» стало «Демо-период», «Проект» — «Проект — архивный бесплатный», «NFR» — «NFR — партнёрская лицензия».
Признак wasEverCommercial — история, а не доступ. Значение true означает лишь, что портал когда-либо наблюдался на коммерческом тарифе. Доступа к инфраструктуре и режиму OPEN признак не даёт и отказов в этом доступе не снимает: доступ считается только по текущему состоянию портала — тарифу, подписке и демо. Решение принимайте по capabilities в этом же ответе, а не по признаку.
Признак wasEverCommercial не односторонний. Понижение тарифа значение не сбрасывает, но платформа может сменить его с true на false, если оснований под признаком не нашлось. Логику, которая считает переход возможным только в одну сторону, на этом поле строить нельзя.
Модель размещения определяйте по блоку deployment, а не по тарифу портала. На бесплатном тарифе Битрикс24 новая галактика не создаётся. Если режим галактик включён, но хоста нет, deployment.galaxyApp отсутствует, deployment.primary равен standalone, а deployment.placementNote описывает двухшаговый путь. Он доступен, только когда capabilities.servers.create.available в том же ответе равен true. Допустимый идентификатор тарифа выберите из capabilities.servers.create.limits.allowedPlans. При выключенном режиме галактик placementNote отсутствует, одношаговый запрос с source возвращает 400 SOURCE_AT_CREATE_GALAXY_ONLY, а возможность двухшагового пути определяется тем же слотом capabilities. Если существующий хост проходит предварительную проверку сохранённого состояния, блок galaxyApp присутствует и одношаговое создание с source стоит попробовать. Это не гарантия: текущую вместимость проверяет только POST /v1/infra/servers.
Если существующий хост не проходит предварительную проверку, блок galaxyApp отсутствует. Пока capabilities.servers.create.available равен false, placementNote запрещает двухшаговое создание отдельной машины: при включённом контроле trial-ограничений занятый слот даёт 402 TRIAL_PORTAL_LIMIT. Для нового одношагового запроса дождитесь восстановления хоста, попросите администратора починить его либо повысьте тариф. После удаления хоста заново прочитайте GET /v1/me и используйте объявленный там двухшаговый путь. Следуйте подсказке фактического ответа POST. Порядок вызовов — Создать сервер и Публикация.
Без ключа в браузере эндпоинт отдаёт HTML. Запрос GET /v1/me без заголовка X-Api-Key и с заголовком Accept: text/html возвращает страницу-заглушку со статусом 200, а не JSON. Запрос с ключом или без text/html в заголовке Accept всегда получает JSON-самоописание.
Карта требуемых прав
Раньше границу ключа можно было узнать только вызовом: запрос уходил и возвращался отказом 403 SCOPE_DENIED, называющим недостающее право. Список доступных сущностей показывал только открытое, а закрытое просто отсутствовало — и по отсутствию нельзя было отличить «такой сущности нет в продукте» от «она есть, но вашему ключу закрыта».
Блок data.api.scopeRequirements отвечает на этот вопрос до вызова:
{
"granted": { "bitrix24": ["imbot"], "platform": ["vibe:ai", "vibe:search"] },
"missing": {
"bitrix24": {
"crm": {
"entities": ["deals", "contacts", "companies", "leads"],
"unlocks": ["/v1/duplicates/find", "/v1/addresses"],
"unlocksRemaining": 41,
"truncated": true,
"howToObtain": "reissue-key"
}
},
"platform": {}
}
}
Права Битрикс24 закрепляются за ключом в момент выпуска, поэтому howToObtain у них — reissue-key: добавить право в настройках уже выпущенного ключа недостаточно, нужен перевыпуск. Права Вайбкод правятся в кабинете.
Карта описывает только проверку прав на стороне платформы. Она не обещает, что вызов пройдёт. Право, выданное в кабинете уже после выпуска ключа, попадёт в карту, но Битрикс24 его не признает и ответит
BITRIX_ACCESS_DENIED. Отказы по виду ключа, владению, режиму только для чтения, заморозке и тарифу — отдельные оси, и в карте они не описаны. Об этом же предупреждает поле_noteвнутри блока.
Перечень путей пока неполон, и карта говорит об этом сама. Поле
coverage.pathsсо значениемpartialозначает, что часть кастомных роутов ещё не имеет машинного вердикта, поэтомуunlocksиunlocksRemainingзанижают. Отсутствие пути в списке НЕ доказывает, что путь не гейтится: если вызов всё-таки отвечает отказом по правам, верьте отказу, а не карте. Список сущностей при этом полон всегда.
Отбивка не изменилась: вызов без нужного права по-прежнему возвращает 403 SCOPE_DENIED с именем этого права. Карта добавлена как предварительная проверка, а не как замена отбивки.