Для AI-агентов: markdown этой страницы — /docs-content/management-keys/create.md индекс документации — /llms.txt
Создать API-ключ
POST /v1/keys
Создаёт личный API-ключ на указанном портале от имени владельца менеджмент-ключа. Поля передаются плоско в корне JSON.
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
ПолеportalId |
Типstring | Обяз.да | ОписаниеИдентификатор портала. Список: GET /v1/portals. Владелец менеджмент-ключа должен состоять в этом портале |
Полеname |
Типstring | Обяз.да | ОписаниеНазвание ключа, до 255 символов. Строка только из пробелов не принимается |
Полеscopes |
Типarray | Обяз.да | ОписаниеСкоупы нового ключа, хотя бы один. Без exactScopes: true к ним добавляются четыре платформенных права — см. ниже |
ПолеexactScopes |
Типboolean | Обяз.нет | Описаниеtrue — сохранить ровно перечисленные права, без четырёх платформенных. По умолчанию false |
Полеmode |
Типstring | Обяз.нет | ОписаниеРежим доступа ключа: READWRITE или READONLY. Без поля действует режим новых ключей, заданный на портале |
ПолеipWhitelist |
Типarray | Обяз.нет | ОписаниеРазрешённые IP-адреса. Без поля или с пустым массивом — без ограничения |
ПолеexpiresAt |
Типstring | null | Обяз.нет | ОписаниеДата окончания срока действия (ISO 8601). Без поля или null — бессрочный |
ПолеrateLimit |
Типnumber | null | Обяз.нет | ОписаниеПринимается только null. Число от 1 до 100 000 отклоняется с 403 RATE_LIMIT_ADMIN_ONLY, число вне этого диапазона — с 400 VALIDATION_ERROR |
Полеbilling |
Типstring | Обяз.нет | ОписаниеПринимается только wallet, оно же значение по умолчанию. Ключи, оплачиваемые подпиской Cowork/Code, выдаются в кабинете платформы Вайбкод — см. Свой агент на подписке |
К запрошенным правам добавляются четыре платформенных: vibe:infra, vibe:ai, vibe:search, vibe:storage. Ключ из примеров ниже получит crm, task и эти четыре.
На портале, где администратор выключил работу с серверами, vibe:infra из этого набора снимается без ошибки — ключ выпускается с остальными тремя. Отказ 403 INFRA_DISABLED_FOR_PORTAL приходит только на право, явно перечисленное в scopes.
Нужен ключ ровно с перечисленными правами — передайте exactScopes: true. Тело {"portalId": "…", "name": "Только хранилище", "scopes": ["crm", "vibe:storage"], "exactScopes": true} выпустит ключ только с crm и vibe:storage, и на POST /v1/infra/servers и вызовы AI он ответит 403. Права такого ключа окончательные: платформа не расширяет их во время запросов, поэтому GET /v1/me вернёт ровно то, что сохранено при выпуске.
Права placement, entity и userfieldtype личному ключу недоступны и не сохраняются: у созданного ключа их не будет в scopes ответа, даже если они были в запросе рядом с правами на данные. Право userfieldconfig сохраняется.
Примеры
Запрос принимает только менеджмент-ключ — см. Ограничения.
curl — менеджмент-ключ
curl -X POST "https://vibecode.bitrix24.tech/v1/keys" \
-H "X-Api-Key: YOUR_MANAGEMENT_KEY" \
-H "Content-Type: application/json" \
-d '{
"portalId": "0d9f7744-f853-47c7-b06e-6f61f9dd1b7f",
"name": "Выгрузка сделок",
"scopes": ["crm", "task"]
}'
JavaScript — менеджмент-ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/keys', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_MANAGEMENT_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
portalId: '0d9f7744-f853-47c7-b06e-6f61f9dd1b7f',
name: 'Выгрузка сделок',
scopes: ['crm', 'task'],
}),
})
const { success, data } = await res.json()
// Значение ключа приходит один раз — сохраните его в хранилище секретов
const apiKey = data.rawKey
console.log('Создан ключ:', data.id, data.scopes)
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | ОписаниеВсегда true при успехе |
Полеdata.id |
Типstring | ОписаниеИдентификатор записи ключа. Его принимают GET /v1/keys/:id, PATCH /v1/keys/:id, DELETE /v1/keys/:id и POST /v1/keys/:id/rotate |
Полеdata.name |
Типstring | ОписаниеНазвание ключа |
Полеdata.type |
Типstring | ОписаниеТип записи ключа, всегда APP |
Полеdata.userId |
Типstring | ОписаниеИдентификатор владельца ключа — владельца менеджмент-ключа |
Полеdata.portalId |
Типstring | ОписаниеИдентификатор портала |
Полеdata.clientId |
Типstring | null | ОписаниеИдентификатор клиента OAuth, если он записан на ключе. Иначе null |
Полеdata.scopes |
Типarray | ОписаниеСкоупы, сохранённые на ключе: запрошенные вместе с добавленными платформенными, без недоступных личному ключу |
Полеdata.ipWhitelist |
Типarray | ОписаниеРазрешённые IP-адреса. Пустой массив — без ограничения |
Полеdata.expiresAt |
Типstring | null | ОписаниеДата окончания срока действия (ISO 8601), null — бессрочный |
Полеdata.rateLimit |
Типnumber | null | ОписаниеИндивидуальный лимит запросов к AI-эндпоинтам, null — общий лимит платформы |
Полеdata.status |
Типstring | ОписаниеСтатус ключа, у нового ключа ACTIVE |
Полеdata.lastUsedAt |
Типstring | null | ОписаниеДата последнего запроса этим ключом (ISO 8601), у нового ключа null |
Полеdata.createdAt |
Типstring | ОписаниеДата создания (ISO 8601) |
Полеdata.updatedAt |
Типstring | ОписаниеДата последнего изменения (ISO 8601) |
Полеdata.accessMode |
Типstring | ОписаниеREADWRITE или READONLY |
Полеdata.totalDefault |
Типboolean | null | ОписаниеПриходит ли meta.total в списках, запрошенных этим ключом. null — действует настройка платформы |
Полеdata.issuedVia |
Типstring | null | ОписаниеКанал, которым выписан вебхук ключа: per-portal и cloud-shared — модуль-коннектор на портале, dev_key — ключ разработчика владельца, legacy — регистрация через Битрикс24 Network, none — вебхук не заводился, у ключа только права vibe:* |
Полеdata.rawKey |
Типstring | ОписаниеПолное значение ключа. Приходит только в этом ответе — сохраните его сразу |
Пример ответа
{
"success": true,
"data": {
"id": "3c1f6a52-8e4b-4d07-9a1e-5b2d7f0c6e91",
"name": "Выгрузка сделок",
"type": "APP",
"userId": "fafa9780-eed7-4d29-b040-2448d924f452",
"portalId": "0d9f7744-f853-47c7-b06e-6f61f9dd1b7f",
"clientId": null,
"scopes": ["crm", "task", "vibe:infra", "vibe:ai", "vibe:search", "vibe:storage"],
"ipWhitelist": [],
"expiresAt": null,
"rateLimit": null,
"status": "ACTIVE",
"lastUsedAt": null,
"createdAt": "2026-10-29T12:23:14.701Z",
"updatedAt": "2026-10-29T12:23:14.701Z",
"accessMode": "READWRITE",
"totalDefault": null,
"issuedVia": "cloud-shared",
"rawKey": "vibe_api_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
}
Пример ответа при ошибке
400 — не передан portalId:
{
"success": false,
"error": {
"code": "MISSING_PORTAL_ID",
"message": "Field portalId is required"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодMISSING_PORTAL_ID |
ОписаниеВ теле запроса не указан portalId |
| HTTP400 | КодVALIDATION_ERROR |
ОписаниеТело не прошло проверку: нет name или scopes, пустой scopes, неизвестное право, некорректный IP-адрес или дата. Поле и причина — в error.message |
| HTTP400 | КодINVALID_JSON_BODY |
ОписаниеТело запроса — некорректный JSON |
| HTTP400 | КодBILLING_MODE_NOT_SUPPORTED |
ОписаниеВ теле передано billing: "subscription" |
| HTTP400 | КодPERSONAL_KEY_WEBHOOK_SCOPES_INVALID |
ОписаниеВ scopes нет ни одного права на данные. Личный ключ выписывается входящим вебхуком Битрикс24, а права placement, entity и userfieldtype требуют контекста приложения и личному ключу недоступны. Добавьте хотя бы одно право на данные, например crm или user_brief, либо заведите OAuth-приложение для возможностей приложения |
| HTTP400 | КодINVALID_SCOPES |
ОписаниеЧасть запрошенных прав недоступна на аккаунте Битрикс24 |
| HTTP400 | КодPORTAL_NOT_LINKED |
ОписаниеПортал не подключён к Битрикс24 Network — создать ключ невозможно |
| HTTP400 | КодBOX_NO_DEVELOPER_KEY |
ОписаниеПортал коробочный, у владельца не настроен ключ разработчика, а в scopes есть права Битрикс24 |
| HTTP402 | КодMARKETPLACE_REQUIRED |
ОписаниеНа портале нет активной подписки BitrixGPT + Маркетплейс. Приходит только там, где доступ к платформе открывает подписка. Условия и ссылка на оформление — в error.details и error.userMessage |
| HTTP402 | КодBY_PAID_ONLY |
ОписаниеДоступ открывает платный или демо-тариф Битрикс24. Открывает его и платная подписка Битрикс24 Маркет Плюс — в Беларуси она продаётся |
| HTTP402 | КодKZ_PAID_ONLY |
ОписаниеРегион портала открывает доступ по тарифу: платный или демо-тариф Битрикс24, подписка в регионе не продаётся |
| HTTP402 | КодUZ_PAID_ONLY |
ОписаниеТо же для региона UZ: платный или демо-тариф Битрикс24, подписка в регионе не продаётся |
| HTTP402 | КодINT_TARIFF_REQUIRED |
ОписаниеПортал международного сегмента на бесплатном тарифе Битрикс24 |
| HTTP402 | КодSELFHOSTED_NOT_AVAILABLE |
ОписаниеПортал коробочный, а коробочный Битрикс24 на этой установке пока не обслуживается. Покупка тарифа отказ не снимает, обращаться — в поддержку |
| HTTP402 | КодB24_PAID_TARIFF_REQUIRED |
ОписаниеТариф Битрикс24 на портале бесплатный, а на таком тарифе Битрикс24 закрывает REST при любом состоянии подписки BitrixGPT + Маркетплейс. Поле error.userMessage называет условие доступа. Помогает только переход портала на платный тариф Битрикс24, ссылки на покупку — в error.details.upgradeUrl и error.details.secondaryUpgradeUrl, когда портал их отдаёт. Тариф «Демо» не затронут |
| HTTP402 | КодACCOUNT_FROZEN |
ОписаниеПлатёжный аккаунт портала заморожен за отрицательный баланс |
| HTTP403 | КодNOT_PORTAL_MEMBER |
ОписаниеВладелец менеджмент-ключа не состоит в портале с указанным portalId |
| HTTP403 | КодPORTAL_ACCESS_BLOCKED |
ОписаниеДоступ владельца к порталу отключён: его участие в портале неактивно или запрещено политикой доступа портала |
| HTTP403 | КодPORTAL_TARIFF_UNREADABLE |
ОписаниеСостояние тарифа аккаунта сейчас подтвердить не удалось. Причина может быть временной (занята очередь проверок, недавняя попытка, истёк отведённый на проверку срок) или в правах ключа. Повторите проверку в кабинете платформы Вайбкод: менеджмент-ключ не привязан к порталу, поэтому /v1/me?refresh=tariff с ним проверку не запускает (запрос с уже существующим ключом нужного аккаунта запускает). Поле error.details.requiredTariffs пустое, покупка не предлагается. Переподключение под главным администратором аккаунта и обращение в поддержку нужны, только если повторная проверка стабильно не помогает |
| HTTP403 | КодPORTAL_SUBSCRIPTION_UNREADABLE |
ОписаниеСостояние подписки аккаунта сейчас подтвердить не удалось. Причина может быть временной (занята очередь проверок, недавняя попытка, истёк отведённый на проверку срок) или в правах ключа. Повторите проверку в кабинете платформы Вайбкод: менеджмент-ключ не привязан к порталу, поэтому /v1/me?refresh=tariff с ним проверку не запускает (запрос с уже существующим ключом нужного аккаунта запускает). Поле error.details.requiredTariffs пустое, покупка не предлагается. Переподключение под главным администратором аккаунта и обращение в поддержку нужны, только если повторная проверка стабильно не помогает |
| HTTP403 | КодKEY_CREATION_RESTRICTED |
ОписаниеПолитика портала не разрешает владельцу создавать ключи. Право выдаёт администратор портала — см. Права на создание |
| HTTP403 | КодKEY_POLICY_READONLY_REQUIRED |
ОписаниеПолитика портала разрешает создавать только ключи с режимом READONLY, а в mode запрошен READWRITE |
| HTTP403 | КодRATE_LIMIT_ADMIN_ONLY |
ОписаниеВ rateLimit передано число. Индивидуальный лимит через этот эндпоинт не задаётся |
| HTTP403 | КодINFRA_DISABLED_FOR_PORTAL |
ОписаниеВ scopes явно запрошено право vibe:infra, а администратор портала выключил работу с серверами. Ключ не создаётся. Запрос без этого права проходит и на закрытом портале |
| HTTP403 | КодSCOPE_NOT_AVAILABLE_ON_PORTAL |
ОписаниеВ scopes есть право, которое на этом портале не включено. Список таких прав — в error.message |
| HTTP403 | КодONEC_ACCESS_REQUIRED |
ОписаниеВ scopes запрошено право vibe:onec, а у владельца ключа нет доступа к 1С. Доступ к 1С выдаёт администратор портала. Ключ не создаётся. Если проверить доступ не удалось, право выдаётся |
| HTTP403 | КодKEY_STORAGE_SCOPE_REQUIRES_PERSONAL_KEY |
ОписаниеВ scopes явно запрошено право vibe:storage, а менеджмент-ключ не подтверждён как личный ключ владельца. Отказ приходит и с exactScopes: true. Менеджмент-ключ, созданный в личном кабинете, этот отказ не получает |
| HTTP403 | КодB24_MARKET_SUBSCRIPTION_REQUIRED |
ОписаниеНа аккаунте нет действующей подписки маркетплейса, и вебхук не выписывается. Ссылка на оформление — в error.details.upgradeUrl. На облачном аккаунте с прочитанным бесплатным тарифом Битрикс24 этот код не приходит: там отвечает B24_PAID_TARIFF_REQUIRED. Коробочный аккаунт эта замена не затрагивает |
| HTTP403 | КодB24_MARKET_TRIAL_USED |
ОписаниеПробный период подписки маркетплейса израсходован — нужна платная подписка. Ссылка на оформление — в error.details.upgradeUrl. На облачном аккаунте с прочитанным бесплатным тарифом Битрикс24 этот код не приходит: там отвечает B24_PAID_TARIFF_REQUIRED. Коробочный аккаунт эта замена не затрагивает |
| HTTP403 | КодINT_TARIFF_REQUIRED |
ОписаниеТот же отказ по подписке в регионе, где доступ определяется платным тарифом Битрикс24. Ссылки на оформление нет: подписка там не продаётся |
| HTTP403 | КодB24_INSUFFICIENT_SCOPE |
ОписаниеКлючу разработчика владельца не хватает прав на аккаунте. Переподключите аккаунт, чтобы ключ разработчика выписался заново |
| HTTP403 | КодB24_ACCESS_DENIED |
ОписаниеБитрикс24 не выдал вебхук по правам сотрудника |
| HTTP403 | КодCONNECTOR_KEY_ISSUE_FORBIDDEN |
ОписаниеАккаунт запрещает этому сотруднику выписывать ключи. Право выдаёт администратор аккаунта — см. Права на создание |
| HTTP403 | КодWRITE_BLOCKED_READONLY_KEY |
ОписаниеМенеджмент-ключ в режиме «только чтение» |
| HTTP403 | КодMANAGEMENT_SCOPE_REQUIRED |
ОписаниеУ менеджмент-ключа нет скоупа vibe:mgmt:keys |
| HTTP409 | КодCONNECTOR_MODULE_NOT_INSTALLED |
ОписаниеМодуль-коннектор на аккаунте не установлен, выписать ключ через него нельзя. Повтор без установки модуля не поможет |
| HTTP410 | КодSTALE_DEVELOPER_KEY |
ОписаниеКлюч разработчика владельца недействителен и автоматически не перевыпускается. Переподключите аккаунт |
| HTTP502 | КодCONNECTOR_PLAN_REQUIRED |
ОписаниеТариф аккаунта Битрикс24 не включает Вайбкод, и предлагать нечего — коробочный аккаунт, аккаунт уже на платном тарифе, нераспознанный регион. Текст причины для человека — в error.userMessage. Повтор не поможет, пока тариф не сменён |
| HTTP502 | КодCONNECTOR_REST_UNAVAILABLE |
ОписаниеБитрикс24 отказал в выписке, а управляемого решения нет: подписка или пробный период аккаунта по данным платформы действуют. Исходная причина — в error.details.reason, error.details.retryable: true говорит, что состояние временное. Предложения оформить подписку в ответе нет: оформлять нечего. Свежее чтение подписки перед ответом платформа не гарантирует |
| HTTP502 | КодCONNECTOR_KEY_ISSUE_FAILED |
ОписаниеДругой отказ модуля-коннектора или недоступность его транспорта. Исходная причина — в error.details.reason |
| HTTP502 | КодCONNECTOR_KEY_ISSUE_RESPONSE_LOST |
ОписаниеОтвет модуля-коннектора потерян, и вебхук на портале мог уже появиться. Не повторяйте выписку сразу |
| HTTP502 | КодRECOVERY_FAILED |
ОписаниеПеревыпуск ключа разработчика не удался, состояние временное — повторите запрос |
| HTTP502 | КодDEVKEY_MINT_FAILED |
ОписаниеДругой отказ выписки через ключ разработчика. Диагностика — в error.details.b24Code и error.details.b24Status |
| HTTP502 | КодBITRIX_UNAVAILABLE |
ОписаниеБитрикс24 не зарегистрировал входящий вебхук: не ответил или отказал без названной причины. Во втором случае ответ несёт error.details.incidentCode — шестисимвольный код обращения, по которому поддержка находит запись в журнале |
| HTTP503 | КодNETWORK_DEVKEY_REQUIRED |
ОписаниеКлюч разработчика владельца ещё не выдан, а выписка на этом портале идёт только через него. Текст для человека — в error.userMessage |
| HTTP503 | КодCONNECTOR_KEY_ISSUE_TIMEOUT |
ОписаниеМодуль-коннектор не ответил вовремя, и вебхук на портале мог уже появиться. Не повторяйте выписку сразу |
| HTTP401 | КодWRONG_KEY_TYPE |
ОписаниеЗапрос отправлен ключом портала — личным vibe_api_ или ключом авторизации vibe_app_. Эндпоинт принимает только менеджмент-ключ |
| HTTP401 | КодKEY_INACTIVE |
ОписаниеМенеджмент-ключ отозван или заблокирован |
| HTTP401 | КодKEY_EXPIRED |
ОписаниеСрок действия менеджмент-ключа закончился |
| HTTP401 | КодINVALID_API_KEY |
ОписаниеКлюч с переданным значением не найден |
| HTTP401 | КодMISSING_API_KEY |
ОписаниеНе передан заголовок X-Api-Key |
Отказы OWNER_DELETED, OWNER_BLOCKED, ACCOUNT_PENDING_ERASURE и B24_USER_DELETED зависят от аккаунта владельца ключа — см. Состояние аккаунта владельца.
Две проверки доступа к платформе. Первая — проверка доступа портала. Её исходы со статусом 402 — MARKETPLACE_REQUIRED, BY_PAID_ONLY, KZ_PAID_ONLY, UZ_PAID_ONLY и INT_TARIFF_REQUIRED. Какой именно придёт, решает не регион лицензии сам по себе, а то, чем платформа открывает доступ на этом портале: где его открывает подписка — MARKETPLACE_REQUIRED, где тариф Битрикс24 — один из четырёх остальных. MARKETPLACE_REQUIRED приходит только тогда, когда подписка прочитана и её нет. Коробочный портал там, где коробочный Битрикс24 пока не обслуживается, получает 402 SELFHOSTED_NOT_AVAILABLE. Ещё два исхода той же проверки идут со статусом 403, и оба означают, что платформе нечего назвать: PORTAL_TARIFF_UNREADABLE и PORTAL_SUBSCRIPTION_UNREADABLE. Эта проверка касается только выписки нового ключа: перевыпуск, автоматическое восстановление ключа и передача владения ей не подчиняются, а уже выданные ключи продолжают работать.
Вторая проверка идёт позже, и область у неё шире: сам Битрикс24 отказывает в выписке, потому что тариф аккаунта не включает Вайбкод. Она срабатывает на всём, что выписывает ключ, — на создании, на перевыпуске, на автоматическом восстановлении ключа и на передаче владения. Там, где доступ продаётся, ответ — 402 с кодом BY_PAID_ONLY, KZ_PAID_ONLY или UZ_PAID_ONLY. Где предлагать нечего — 502 CONNECTOR_PLAN_REQUIRED. Повтор запроса с любым из этих кодов не поможет, пока тариф Битрикс24 не сменён.
Отказы, общие с перевыпуском. Отказы самой выписки приходят и на перевыпуске — какие именно, перечислено в Перевыпустить API-ключ. Тело отказа выписки может нести поле error.reason с точной причиной во внутренней классификации платформы, тогда как error.code остаётся прежним. Разбирайте отказ по error.code, а не по тексту message.
Полный список общих ошибок API — Ошибки.