Для AI-агентов: markdown этой страницы — /docs-content/management-keys/rotate.md индекс документации — /llms.txt

Перевыпустить API-ключ

POST /v1/keys/:id/rotate

Выпускает новый API-ключ взамен прежнего с теми же настройками и переносит на него привязки прежнего ключа.

Параметры

Параметр Тип Обяз. Описание
Параметрid (path) Типstring Обяз.да ОписаниеИдентификатор записи прежнего ключа. Список: GET /v1/keys

Тело запроса может быть пустым или {}: поля тела не читаются, настройки нового ключа берутся с прежнего.

Примеры

Запрос принимает только менеджмент-ключ — см. Ограничения.

curl — менеджмент-ключ

Terminal
curl -X POST "https://vibecode.bitrix24.tech/v1/keys/6dbad0ce-79a9-43f5-8ca4-3e1af7ef63bc/rotate" \
  -H "X-Api-Key: YOUR_MANAGEMENT_KEY"

JavaScript — менеджмент-ключ

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 — новый ключ выпущен:

JSON
{
  "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 — прежний ключ уже отозван:

JSON
{
  "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 прежний ключ продолжает работать. Обычных ключей кабинета эти проверки не касаются. Что умеет ключ подписки — Свой агент на подписке.

Смотрите также