Для AI-агентов: markdown этой страницы — /docs-content/management-keys/rotate.md индекс документации — /llms.txt
Перевыпустить API-ключ
POST /v1/keys/:id/rotate
Выпускает новый API-ключ взамен прежнего с теми же настройками и переносит на него привязки прежнего ключа.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
Параметрid (path) |
Типstring | Обяз.да | ОписаниеИдентификатор записи прежнего ключа. Список: GET /v1/keys |
Тело запроса может быть пустым или {}: поля тела не читаются, настройки нового ключа берутся с прежнего.
Примеры
Запрос принимает только менеджмент-ключ — см. Ограничения.
curl — менеджмент-ключ
curl -X POST "https://vibecode.bitrix24.tech/v1/keys/6dbad0ce-79a9-43f5-8ca4-3e1af7ef63bc/rotate" \
-H "X-Api-Key: YOUR_MANAGEMENT_KEY"
JavaScript — менеджмент-ключ
const res = await fetch('https://vibecode.bitrix24.tech/v1/keys/6dbad0ce-79a9-43f5-8ca4-3e1af7ef63bc/rotate', {
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_MANAGEMENT_KEY',
},
})
const { success, data, error } = await res.json()
if (success) {
// Значение нового ключа приходит только в этом ответе
console.log('Новый ключ:', data.rawKey)
} else if (error.details?.orphanKeyId) {
// Замена отменена, порядок действий — в «Известных особенностях»
console.error(error.code, error.details)
}
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | ОписаниеВсегда true при успехе |
Полеdata.id |
Типstring | ОписаниеИдентификатор записи нового ключа |
Поле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 |
Типnull | ОписаниеУ нового ключа срока действия нет |
Полеdata.rateLimit |
Типnumber | null | ОписаниеИндивидуальный лимит запросов к AI-эндпоинтам, null — общий лимит платформы |
Полеdata.status |
Типstring | ОписаниеСтатус нового ключа, ACTIVE |
Полеdata.lastUsedAt |
Тип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 — вебхук не заводился |
Полеdata.rawKey |
Типstring | ОписаниеПолное значение нового ключа. Повторно не возвращается |
Полей prefix, suffix и b24Ready в ответе нет — они приходят в GET /v1/keys/:id.
Пример ответа
201 — новый ключ выпущен:
{
"success": true,
"data": {
"id": "9b1f2c3d-4e5f-4a6b-8c7d-0e1f2a3b4c5d",
"name": "Интеграция с CRM",
"type": "APP",
"userId": "fafa9780-eed7-4d29-b040-2448d924f452",
"portalId": "0d9f7744-f853-47c7-b06e-6f61f9dd1b7f",
"clientId": null,
"scopes": ["crm"],
"ipWhitelist": [],
"expiresAt": null,
"rateLimit": null,
"status": "ACTIVE",
"lastUsedAt": null,
"createdAt": "2026-10-29T12:22:53.937Z",
"updatedAt": "2026-10-29T12:22:53.937Z",
"accessMode": "READONLY",
"totalDefault": null,
"issuedVia": "cloud-shared",
"rawKey": "vibe_api_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
}
Пример ответа при ошибке
409 — прежний ключ уже отозван:
{
"success": false,
"error": {
"code": "KEY_NOT_ACTIVE",
"message": "Key is no longer active"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодPERSONAL_KEY_WEBHOOK_SCOPES_INVALID |
ОписаниеУ прежнего ключа остались только права контекста приложения — placement, entity, userfieldtype. Набор прав проверяется до обращения к порталу, поэтому отказ одинаков на любом аккаунте. Сначала добавьте прежнему ключу право на данные через PATCH /v1/keys/:id |
| HTTP400 | КодBOX_NO_DEVELOPER_KEY |
ОписаниеКоробочный портал: у владельца ключа нет ключа разработчика, а прежний ключ несёт права Битрикс24 |
| HTTP400 | КодBOX_NO_DEVELOPER_KEY |
ОписаниеКоробочный портал: у прежнего ключа есть вебхук, а снять его без ключа разработчика владельца нельзя |
| HTTP402 | КодACCOUNT_FROZEN |
ОписаниеБаланс аккаунта заморожен |
| HTTP403 | КодSYSTEM_KEY_ROTATE_FORBIDDEN |
ОписаниеПеревыпускается ключ, который платформа выдаёт на своём эндпоинте: настольного приложения Cowork/Code, агента, проектный ключ для деплоя. В тексте ответа сказано, где этот ключ выдаётся заново |
| HTTP403 | КодCOWORK_PLATFORM_DISABLED |
ОписаниеКлюч, оплачиваемый подпиской Cowork/Code: Cowork/Code отключён на уровне платформы |
| HTTP403 | КодCOWORK_ACCESS_REQUIRED |
ОписаниеКлюч подписки Cowork/Code: владельцу ключа доступ к Cowork/Code не открыт |
| HTTP403 | КодCOWORK_EXTERNAL_CLIENTS_DISABLED |
ОписаниеКлюч подписки Cowork/Code: администратор портала запретил сторонние клиенты |
| HTTP403 | КодCOWORK_SUBSCRIPTION_INACTIVE |
ОписаниеКлюч подписки Cowork/Code: подписка приостановлена или отменена |
| HTTP403 | КодB24_MARKET_SUBSCRIPTION_REQUIRED |
ОписаниеНа аккаунте нет действующей подписки маркетплейса, и вебхук не выписывается. Перевыпуск возобновляется сразу после активации подписки |
| HTTP403 | КодINT_TARIFF_REQUIRED |
ОписаниеТот же отказ в регионе, где доступ определяется платным тарифом Битрикс24 |
| HTTP403 | КодWRITE_BLOCKED_READONLY_KEY |
ОписаниеМенеджмент-ключ, которым отправлен запрос, работает в режиме READONLY |
| HTTP403 | КодMANAGEMENT_SCOPE_REQUIRED |
ОписаниеУ менеджмент-ключа нет скоупа vibe:mgmt:keys |
| HTTP404 | КодKEY_NOT_FOUND |
ОписаниеКлюча с таким id нет, он принадлежит другому пользователю, это менеджмент-ключ или ключ без портала |
| HTTP404 | КодKEY_NOT_FOUND |
ОписаниеКлюч удалили, пока шла выписка. Новый ключ не создаётся |
| HTTP409 | КодKEY_NOT_ACTIVE |
ОписаниеПрежний ключ уже не действует: его отозвали или его статус — EXPIRED. Новый ключ не создаётся. Перечитайте ключ через GET /v1/keys/:id |
| HTTP409 | КодKEY_NOT_ACTIVE |
ОписаниеКлюч авторизации (vibe_app_) не действует, удалён, его приложение удалено или ключ изменили после начала запроса. Новый ключ не создаётся |
| HTTP409 | КодREISSUE_IN_PROGRESS |
ОписаниеТолько ключ авторизации (vibe_app_): с ключом этого приложения уже идёт другая операция — перевыпуск, изменение или удаление. Повторите запрос после её завершения |
| HTTP409 | КодKEY_ROTATION_RECOVERY_REQUIRED |
ОписаниеЗамена этого ключа не завершена: предыдущий перевыпуск закончился ответом 500 или ещё не закончился другой перевыпуск этого же ключа. Отказ относится и к старому, и к новому ключу такой замены. Новый ключ не создаётся. Если ответа 500 не было, а отказ приходит и через несколько минут, обратитесь в поддержку |
| HTTP409 | КодKEY_ROTATION_SOURCE_CHANGED |
ОписаниеПривязка исходного ключа изменилась во время выписки. Новый ключ не создаётся. Перечитайте карточку и состояние ключа перед новой операцией |
| HTTP409 | КодPORTAL_ORIGIN_CUTOVER_BUSY |
ОписаниеУ портала ключа меняется адрес. Повторите перевыпуск позже |
| HTTP500 | КодKEY_ROTATE_REVOKE_FAILED |
ОписаниеЗамена отменена: у заблокированного ключа не подтверждено, что его токены доступа погашены. Новый ключ создан, его значения в ответе нет. Порядок действий — в «Известных особенностях» |
| HTTP500 | КодKEY_ROTATION_REPOINT_FAILED |
ОписаниеЗамена отменена: не подтверждён перенос привязок на новый ключ. Порядок действий — там же |
| HTTP500 | КодKEY_ROTATION_FINALIZE_FAILED |
ОписаниеЗамена отменена: не подтверждено завершение замены. Порядок действий — там же |
| HTTP503 | КодPORTAL_ORIGIN_CUTOVER_UNAVAILABLE |
ОписаниеНе удалось проверить, меняется ли адрес портала ключа. Повторите перевыпуск позже |
| 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 |
Остальные отказы выписки у перевыпуска те же, что у создания: оба метода выписывают ключ одним путём. Это отказы выписки со статусом 409, 410 и 502, со статусом 503 — NETWORK_DEVKEY_REQUIRED и CONNECTOR_KEY_ISSUE_TIMEOUT, а со статусом 403 — B24_MARKET_TRIAL_USED, B24_INSUFFICIENT_SCOPE, B24_ACCESS_DENIED и CONNECTOR_KEY_ISSUE_FORBIDDEN. Их описания и поле error.reason — в Создать API-ключ. Статус 503 приходит и от выписки, и от проверки адреса портала, поэтому решайте по коду, а не по статусу: PORTAL_ORIGIN_CUTOVER_UNAVAILABLE из таблицы выше можно повторить позже, а CONNECTOR_KEY_ISSUE_TIMEOUT сразу повторять нельзя — вебхук на портале мог уже появиться. Проверка доступа портала к платформе на перевыпуск не распространяется, поэтому 402 MARKETPLACE_REQUIRED, 402 INT_TARIFF_REQUIRED, 403 PORTAL_TARIFF_UNREADABLE и 403 PORTAL_SUBSCRIPTION_UNREADABLE здесь не приходят. Со статусом 402 до перевыпуска доходит только отказ самого Битрикс24 в выписке по тарифу — BY_PAID_ONLY, KZ_PAID_ONLY, UZ_PAID_ONLY, B24_PAID_TARIFF_REQUIRED.
Отказы OWNER_DELETED, OWNER_BLOCKED, ACCOUNT_PENDING_ERASURE и B24_USER_DELETED зависят от аккаунта владельца ключа — см. Состояние аккаунта владельца.
Полный список общих ошибок API — Ошибки.
Известные особенности
Что переносится на новый ключ. Название, права, разрешённые IP-адреса, режим доступа, индивидуальный лимит и настройка totalDefault переносятся с прежнего ключа как есть. Серверы, приложения, токены доступа, операции деплоя и боты прежнего ключа переезжают на новый. Срок действия не переносится: новый ключ бессрочный.
Переходный период прежнего ключа — до 24 часов. Прежний ключ продолжает работать 24 часа после перевыпуска, затем перестаёт действовать. Если его собственный срок истекает раньше, он сохраняется: перевыпуск не продлевает ключ и не возвращает к жизни истёкший.
Заблокированный ключ тоже перевыпускается. Перевыпуск — единственный способ заменить ключ в статусе BLOCKED, разблокировки нет. Блокировка прежнего ключа остаётся, переходного периода он не получает, а его токены доступа гасятся, а не переезжают на новый ключ.
Ответ 500 — новый ключ создан, но замена отменена. Значения нового ключа в ответе нет. Его идентификатор приходит в error.details.orphanKeyId. Поле error.details.strandedSlots появляется, если при отмене что-то не удалось вернуть прежнему ключу, и перечисляет это: applications, servers, accessTokens, deployOperations, bots, previousKeyGrace. Если поля нет или в нём нет previousKeyGrace, прежний ключ сохраняет прежний срок действия. Дальнейшие шаги:
- Поле
strandedSlotsесть — обратитесь в поддержку. Не удаляйте новый ключ, пока на него что-то ссылается. - Поля
strandedSlotsнет — удалите новый ключ запросомDELETE /v1/keys/:idс идентификатором изorphanKeyId. После ответа204ещё раз перевыпустите прежний ключ. Если удаление ответило409 KEY_ROTATION_RECOVERY_REQUIRED, обратитесь в поддержку.
Пока замена не завершена, перевыпуск и удаление прежнего и нового ключа отвечают 409 KEY_ROTATION_RECOVERY_REQUIRED, поэтому повтор перевыпуска без этих шагов не пройдёт. Исключение — удаление нового ключа по второму пункту.
Отказ по ключу, выданному платформой, прежний ключ не трогает. При отказе SYSTEM_KEY_ROTATE_FORBIDDEN или отказе по подписке Cowork/Code прежний ключ продолжает работать. Обычных ключей кабинета эти проверки не касаются. Что умеет ключ подписки — Свой агент на подписке.