Для AI-агентов: markdown этой страницы — /docs-content/errors.md индекс документации — /llms.txt
Коды ошибок
Справочник кодов ошибок API Вайбкод: единый формат ответа, перечень кодов, типичные причины и способы устранения. Применяется ко всем эндпоинтам /v1/....
Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key
Разделы документации
- Авторизация, ключи и права —
MISSING_API_KEY,INVALID_API_KEY,TOKEN_MISSING,SCOPE_DENIED,BITRIX_ACCESS_DENIED,WRITE_BLOCKED_READONLY_KEY - Запрос и данные —
VALIDATION_ERROR,INVALID_PARAMS,MISSING_REQUIRED_FILTER,BATCH_LIMIT_EXCEEDED,ENTITY_NOT_FOUND - Биллинг, тариф и подписка —
BILLING_EXHAUSTED,COMMERCIAL_PLAN_REQUIRED,B24_MARKET_SUBSCRIPTION_REQUIRED,B24_MARKET_TRIAL_USED,INT_TARIFF_REQUIRED - Лимиты, очереди и паузы —
RATE_LIMITED,CALLER_RATE_LIMITED,ERROR_LOOP_DETECTED,QUEUE_OVERFLOW,QUEUE_TIMEOUT,TIMEOUT_QUARANTINE,OPERATION_TIME_LIMIT - Битрикс24 и платформа —
BITRIX_ERROR,METHOD_NOT_YET_AVAILABLE,BITRIX_UNAVAILABLE,BITRIX_TIMEOUT,INTERNAL_ERROR - Что безопасно повторять — дошёл ли целевой вызов до Битрикс24 и что делать с чтением или записью по каждому временному коду
- Повторы и обработка ошибок в коде — когда повторять запрос, а когда сначала перечитать сущность
Быстрый старт
Запросите сделку, которой нет на портале. Ответ придёт с HTTP-статусом 404 и кодом отказа в поле error.code:
curl "https://vibecode.bitrix24.tech/v1/deals/999999999" \
-H "X-Api-Key: YOUR_API_KEY"
{
"success": false,
"error": {
"code": "ENTITY_NOT_FOUND",
"message": "Элемент не найден"
}
}
Тот же конверт приходит на любом маршруте /v1/.... Поля конверта разобраны в разделе «Формат ответа при ошибке» ниже.
Полный пример
Клиент делает три запроса: читает список сделок, запрашивает несуществующую сделку и обращается по пути с опечаткой. Каждый отказ разбирается по error.code, а не по тексту error.message: язык сообщения заранее не известен. На RATE_LIMITED клиент ждёт столько секунд, сколько указано в заголовке Retry-After, и повторяет запрос не больше двух раз.
const BASE = 'https://vibecode.bitrix24.tech/v1'
const API_KEY = 'YOUR_API_KEY'
async function call(path, attempt = 1) {
const res = await fetch(`${BASE}${path}`, { headers: { 'X-Api-Key': API_KEY } })
const body = await res.json()
if (body.success) return body
const { code, message } = body.error
switch (code) {
case 'ENTITY_NOT_FOUND':
console.log(`${path}: записи нет — повтор не поможет`)
return null
case 'ROUTE_NOT_FOUND':
console.log(`${path}: такого маршрута нет — сверьте путь с GET /v1/guide`)
return null
case 'SCOPE_DENIED':
console.log(`${path}: ключу не хватает скоупа — ${body.error.userMessage ?? message}`)
return null
case 'RATE_LIMITED': {
if (attempt >= 3) throw new Error(`${path}: лимит запросов не отпускает`)
const wait = Number(res.headers.get('Retry-After') ?? 1)
await new Promise((resolve) => setTimeout(resolve, wait * 1000))
return call(path, attempt + 1)
}
default:
throw new Error(`${res.status} ${code}: ${message}`)
}
}
const list = await call('/deals?limit=1')
// call() возвращает null на разобранном отказе — он уже напечатан, печатать нечего
if (list) console.log('Первая сделка:', list.data[0]?.id)
await call('/deals/999999999')
await call('/dealz')
Вывод на тестовом портале:
Первая сделка: 575
/deals/999999999: записи нет — повтор не поможет
/dealz: такого маршрута нет — сверьте путь с GET /v1/guide
Повторять ли запись после временного отказа и как ограничить число повторов для разных кодов — готовые обработчики на JavaScript, Python и PHP на странице Повторы и обработка ошибок в коде.
Формат ответа при ошибке
Каждый ответ с ошибкой возвращается в едином виде. error — объект.
{
"success": false,
"error": {
"code": "ENTITY_NOT_FOUND",
"message": "Элемент не найден"
}
}
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
Полеsuccess |
Типboolean | Обяз.да | ОписаниеПри ошибке всегда false |
Полеerror.code |
Типstring | Обяз.да | ОписаниеМашиночитаемый код ошибки. Используйте для различения типов ошибок в коде клиента |
Полеerror.message |
Типstring | Обяз.да | ОписаниеОписание ошибки для разработчика. Язык заранее не известен и зависит от источника: технические сообщения платформы приходят на английском, сообщения от Битрикс24 — на языке портала, сообщения о сбоях облачного провайдера локализуются под язык пользователя. Не разбирайте текст и не полагайтесь на его язык — ветвитесь по error.code |
Полеerror.hint |
Типstring | object | Обяз.нет | ОписаниеПодсказка для разработчика: что попробовать дальше, на какие пределы обратить внимание. Строка с текстом либо объект, и объектная форма приходит там, где у отказа есть готовый рецепт. При создании инфраструктуры POST /v1/infra/servers это поля reason, recovery и example — в example готовое тело запроса для исправления. У 413 INLINE_SOURCE_TOO_LARGE — сразу на трёх маршрутах: выкладка кода, загрузка файла и создание сервера — объект несёт четыре строки: reason (почему отказано и какой потолок), recovery (каким путём отправить тот же архив), recoveryAction (то же действие одной строкой) и note (что помогает независимо от выбранного пути) |
Полеerror.userMessage |
Типstring | Обяз.нет | ОписаниеСообщение для конечного пользователя на русском языке. Появляется в биллинговых, инфраструктурных и тарифных ошибках, при перегрузке очереди портала, в отказах лимитера рабочего времени портала и в отказах по скоупу ключа (error.cause = key_scope_missing): там оно называет недостающее право и место, где его добавляют, и показывается человеку как есть |
Полеerror.alternatives |
Типarray | Обяз.нет | ОписаниеПути решения отказа: оформить тариф, пополнить баланс, обратиться к своей AI-модели по своему ключу. Каждый элемент несёт type, а вместе с ним ссылку url или описание description. Приходит в отказах по тарифу, подписке и балансу |
Полеerror.details |
Типobject | Обяз.нет | ОписаниеМашиночитаемый контекст отдельных кодов. Примеры: reason в INVALID_STATE и в ROUTE_NOT_FOUND, deployableKeys в INFRA_FORBIDDEN_FOR_COWORK_KEY, upgradeUrl в отказах по подписке, method и switchUrl в WRITE_BLOCKED_READONLY_KEY. Набор полей зависит от кода — читайте его описание |
Полеerror.warning |
Типstring | Обяз.нет | ОписаниеПоявляется при повторяющихся одинаковых ошибках на одном ключе — вероятный признак ошибки в коде клиента. Счётчик эвристический, поэтому предупреждение не гарантирует наличие ошибки |
Полеerror.retryAfter |
Типnumber | Обяз.нет | ОписаниеСекунды до следующей попытки. Появляется в 429 очереди портала (QUEUE_OVERFLOW, QUEUE_TIMEOUT), в паузах OPERATION_TIME_LIMIT и TIMEOUT_QUARANTINE и в транзиентных 503 (BITRIX_TIMEOUT, POOL_EXHAUSTED, DB_TRANSIENT, SERVICE_UNAVAILABLE). У ERROR_LOOP_DETECTED поле и заголовок Retry-After содержат остаток паузы до следующей пробы. Если время уже истекло, но вызов ещё блокируется, — 60 секунд до повторной проверки. У одиночного RATE_LIMITED поля в теле нет — срок приходит заголовком Retry-After. У сформированной платформой подошибки пакета с этим кодом срок приходит полем retryAfter в data.errors.<id> или data[i].error: отдельного заголовка для подвызова нет. У LARGE_BODY_BACKEND_BUSY поле приходит не на всех путях отказа — там тоже берите срок из заголовка |
Полеerror.b24Code |
Типstring | Обяз.нет | ОписаниеМашиночитаемый код причины от Битрикс24 в ответах 422 BITRIX_ERROR. У роутов чатов на мессенджере v2 — загрузки чата, счётчиков, сообщений вокруг сообщения, режима format=v2, ссылок и гостей, стикеров, формы задачи для чата и для сообщения, формы потока и Zoom — ещё и в 404 ENTITY_NOT_FOUND. Приходит не всегда — только когда Битрикс24 прислал отдельный код |
Полеerror.release |
Типstring | Обяз.нет | ОписаниеИдентификатор обновления Битрикс24, которого ждёт портал: имя модуля и номер версии одной строкой, например imopenlines 26.700.0. Приходит только в METHOD_NOT_YET_AVAILABLE |
Полеerror.scope |
Типstring | Обяз.нет | ОписаниеОбласть отказа: "apiKey" — вызывающий ключ, "portal" — аккаунт Битрикс24. Конкретные ограничения и правила повтора определяются error.code. "apiKey" приходит в ERROR_LOOP_DETECTED, OPERATION_TIME_LIMIT, TOKEN_REFRESH_FAILED, PORTAL_CREDENTIALS_REJECTED и PORTAL_ADDRESS_CHANGED. "portal" приходит в QUEUE_OVERFLOW, QUEUE_TIMEOUT, RATE_LIMITED при отказе Битрикс24, BITRIX_TIMEOUT и TIMEOUT_QUARANTINE. FEEDBACK_QUOTA_EXCEEDED использует оба значения |
Полеerror.cause |
Типstring | Обяз.нет | ОписаниеПричина отказа в доступе. b24_permission — у пользователя Битрикс24, от имени которого идёт вызов, нет прав. b24_scope — учётным данным ключа не хватает скоупа Битрикс24. key_scope_missing — у самого ключа API нет скоупа, который нужен маршруту. bot_other_key — бот привязан к другому ключу API. unknown — причину нельзя установить однозначно. Набор открытый: незнакомое значение читайте как unknown. Приходит в 403 BITRIX_ACCESS_DENIED, в 403 BOT_ACCESS_DENIED и в 422 BITRIX_ERROR с b24Code ACCESS_DENIED_EXTEND или NO_AUTH_FOUND. key_scope_missing приходит в 403 INSUFFICIENT_SCOPE, 403 INFRA_SCOPE_REQUIRED, 403 SCOPE_NOT_ALLOWED пакетного запроса и в 403 SCOPE_DENIED маршрутов сущностей (включая их пакетные и агрегатные вызовы и include), записей таймлайна и открытых линий. Разбор — Авторизация, ключи и права |
Полеerror.method |
Типstring | Обяз.нет | ОписаниеМетод Битрикс24, на котором случился отказ, не длиннее 100 символов. Приходит вместе с error.cause, когда метод известен |
Полеerror.requiredScope |
Типstring | Обяз.нет | ОписаниеСкоуп, которого не хватило. При error.cause = b24_scope — скоуп Битрикс24, и только когда скоуп метода известен. При error.cause = key_scope_missing — скоуп, который нужен маршруту или вызову пакета. В ответе на пакет, вызовам которого нужны разные скоупы, не приходит |
Полеerror.keyScopes |
Типarray | Обяз.нет | ОписаниеСкоупы ключа, действующие в этом запросе, — вместе с выданными автоматически vibe:ai и vibe:search, поэтому набор бывает шире data.scopes из GET /v1/me. Приходит только при error.cause = key_scope_missing. В элементах data.errors пакетного запроса не повторяется |
Полеerror.fix |
Типobject | Обяз.нет | ОписаниеЧто снимает отказ: action — действие, via — где оно совершается. При via: "same_key" приходят ещё path — готовый маршрут без подстановок — и body — готовое тело запроса к нему. Приходит вместе с error.cause. action: "none" значит, что машинного действия нет, — читайте error.hint. Наборы action и via открытые: незнакомое action читайте как none, незнакомое via — как шаг человека. Значения — Авторизация, ключи и права |
Пример ответа с дополнительным полем hint (429 RATE_LIMITED) — срок повтора здесь приходит только заголовком Retry-After: 2:
{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "QUERY_LIMIT_EXCEEDED",
"hint": "Wait 1-2 seconds and retry. Use POST /v1/batch to combine up to 50 calls in 1 request."
}
}
В одиночном HTTP-ответе заголовок Retry-After дублирует значение error.retryAfter, когда поле есть, для совместимости со стандартом HTTP. Некоторые отказы передают срок только заголовком — в одиночном ответе опирайтесь на него. У подошибки внутри успешного пакетного ответа отдельного заголовка нет: если срок передан, берите его из retryAfter этой подошибки.
Коды ошибок
Таблица покрывает основные коды, которые встречаются на любом эндпоинте API Вайбкод. Доменные коды (BOT_NOT_FOUND, SERVER_NOT_RUNNING, AGENT_LIMIT_REACHED и подобные) описаны на страницах соответствующих разделов.
Авторизация и ключи
| Код | HTTP | Когда возникает |
|---|---|---|
КодMISSING_API_KEY |
HTTP401 | Когда возникаетЗапрос без заголовка X-Api-Key |
КодINVALID_API_KEY |
HTTP401 | Когда возникаетПлатформа не знает такой строки ключа: опечатка, обрезанное при копировании значение, ключ от другого окружения или удалённый ключ. Существующий ключ, который перестал работать, отвечает другими кодами — KEY_INACTIVE, KEY_EXPIRED, PORTAL_CREDENTIALS_REJECTED |
КодKEY_INACTIVE |
HTTP401 | Когда возникаетКлюч найден, но отозван или заблокирован платформой. Строка ключа прежняя, и новый ключ выдаётся отдельно — восстановить отозванный нельзя |
КодKEY_EXPIRED |
HTTP401 | Когда возникаетКлюч найден, срок действия из expiresAt прошёл. Поле status при этом остаётся ACTIVE |
КодINVALID_APP_KEY |
HTTP401 | Когда возникаетOAuth-ручка получила app_key, который не найден или не принадлежит OAuth-приложению |
КодWRONG_AUTH_SCHEME |
HTTP401 | Когда возникаетAPI-ключ передан в заголовке Authorization: Bearer. Ключ OAuth-приложения (vibe_app_*) передаётся в X-Api-Key, а Authorization: Bearer несёт сессионный токен (vibe_session_*). Клиенту, который умеет только Bearer, используйте личный ключ (vibe_api_*) — он принимается в Authorization: Bearer |
КодTOKEN_EXPIRED |
HTTP401 | Когда возникаетСрок действия OAuth-токена истёк |
КодTOKEN_REFRESH_FAILED |
HTTP401 | Когда возникаетНе удалось обновить OAuth-токен на стороне Битрикс24 |
КодPORTAL_CREDENTIALS_REJECTED |
HTTP401 | Когда возникаетБитрикс24 отклонил учётные данные, с которыми ключ обращается к порталу: вебхук ключа отозван или потерял силу. Повтор не помогает — ключ нужно переподключить |
КодPORTAL_ADDRESS_CHANGED |
HTTP409 | Когда возникаетКоробочный портал переехал на новый адрес, а вебхук ключа выписан на прежний. Платформа не отправляет секрет туда, где портала больше нет, поэтому вызов отклоняется до обращения к порталу. Повтор не помогает — переподключите ключ: платформа перевыпустит вебхук, строка ключа и его права не изменятся |
КодWRONG_KEY_TYPE |
HTTP401 | Когда возникаетТип ключа не подходит к эндпоинту: например, менеджмент-ключ на маршруте сущности |
КодWRONG_KEY |
HTTP403 | Когда возникаетСервер существует, но вызывающему не принадлежит. Операции над содержимым приложения — выкладка, команда, загрузка файла и чтение логов — открыты по любому из трёх оснований: управляющий ключ сервера, ключ, приложение которого привязано к этому серверу, либо членство в команде разработки этого сервера. Токены доступа и загрузка значка требуют управляющего ключа. Управление машиной открыто ещё и роли «Администратор» команды разработки. В ответе — hint с восстановлением из двух шагов: перепривязать сервер в кабинете и сменить ключ, которым обращается клиент. Подробнее — восстановление доступа |
КодTOKEN_MISSING |
HTTP401 | Когда возникаетУ ключа нет учётных данных Битрикс24. Для личного ключа (vibe_api_*) — нет вебхука портала: на маршрутах сущностей и в POST /v1/batch причина приходит в error.details, на остальных маршрутах приходит тот же код без details. Для ключа приложения (vibe_app_*) — не передан Authorization: Bearer с токеном сессии |
КодSESSION_REQUIRED |
HTTP401 | Когда возникаетОперация с местами встраивания выполнена без заголовка Authorization: Bearer с токеном сессии там, где аккаунт его требует |
КодSESSION_APP_MISMATCH |
HTTP403 | Когда возникаетСессия в Authorization: Bearer выписана другому приложению или другому аккаунту Битрикс24, чем ключ в X-Api-Key. Передайте ключ авторизации того приложения, которое выписало сессию через POST /v1/oauth/token |
КодPERSONAL_KEY_WEBHOOK_SCOPES_INVALID |
HTTP400 | Когда возникаетВыписка, обновление или перевыпуск ключа портала, где placement и entity запрошены, а кроме них в наборе прав ничего нет. Ключ портала стоит на входящем вебхуке Битрикс24, а такие права вебхук не несёт — добавьте право на данные либо заведите OAuth-приложение. Подробнее — Создать API-ключ |
КодACCOUNT_PENDING_ERASURE |
HTTP503 | Когда возникаетАккаунт владельца ключа ждёт удаления данных — на это время ключ заморожен. В ответе заголовок Retry-After: 3600. Действует на любой ключ владельца, включая менеджмент-ключ. Отмена запроса на удаление возвращает ключу работу, перевыпускать его не нужно |
Причины и порядок действий по MISSING_API_KEY, INVALID_API_KEY и TOKEN_MISSING — Авторизация, ключи и права.
Состояние аккаунта Битрикс24
Состояние аккаунта, к которому привязан ключ, проверяется на каждом вызове. Отказы этой группы не привязаны к эндпоинту: пока аккаунт в одном из перечисленных состояний, ключ получает их на маршрутах /v1/..., у которых нет собственного отказа для этого состояния, и повтор запроса ничего не меняет.
| Код | HTTP | Когда возникает |
|---|---|---|
КодPORTAL_SUSPENDED |
HTTP403 | Когда возникаетАккаунт приостановлен |
КодPORTAL_DELETED |
HTTP403 | Когда возникаетАккаунт удалён |
КодPORTAL_BLOCKED |
HTTP403 | Когда возникаетАккаунт заблокирован. Рядом с кодом приходит blockedAt — момент блокировки в формате ISO 8601. Причину блокировки ответ не раскрывает |
КодNO_PORTAL |
HTTP401 | Когда возникаетКлюч не привязан ни к одному аккаунту. Исключение — маршруты хранилища: непривязанный ключ получает там 403 STORAGE_REQUIRES_PORTAL_BINDING. Тот же код с HTTP 500 приходит на маршрутах авторизации пользователей приложения и означает там другое — приложение не связано с аккаунтом |
Авторизация пользователей приложения (OAuth)
| Код | HTTP | Когда возникает |
|---|---|---|
КодINVALID_REDIRECT_URI |
HTTP400 | Когда возникаетredirect_uri не зарегистрирован у приложения на входе GET /v1/oauth/authorize |
КодINVALID_STATE |
HTTP400 | Когда возникаетstate не найден или истёк за 20 минут на приёме ответа Битрикс24. В error.details.reason — NOT_FOUND или EXPIRED |
КодINVALID_CODE |
HTTP400 | Когда возникаетКод авторизации не найден или принадлежит другому приложению |
КодCODE_EXPIRED |
HTTP400 | Когда возникаетСрок действия кода авторизации прошёл — 5 минут |
КодCODE_ALREADY_USED |
HTTP400 | Когда возникаетКод авторизации уже обменян на токен сессии |
КодREDIRECT_URI_MISMATCH |
HTTP400 | Когда возникаетredirect_uri при обмене кода не совпадает с переданным на входе |
КодDOMAIN_MISMATCH |
HTTP400 | Когда возникаетdomain в POST /v1/oauth/placement-session не совпадает с порталом приложения |
КодUSER_AUTH_REQUIRED |
HTTP401 | Когда возникаетТокен пользователя Битрикс24 не подтвердил авторизацию на портале |
КодMISSING_TOKEN |
HTTP400 | Когда возникаетPOST /v1/oauth/revoke без заголовка Authorization: Bearer с токеном сессии |
Отказ на приёме возврата может прийти не кодом, а параметром ?error= в адресе redirect_uri — token_exchange_failed, invalid_domain или profile_fetch_failed.
Полное описание потока — Авторизация пользователей приложения.
Права и скоупы
| Код | HTTP | Когда возникает |
|---|---|---|
КодSCOPE_DENIED |
HTTP403 | Когда возникаетУ ключа нет нужного скоупа (например, crm для сделок, imbot для ботов). Если ответ несёт error.cause = key_scope_missing, действие — в error.fix, текст для человека — в error.userMessage |
КодWRITE_BLOCKED_READONLY_KEY |
HTTP403 | Когда возникаетУ ключа задан режим «только чтение», а вызов выполняет запись |
КодCONNECT_AI_NOT_PERMITTED |
HTTP403 | Когда возникаетКлюч выдан приложению через Partner Connect, а администратор аккаунта Битрикс24 не разрешил этому приложению AI или отозвал разрешение. Приходит на маршрутах AI-моделей, когда на платформе включено разрешение AI администратором портала. Остальные права ключа работают, перевыпускать ключ не нужно: после разрешения тот же ключ снова получает доступ к моделям. Порядок — Управление приложениями портала |
КодINFRA_FORBIDDEN_FOR_COWORK_KEY |
HTTP403 | Когда возникаетКлюч Cowork/Code со скоупом vibe:cowork работает только с данными: изменяющие операции ему закрыты — все методы /v1/infra/*, кроме чтений GET, все изменяющие операции над приложениями (создание, правка, удаление, перепривязка, публикация и снятие с публикации) и запись в депо исходников. На POST /v1/portals/:id/activate-market-trial тот же код получает агентский seat-ключ, а ключу десктопа этот эндпоинт отвечает раньше и другим кодом — PURPOSE_KEY_FORBIDDEN, разбор на странице Активировать пробный период Маркета. Собственный эндпоинт Cowork/Code POST /v1/cowork/activate-market-trial этого кода не отдаёт вовсе. Порядок действий — Проектный ключ для деплоя. Ключу подписки, выписанному для стороннего агента, проектный ключ не выдаётся (403 COWORK_HARNESS_KEY_FORBIDDEN), поэтому ему error.details.requiredAction называет настольное приложение Cowork/Code и обычный ключ со скоупом vibe:infra, разбор на странице Свой агент на подписке. В error.details.deployableKeys ответ перечисляет ваши другие активные ключи с правом деплоя — name, prefix, suffix, до пяти |
КодINFRA_SCOPE_REQUIRED |
HTTP403 | Когда возникаетУ ключа нет скоупа vibe:infra — управление инфраструктурой недоступно. Добавьте скоуп или используйте ключ с правами на инфраструктуру. Действие — в error.fix: пока работа с серверами на портале выключена, скоуп не добавить, и fix.action приходит none. fix.via = platform значит, что работу с серверами выключила платформа. Отсутствие via при action = none означает только «места для машинного действия нет» и причину НЕ называет: так же отвечают и другие отказы по этому скоупу — работу с серверами выключил администратор портала, определить это не удалось, происхождение ключа не установлено, ключ выдан через Partner Connect. Причину различает текст error.userMessage и error.hint, а не via |
КодINFRA_DISABLED_FOR_PORTAL |
HTTP403 | Когда возникаетПраво vibe:infra явно запрошено при создании ключа или приложения либо добавлено правкой их прав, а администратор портала выключил работу с серверами. Проверка считает добавление права, а не его присутствие в теле: правка ключа или приложения, которые это право уже несут, проходит и на закрытом портале, снятие права разрешено всегда. Не путать с INFRA_SCOPE_REQUIRED — тот про вызов инфраструктуры ключом без права, этот про саму выдачу права |
КодONEC_ACCESS_REQUIRED |
HTTP403 | Когда возникаетПраво vibe:onec запрошено при создании ключа или приложения либо добавлено правкой их прав, а у владельца ключа или автора приложения нет доступа к 1С. Доступ к 1С выдаёт администратор портала. Правка ключа или приложения, которые это право уже несут, проходит без проверки. Если проверить доступ не удалось, право выдаётся |
КодSERVER_ROLE_FORBIDDEN |
HTTP403 | Когда возникаетВы состоите в команде разработки сервера, но операция шире вашей роли: роль «Разработчик» покрывает работу с кодом, роль «Администратор» — ещё и управление машиной. В error.hint приходят yourRole, requiredRole, отказанное действие deniedAction и список открытых вам вызовов allowedHere. Доступ не сломан и не требует ни выдачи заново, ни перепривязки ключа — либо продолжайте по вызовам из allowedHere, либо попросите владельца выполнить эту операцию. Разбор ролей — Список серверов |
КодKEY_POLICY_READONLY_REQUIRED |
HTTP403 | Когда возникаетПолитика портала разрешает обычным пользователям создавать только ключи с режимом «только чтение» — выпуск ключа с записью отклонён |
КодRATE_LIMIT_ADMIN_ONLY |
HTTP403 | Когда возникаетЗапрос меняет собственный поминутный лимит ключа на AI-вызовы — поле rateLimit при создании или правке, — а вызывающий не администратор портала. Через POST /v1/keys и PATCH /v1/keys/:id смена этого поля отклоняется и администратору: значение задаётся в личном кабинете. Передача текущего значения без изменения проходит, поэтому клиент, отправляющий объект ключа целиком ради переименования, этого отказа не получает. Оставьте поле пустым, и действует общий лимит платформы — Лимиты запросов |
КодMANAGEMENT_KEY_READ_ONLY |
HTTP403 | Когда возникаетМенеджмент-ключ создаёт обращение — POST /v1/feedback или загрузка вложения к нему. Чтение и обновление обращений таким ключом доступны, создание — нет. Запрет записи по режиму доступа ключа приходит другим кодом — WRITE_BLOCKED_READONLY_KEY |
КодMANAGEMENT_KEY_NO_ENTITY_ACCESS |
HTTP403 | Когда возникаетМенеджмент-ключ обращается к эндпоинту сущности — нужен ключ приложения с нужным скоупом |
КодBITRIX_ACCESS_DENIED |
HTTP403 | Когда возникаетБитрикс24 отказал в доступе. Нехватка прав у пользователя Битрикс24 — лишь одна из причин: отказ даёт и нехватка скоупа у ключа. Вид отказа приходит в error.cause, действие — в error.fix |
КодBOT_ACCESS_DENIED |
HTTP403 | Когда возникаетБот привязан к другому ключу API. error.cause — bot_other_key. Если вызывающий ключ может сам перенести бота на себя, error.fix — transfer_bot с готовыми path и body. Разбор — Авторизация, ключи и права |
КодB24_MARKET_SUBSCRIPTION_REQUIRED |
HTTP403 | Когда возникаетВызов существующего бота остановлен локально: Битрикс24 отклонил Bot REST из-за неактивной подписки Маркетплейса. Остановите опрос и обновите состояние тарифа после продления |
КодOAUTH_REQUIRED |
HTTP403 | Когда возникаетЭндпоинт требует пользовательский контекст — нужен ключ типа vibe_app_* + Bearer-токен |
КодWAITLIST_PENDING |
HTTP403 | Когда возникаетАккаунт ожидает активации в списке ожидания |
КодOAUTH_SCOPE_CHANGE_REQUIRES_REISSUE |
HTTP403 | Когда возникаетПопытка добавить право Битрикс24 к OAuth-app-ключу (vibe_app_*) через PATCH /v1/keys/:id или к приложению через PATCH /v1/apps/:id. Права OAuth-приложения фиксируются при выпуске — снятие прав работает, а добавление нет. Новое право даёт перевыпуск ключа авторизации в кабинете: он выдаёт ключ с расширенным набором, после чего аккаунт проходит авторизацию заново. Второй путь — создать приложение сразу с нужным набором |
КодOAUTH_APP_REQUIRED |
HTTP400 | Когда возникаетОперация с местами встраивания выполнена личным ключом vibe_api_*. Привязка, отвязка и список привязанных мест доступны только ключу авторизации приложения vibe_app_* |
КодPLACEMENT_SCOPE_MISSING |
HTTP403 | Когда возникаетУ ключа нет скоупа placement — привязка и отвязка мест встраивания недоступны |
КодSESSION_REQUIRES_ADMIN |
HTTP403 | Когда возникаетПривязка места встраивания на коробочном аккаунте выполняется под учётной записью без прав администратора аккаунта |
КодB24_EMBEDDING_APP_NOT_FOUND |
HTTP404 | Когда возникаетБитрикс24 не знает идентификатор приложения: локальное приложение на аккаунте удалили или переустановили. Создайте локальное приложение заново и вызовите POST /v1/apps/:id/relink-oauth с новыми bitrixClientId и bitrixClientSecret. Не путать с APP_NOT_FOUND — тот про связку ключа и приложения на стороне платформы Вайбкод |
КодB24_EMBEDDING_INSTALL_DENIED |
HTTP403 | Когда возникаетБитрикс24 отказал в установке встройки при действующей подписке: у пользователя, чьим ключом разработчика идёт вызов, нет права ставить локальные приложения и/или нет доступа к самому приложению. Подписка считается действующей в двух случаях — её подтвердил Битрикс24 либо проверку выполнить не удалось, а аккаунт уже числится подписанным в Вайбкод. Если действующей подписки нет ни по одному из источников, тот же отказ приходит как 502 |
КодAPP_NOT_REGISTERED |
HTTP400 | Когда возникаетУ приложения нет идентификатора приложения Битрикс24 — привязать или отвязать место встраивания нельзя |
КодBOX_NO_DEVELOPER_KEY |
HTTP400 | Когда возникаетУ автора приложения не настроен ключ разработчика — операция с местами встраивания на коробочном аккаунте недоступна |
КодOAUTH_APP_KEY_CANNOT_RELINK |
HTTP403 | Когда возникаетPOST /v1/apps/:id/relink-oauth вызван ключом самого OAuth-приложения (vibe_app_*). Перепривязывать учётные данные приложения таким ключом нельзя — используйте личный ключ (vibe_api_*) или кабинет |
Причины и порядок действий по SCOPE_DENIED, BITRIX_ACCESS_DENIED и WRITE_BLOCKED_READONLY_KEY — Авторизация, ключи и права.
Валидация запроса
| Код | HTTP | Когда возникает |
|---|---|---|
КодVALIDATION_ERROR |
HTTP400 | Когда возникаетТело или query-параметры не прошли проверку схемы. message содержит подробности по полям |
КодINVALID_JSON_BODY |
HTTP400 | Когда возникаетТело запроса не разбирается как JSON. Приходит до проверки схемы, поэтому полей в message нет. Этот код возвращают маршруты сущностей /v1/<сущность>, а также /v1/apps, /v1/bots, /v1/keys, /v1/note, все операции сервера /v1/infra/servers/:id, /v1/infra/runtimes, маршруты пользовательских полей, чатов /v1/chats/* и большинство маршрутов открытых линий /v1/openlines/*. Действия оператора, открытие и начало сессии открытой линии отвечают FST_ERR_CTP_INVALID_JSON_BODY |
КодFST_ERR_CTP_INVALID_JSON_BODY |
HTTP400 | Когда возникаетТот же случай — тело не разбирается как JSON — на остальных маршрутах: POST /v1/search, POST /v1/research, POST /v1/batch и прочих |
КодCATALOG_NOT_ELIGIBLE |
HTTP400 | Когда возникаетКарточка в каталоге приложений Битрикс24 для этого сервера невозможна: нет субдомена, приложение ещё не выкладывали, это рантайм агента, хост галактики, либо у сервера нет управляющего ключа или портала. См. Опубликовать в каталоге |
КодCATALOG_ORPHANED |
HTTP400 | Когда возникаетКарточку в каталоге удалили на стороне портала. Восстановление доступно в личном кабинете, на публичном API — нет |
Кодfst_err_ctp_invalid_json_body |
HTTP400 | Когда возникаетТот же случай на OpenAI-совместимых маршрутах AI Router — /v1/ai/, /v1/chat/, /v1/models, /v1/audio/. На них коды приводятся к нижнему регистру, а ответ идёт в OpenAI-конверте: error.type, error.code, без поля success |
КодINVALID_PARAMS |
HTTP400 | Когда возникаетБитрикс24 вернул INVALID_PARAMS либо отклонил вызов до запуска метода, не найдя значения обязательного параметра (Could not find value for parameter) — тогда параметр назван в error.hint, обработчик маршрута нашёл некорректное значение параметра, на записи в поле-скаляр передан объект или массив. См. Запрос и данные |
КодINVALID_REQUEST |
HTTP400 | Когда возникаетСтруктура запроса не соответствует требуемой — например, calls в /v1/batch пустой массив или содержит больше 50 элементов, создание сервера без обязательных полей, не-объект вместо тела на маршрутах пользовательских полей, не-объект (null, массив, строка, число, boolean) вместо тела на POST /{entity}/search |
КодMISSING_PARAMS |
HTTP400 | Когда возникаетНе передан обязательный параметр, явно перечисленный в схеме эндпоинта |
КодMISSING_REQUIRED_FILTER |
HTTP400 | Когда возникаетНе передан обязательный фильтр для list-эндпоинтов, требующих контекста: timelines (entityType + entityId), catalog-products и catalog-sections (iblockId), catalog-product-property-enums (propertyId). Он же приходит на агрегацию дел без сужающего фильтра — там достаточно одного сужения из нескольких, и message их перечисляет |
КодMISSING_REQUIRED_PARAMS |
HTTP400 | Когда возникаетНе переданы обязательные параметры контекста для поиска или списка вложенных данных: files требует folderId, folders — parentId, calendar-events — type и ownerId. message перечисляет недостающие поля |
КодMISSING_REQUIRED_FIELDS |
HTTP400 | Когда возникаетНе передано поле тела, объявленное обязательным при создании сущности. message называет недостающее поле |
КодMISSING_FIELD |
HTTP400 | Когда возникаетСоздание пользовательского поля без userTypeId. message приводит примеры допустимых типов |
КодEMPTY_CREATE_BODY |
HTTP400 | Когда возникаетТело запроса на создание пустое — не передано ни одного поля. Тот же код и для тела, которое вовсе не является JSON-объектом (null, массив, строка, число, boolean) — ни одно распознаваемое поле в нём найти нельзя в принципе |
КодEMPTY_UPDATE_BODY |
HTTP400 | Когда возникаетТело запроса на обновление пустое — не передано ни одного поля. Тот же код и для тела, которое вовсе не является JSON-объектом (null, массив, строка, число, boolean) |
КодNESTED_FIELDS_ENVELOPE |
HTTP400 | Когда возникаетНа маршруте записи сущности, который сам оборачивает поля в fields, передан объект fields, хотя схема не объявляет такое поле. Этот вызов не записывается — передайте поля плоско в корне JSON. В смешанном глобальном batch другие допустимые вызовы могут выполниться. Глобальный batch ставит код в ошибку вызова. Импорт и пакетный маршрут сущности сохраняют свои коды IMPORT_ITEM_VALIDATION / BATCH_ITEM_VALIDATION и указывают NESTED_FIELDS_ENVELOPE в сообщении. См. Запрос и данные |
КодINVALID_FILTER_FIELD |
HTTP400 | Когда возникаетИмя поля фильтра начинается с родного префикса Битрикс24 @ (IN) или !@ (NOT IN) — используйте операторы $in / $nin |
КодINVALID_DUPLICATE_FILTER_FIELD |
HTTP400 | Когда возникаетДва условия в одном фильтре сводятся к одному имени фильтра Битрикс24, поэтому второе молча заменило бы первое: имя из схемы и родное имя Битрикс24, разный регистр, два написания одного оператора, парные имена полей даты (updatedAt/updatedTime, createdAt/createdTime). Ещё две пары зависят от сущности: UF_-форма вместе с camelCase-написанием складывается только у сущностей со старым стилем именования и только для того написания, которое платформа переводит: чисто буквенное (ufCrmProjectCode) — везде на таких сущностях, а с цифровым хвостом (ufCrm_1698325419) — лишь у реквизитов. На остальных сущностях цифровая пара отказа не даёт, а связка $ne с $nin даёт один префикс ! у ВСЕХ сущностей, кроме элементов CRM (границы разные). message называет оба условия и общее имя. Пришлите одно из двух. Операторы, дающие разные имена, по-прежнему допустимы — см. Одно поле — одно написание |
КодUNKNOWN_FILTER_FIELD |
HTTP400 | Когда возникаетФильтрация по полю, которого нет в схеме сущности (для сущностей с полной схемой полей). Когда поле отклонил валидатор Вайбкод, message перечисляет допустимые имена после слова Available. Когда поле отклонил Битрикс24, список полей приходит в error.hint |
КодUNKNOWN_SELECT_FIELD |
HTTP400 | Когда возникаетОтбор полей select по имени, которого нет у сущности. Отклоняется на сущностях, чей набор полей выверен по Битрикс24 — их список в описании параметра select в обзоре API. message перечисляет допустимые имена после слова Available. На остальных сущностях запрос выполняется, а имя перечисляется предупреждением в meta.warnings. Третий исход — список и поиск реквизитов и банковских реквизитов: эти двери передают имя дальше в Битрикс24, поэтому исход задаёт он — аккаунт, где такого поля нет, отклоняет весь вызов с 422 BITRIX_ERROR, аккаунт, который имя принял, отвечает предупреждением. Чтение одной записи у тех же сущностей отбирает поля на стороне Вайбкод и отвечает предупреждением всегда. Рядом со значением * незнакомое имя не отклоняется нигде — приходит предупреждение. Не сверяются со статической схемой пользовательские поля (UF_*, ufCrm*), точные дополнительные поля конкретного метода, свойства товаров на своей сущности (PROPERTY_295 — на товарах, property295 — на товарах каталога, головных товарах, вариациях и услугах каталога) и связи SPA вида parentIdN. Они передаются методу без UNKNOWN_SELECT_FIELD. Для этих имён отсутствие предупреждения не доказывает, что поле существует или что метод понимает его написание |
КодSELECT_FIELD_NOT_RETURNED |
HTTP400 | Когда возникаетОтбор полей select по имени, которое у сущности ЕСТЬ, но никогда не возвращается: GET /v1/{entity}/fields показывает его с notReturned: true. Отдельный код нужен потому, что UNKNOWN_SELECT_FIELD утверждает «такого имени нет», а справочник сущности это имя публикует. Уберите его из select — остальные поля придут в ответе |
КодUNKNOWN_SORT_FIELD |
HTTP400 | Когда возникаетСортировка по несуществующему полю (для сущностей, у которых валидатор сортировки активен) |
КодUNKNOWN_STAGE |
HTTP400 | Когда возникаетСоздание сделки или лида со стадией, которой нет в справочнике аккаунта: POST /v1/deals сверяет stageId со стадиями воронки из categoryId (без него — основной, DEAL_STAGE), POST /v1/leads — stageId / statusId со статусами лидов (STATUS). Сравнение буквальное, как у Битрикс24: регистр, пробелы и префикс воронки C{categoryId}: должны совпадать со справочником, стадия другой воронки без её categoryId тоже не подходит. Запись НЕ создаётся. message называет ключ, справочник и ближайшее точное написание либо нужный categoryId, details.knownStages перечисляет стадии справочника (до 50), details.entityId — какой справочник смотреть: GET /v1/statuses?filter[entityId]=…. Любое написание ключа, которое Битрикс24 читает как STAGE_ID (STAGE_ID, stage_id, StageId), проверяется так же. При нескольких написаниях в теле действует последнее, и ошибка называет его в details.field. Список или объект вместо названия стадии под сырым написанием ключа (STAGE_ID, stage_id…) — тоже отказ (Битрикс24 кладёт такую запись на стадию по умолчанию, а под stageId / statusId такое значение раньше отклоняет проверка формы — 400 INVALID_PARAMS): он выносится без чтения справочника, поэтому details.knownStages в этом случае пуст, а details.stageId называет форму значения («an array», «an object»). Пустая стадия ("", null) не проверяется — запись ложится на стадию по умолчанию. Раньше такой вызов отвечал 201, а Битрикс24 молча создавал запись на стадии по умолчанию. Если справочник прочитать не удалось или он пришёл неполным, запись выполняется как прежде |
КодBATCH_LIMIT_EXCEEDED |
HTTP400 | Когда возникаетЗапрос содержит больше 50 элементов в массивной операции (chats, task-comments и подобные) |
КодMESSAGE_REQUIRED |
HTTP400 | Когда возникаетPOST /v1/chats/{dialogId}/messages без текста: поле message пустое и нет блока attach. PATCH /v1/chats/{dialogId}/messages/{messageId} без текста — по правилу Битрикс24 (одни пробелы, теги [BR]/[br] или NUL считаются пустым, а пустой текст удалял бы сообщение). Частая причина — текст передан под неизвестным именем поля, например text. Ответ перечисляет нераспознанные поля |
КодINVALID_EVENT |
HTTP400 | Когда возникаетКод события подписки портала не соответствует формату ^[A-Z][A-Z0-9_]+(?:\.[A-Z][A-Z0-9_]+)*$. См. Подписки на события портала |
КодINVALID_APP_PATH |
HTTP400 | Когда возникаетПуть доставки appPath не начинается с / либо содержит управляющие символы. См. Подписки на события портала |
КодPLATFORM_HANDLER_UNRESOLVABLE |
HTTP400 | Когда возникаетАдрес обработчика указывает на технический адрес сервера приложения, а платформенный обработчик определить не удалось. Место встраивания не зарегистрировано. См. Привязать место |
Пустое тело с заголовком Content-Type: application/json принимается как {} на маршрутах /v1/infra/*, а также на всех маршрутах пользовательских полей: /v1/userfields/:entity, /v1/userfields/:entity/types и /v1/userfields/:entity/:id, те же три пути под /v1/items/:entityTypeId/userfields, а также короткие адреса счетов /v1/userfields/invoices, /v1/userfields/invoices/types и /v1/userfields/invoices/:id. Операции, которым тело не нужно — POST /v1/infra/servers/:id/wake, DELETE /v1/infra/servers/:id/access-tokens/:tokenId и подобные, — отвечают по существу, а не отклоняют запрос на разборе тела. Так ведут себя клиенты, которые ставят этот заголовок на любой запрос (например, axios и PowerShell Invoke-RestMethod).
Дальше запрос проверяет сама операция, и код отказа зависит от маршрута — берите его из таблицы выше или со страницы нужной операции. Тело, которое не разбирается как JSON, на этих маршрутах отклоняется кодом INVALID_JSON_BODY, то есть пустое и битое тело различаются.
Причины и порядок действий по VALIDATION_ERROR, INVALID_PARAMS, MISSING_REQUIRED_FILTER и BATCH_LIMIT_EXCEEDED — Запрос и данные.
Размер тела запроса
| Код | HTTP | Когда возникает |
|---|---|---|
КодPAYLOAD_TOO_LARGE |
HTTP413 | Когда возникаетТело запроса больше потолка этого маршрута |
КодINLINE_SOURCE_TOO_LARGE |
HTTP413 | Когда возникаетТело со встроенным архивом или файлом больше 96 МБ на трёх маршрутах инфраструктуры — выкладка кода, загрузка файла и создание сервера с полем source |
КодLARGE_BODY_BACKEND_BUSY |
HTTP429 | Когда возникаетПлатформа уже обрабатывает предельный объём крупных тел. Запрос не выполнялся, повторите его через Retry-After секунд |
Потолок зависит от маршрута. По умолчанию — 1 МБ. Создание и обновление записей и элементов списков, файлы ботов и чатов, note.file.add — 40 МиБ. Загрузка на Диск — 70 МБ. Файл внутри тела едет в base64 и растёт примерно на треть, поэтому исходный файл при потолке 40 МиБ — чуть меньше 30 МиБ. Тот же код приходит от пограничного слоя на его собственном пороге. Тело под необъявленным типом содержимого — например, text/plain — на маршрутах сущностей, пользовательских полей, чатов, заметок, ключей и Cowork/Code отклоняется кодом 415 FST_ERR_CTP_INVALID_MEDIA_TYPE, а пустое тело под тем же типом принимается там как {}. На /v1/infra/* и /v1/apps, включая публикацию исходников и места встраивания, потолок тела для непонятого типа равен одному байту, поэтому тот же запрос отвечает 413.
Крупным считается тело больше 1 МиБ — это тот же порог, что и потолок по умолчанию, — и суммарный объём одновременно обрабатываемых крупных тел ограничен. Отказ приходит там, где потолок тела поднят: записи сущностей, запись элементов списков, файлы ботов и файлы чатов, загрузка на Диск (POST /v1/files/upload), файлы заметок (POST /v1/note/documents/{documentId}/files), а также POST /v1/chat/completions и POST /v1/audio/transcriptions вместе со своими псевдонимами под /v1/ai/. Когда свободного объёма нет, приходит 429 LARGE_BODY_BACKEND_BUSY с заголовком Retry-After: 5. Так же отвечает запрос без заголовка Content-Length, если объём переваливает тот же порог уже по ходу передачи. Транскрипции — исключение: там учитывается только объявленный Content-Length, а загрузка без него ограничена одним потолком в 25 МБ на файл. На маршрутах AI у этого отказа конверт, совместимый с OpenAI: без поля success и с кодом large_body_backend_busy в нижнем регистре. Срок повтора берите из заголовка: поле error.retryAfter в теле этого отказа приходит не на всех путях.
Исключение — маршруты AI (/v1/ai/*, /v1/chat/*, /v1/audio/*, /v1/models): у них конверт ошибки, совместимый с OpenAI, и на превышении тела в error.code приходит служебный код фреймворка в нижнем регистре, а не PAYLOAD_TOO_LARGE.
Свой код и свой потолок у тела, которое несёт архив или файл внутри JSON: выкладка кода с source.content, загрузка файла с content и создание сервера с полем source принимают до 96 МБ тела, а сверх этого отвечают 413 INLINE_SOURCE_TOO_LARGE. Считается именно тело: содержимое едет в base64 и тяжелее исходных байт примерно на треть, поэтому потолку соответствует около 72 МБ самого архива. Решение принимается по заголовку Content-Length до чтения тела, а error.hint называет способ отправить тот же архив другим путём. Ссылка (source.url, url) и сохранённая версия (source.versionId) под этот потолок не попадают — у них свои 500 МБ.
Загрузка файлов
| Код | HTTP | Когда возникает |
|---|---|---|
КодSTORAGE_FORBIDDEN_CONTENT_TYPE |
HTTP415 | Когда возникаетДля PUBLIC-объектов запрещены типы, которые браузер открывает как страницу, исполняет или распознаёт по содержимому: HTML и XHTML, SVG, JavaScript, любой XML (*/xml, *+xml), XSL, multipart/*, message/*, unknown/unknown, application/unknown, */*, с параметрами и без — они опасны межсайтовым выполнением скриптов. Загружайте такой файл как PRIVATE |
КодSTORAGE_INVALID_CONTENT_TYPE |
HTTP400 | Когда возникаетcontentType не является одним типом type/subtype с необязательными параметрами ;name=value, например это список через запятую |
Предусловия подписок на события портала
| Код | HTTP | Когда возникает |
|---|---|---|
КодNOT_OAUTH_APP |
HTTP400 | Когда возникаетСервер не привязан к OAuth-приложению с application_token — подписку на событие зарегистрировать нельзя |
КодNO_USER_TOKEN |
HTTP400 | Когда возникаетУ приложения нет OAuth-токена — сначала авторизуйте приложение на портале |
Полное описание операций — Подписки на события портала.
Установка приложения через модуль-коннектор
| Код | HTTP | Когда возникает |
|---|---|---|
КодCONNECTOR_APP_INSTALL_FORBIDDEN |
HTTP403 | Когда возникаетАдминистратор аккаунта Битрикс24 запретил этому сотруднику устанавливать приложения. Право выдаёт администратор аккаунта, повтор запроса состояние не меняет. Подробнее — Права на создание |
КодCONNECTOR_MODULE_NOT_INSTALLED |
HTTP409 | Когда возникаетМодуль-коннектор на аккаунте не установлен. Состояние постоянное — пока модуль не установят, повтор бессмыслен |
КодCONNECTOR_APP_INSTALL_FAILED |
HTTP502 | Когда возникаетДругой сбой установки на стороне модуля-коннектора. Запрос можно повторить |
КодCONNECTOR_REST_UNAVAILABLE |
HTTP502 | Когда возникаетБитрикс24 отказал в выписке, а управляемого решения нет: подписка или пробный период аккаунта по данным платформы действуют. Исходная причина — в error.details.reason, error.details.retryable: true говорит, что состояние временное. Предложения оформить подписку в ответе нет: оформлять нечего. Свежее чтение подписки перед ответом платформа не гарантирует |
КодCONNECTOR_PLAN_REQUIRED |
HTTP502 | Когда возникаетТариф аккаунта Битрикс24 не включает Вайбкод, и предлагать нечего — коробочный аккаунт, аккаунт уже на платном тарифе, нераспознанный регион. Текст причины для человека — в error.userMessage. Состояние постоянное: повтор не поможет, пока тариф не сменён. Там, где доступ продаётся, тот же отказ приходит ответом 402 с кодом тарифного пейвола |
Коды приходят на создании приложения там, где приложение устанавливает модуль-коннектор: на коробочном аккаунте, а на облачном — когда такой выпуск для аккаунта включён. При любом из этих отказов ни приложение, ни парный ключ не создаются.
Модуль Битрикс24 недоступен на портале
| Код | HTTP | Когда возникает |
|---|---|---|
КодBIZPROC_MODULE_NOT_ENABLED |
HTTP409 | Когда возникаетБизнес-процессов на портале нет: модуль не входит в тариф либо выключен в настройках портала. Приходит в разделах шаблонов, действий и роботов бизнес-процессов, а также запущенных процессов. В пакетном вызове ответ остаётся 200, а код приходит в ответе отказавшего вызова |
КодLANDING_MODULE_NOT_ENABLED |
HTTP409 | Когда возникаетМодуль «Сайты» недоступен на портале. Приходит при чтении сайтов: список, получение, поиск и агрегация |
КодLISTS_MODULE_NOT_ENABLED |
HTTP409 | Когда возникаетМодуль универсальных списков недоступен на портале |
КодMAIL_MODULE_NOT_ENABLED |
HTTP409 | Когда возникаетМодуль «Почта» или методы почтовых ящиков недоступны на портале |
КодTIMEMAN_MODULE_NOT_ENABLED |
HTTP409 | Когда возникаетНа портале нет учёта рабочего времени: модуль не входит в тариф либо выключен в настройках портала |
Это состояние портала, а не ошибка запроса: пока модуль на портале недоступен, повтор вернёт тот же отказ. Выключенный модуль включает администратор портала.
Ресурс не найден
| Код | HTTP | Когда возникает |
|---|---|---|
КодROUTE_NOT_FOUND |
HTTP404 | Когда возникаетМаршрута или HTTP-глагола не существует: опечатка в пути, несуществующая сущность, неподдерживаемый метод, а также операция, которой у этой сущности нет. Сверьте путь со списком в GET /v1/guide. Когда путь составлен из имени метода Битрикс24, ответ дополнительно называет замену — см. «Имя метода Битрикс24 вместо пути V1» ниже |
КодENTITY_NOT_FOUND |
HTTP404 | Когда возникаетЗапись CRM-сущности с указанным id не существует. Канонический код для /v1/deals/:id, /v1/contacts/:id и подобных |
КодNOT_FOUND |
HTTP404 | Когда возникаетТолько GET /:id: Битрикс24 вернул success, но result пустой (применимо к нескольким смарт-методам) |
КодOPERATION_NOT_FOUND |
HTTP404 | Когда возникаетОперации выкладки с таким идентификатором нет, она принадлежит другому ключу либо запись уже удалена. Три случая отвечают одинаково намеренно — см. Исход выкладки |
Доменные *_NOT_FOUND (BOT_NOT_FOUND, SERVER_NOT_FOUND, AGENT_NOT_FOUND, APP_NOT_FOUND, PORTAL_NOT_FOUND, USER_NOT_FOUND, FILE_NOT_FOUND, SUBSCRIPTION_NOT_FOUND) описаны на страницах соответствующих разделов.
B24_EMBEDDING_APP_NOT_FOUND (404) — отдельный случай: приложение есть на платформе Вайбкод, но Битрикс24 не знает его идентификатор. Условие и порядок восстановления — в группе «Права и скоупы» выше.
Два вида 404. Один и тот же HTTP-статус 404 означает два разных состояния — различайте их по error.code. ROUTE_NOT_FOUND — маршрута или глагола не существует, повторять запрос бессмысленно: проверьте путь по GET /v1/guide. ENTITY_NOT_FOUND и доменные коды вида *_NOT_FOUND — маршрут существует, не найден запрошенный объект. Оба состояния отвечают в едином конверте V1.
Маршрута не существует:
{
"success": false,
"error": {
"code": "ROUTE_NOT_FOUND",
"message": "Route GET:/v1/dealz not found. Check GET /v1/guide for available endpoints and verbs."
}
}
Маршрут существует, объекта нет:
{
"success": false,
"error": {
"code": "ENTITY_NOT_FOUND",
"message": "Элемент не найден"
}
}
Имя метода Битрикс24 вместо пути V1. Пути API Вайбкод не повторяют имена методов Битрикс24, поэтому запрос вида GET /v1/crm.deal.list отвечает 404 ROUTE_NOT_FOUND и метод портала не вызывает. Для разобранных случаев ответ вдобавок называет верный маршрут в error.details.
Поле error.details |
Тип | Описание |
|---|---|---|
Поле error.detailsreason |
Типstring | ОписаниеBITRIX_METHOD_AS_PATH — путь составлен из имени метода Битрикс24 |
Поле error.detailsbitrixMethod |
Типstring | ОписаниеИмя метода, распознанное в пути |
Поле error.detailssuggestedEndpoint |
Типobject | ОписаниеМаршрут V1, который решает ту же задачу: method и path |
Поле error.detailsguide |
Типobject | ОписаниеУказатель на справочник маршрутов: method и path (GET /v1/guide) |
Замена называется для четырёх методов: catalog.product.list → GET /v1/catalog-products, crm.deal.list → GET /v1/deals, crm.user.list → GET /v1/users, crm.deal.search → POST /v1/deals/search. На остальных путях приходит ROUTE_NOT_FOUND без details, и маршрут нужно найти через GET /v1/guide.
{
"success": false,
"error": {
"code": "ROUTE_NOT_FOUND",
"message": "Route GET:/v1/crm.deal.list not found. Bitrix24 method names are not V1 API paths; use GET /v1/deals instead. Check GET /v1/guide for required parameters and other endpoints.",
"details": {
"reason": "BITRIX_METHOD_AS_PATH",
"bitrixMethod": "crm.deal.list",
"suggestedEndpoint": { "method": "GET", "path": "/v1/deals" },
"guide": { "method": "GET", "path": "/v1/guide" }
}
}
}
Повторите запрос по suggestedEndpoint, а состав параметров возьмите из guide: набор фильтров и полей у маршрута V1 свой, а не унаследованный от метода портала.
Причины и порядок действий по ENTITY_NOT_FOUND — Запрос и данные.
Конфликты состояния
| Код | HTTP | Когда возникает |
|---|---|---|
КодCONFLICT |
HTTP409 | Когда возникаетТекущее состояние ресурса несовместимо с запросом |
КодALREADY_EXISTS |
HTTP409 | Когда возникаетЗапись с такими ключевыми полями уже существует |
КодCURRENCY_MISMATCH |
HTTP409 | Когда возникаетВалюта оплаты не совпадает с валютой её заказа. Проверяется при создании оплаты. При изменении поле не проверяется — в теле запроса нет заказа. Битрикс24 хранит оплату в валюте заказа и присланную не применяет. Чтобы унаследовать валюту, не передавайте поле. См. Создать оплату |
КодB24_USER_DELETED |
HTTP409 | Когда возникаетСотрудник Битрикс24, которому принадлежит ключ, больше не активен на аккаунте — выписать ключ на него нельзя. Приходит везде, где у ключа появляется владелец: создание приложения, выдача проектного ключа, а также выпуск и перевыпуск ключа менеджмент-ключом (менеджмент-ключи). Состояние постоянное, помогает только восстановление сотрудника на аккаунте |
КодKEY_ROTATION_RECOVERY_REQUIRED |
HTTP409 | Когда возникаетЗамена ключа не завершена: его перевыпуск закончился ответом 500 или ещё не закончился. Приходит на перевыпуске и удалении такого ключа и на выпуске им токена доступа. Порядок действий — Перевыпустить API-ключ |
КодAPPLICATION_KEY_RECOVERY_REQUIRED |
HTTP409 | Когда возникаетКлюч с незавершённой заменой не привязывается к серверу или приложению. Приходит в том числе на создании сервера, когда не завершена замена ключа, которым сделан запрос, и на замене ключа приложения Коворка, когда в незавершённой замене участвует ключ, привязанный к этому приложению. Новое значение Idempotency-Key отказ не снимает |
КодAGENT_WRITE_ALREADY_EXECUTED |
HTTP409 | Когда возникаетAI-агент повторно отправил DELETE на тот же адрес в течение 30 секунд после первого вызова. Повтор не выполняется. В error.firstStatus — код успешного ответа первого удаления или null, если оно ещё выполняется. В error.firstExecutedAt — время первого вызова. Если первое удаление не удалось, повтор проходит обычным порядком. Создание и изменение так не проверяются, запросы других ключей отказ не затрагивает |
КодEVENT_BOUND_ELSEWHERE |
HTTP409 | Когда возникаетСобытие портала уже привязано к другому серверу того же OAuth-приложения. См. Подписки на события портала |
КодCATALOG_ALREADY_PUBLISHED |
HTTP409 | Когда возникаетУ сервера уже есть карточка в каталоге приложений Битрикс24. См. Опубликовать в каталоге |
КодCATALOG_DELETE_PENDING |
HTTP409 | Когда возникаетПо карточке в каталоге уже поставлено удаление — публикация в этом состоянии недоступна |
КодOAUTH_CLIENT_ID_IN_USE |
HTTP409 | Когда возникаетPOST /v1/apps/:id/relink-oauth: указанный bitrixClientId уже привязан к другому приложению. Один client_id — одно приложение |
КодOPERATION_OUTCOME_EXPIRED |
HTTP410 | Когда возникаетОперация выкладки ваша и она точно была, но её исход больше не хранится (срок — 7 суток). См. Исход выкладки |
Биллинг и тариф
Возникают на эндпоинтах создания и пробуждения инфраструктуры (серверы, агенты, управляемые боты). Ответ содержит userMessage на русском языке для показа в интерфейсе клиента.
| Код | HTTP | Когда возникает |
|---|---|---|
КодBILLING_EXHAUSTED |
HTTP402 | Когда возникаетБаланс ушёл в красную зону, аккаунт заморожен. Нужно пополнение баланса |
КодACCOUNT_FROZEN |
HTTP402 | Когда возникаетПлатёжный аккаунт заморожен за отрицательный баланс. Отказ приходит на вызовах, которые оплачиваются балансом Вайбкод. Полный состав — в блоке «Что закрывает заморозка счёта» ниже |
КодCOMMERCIAL_PLAN_REQUIRED |
HTTP402 | Когда возникаетПлатформа не нашла запись портала, к которому привязан ключ, поэтому не может проверить доступ. Приходит на создании сервера |
КодOPEN_MODE_REQUIRES_COMMERCIAL |
HTTP402 | Когда возникаетПереход сервера в OPEN или включение allowOpenMode требует полного доступа сейчас: платной подписки в подписочной модели или подходящего тарифа Битрикс24 в тарифной модели. Прежние платежи и пробный доступ отказ не снимают. Подсказка — в userMessage, ссылка — в details.upgradeUrl |
КодMARKETPLACE_REQUIRED |
HTTP402 | Когда возникаетНа портале нет активной подписки BitrixGPT + Маркетплейс — оформите её, чтобы открыть создание серверов, деплой и выписку ключей. Выписка ключей закрывает и создание приложения: парный ключ выписывается там же. На пробуждении этот код получает только galaxy-приложение. Приходит только там, где доступ к платформе открывает подписка. Где его открывает тариф Битрикс24, отказ приходит кодами BY_PAID_ONLY, KZ_PAID_ONLY и UZ_PAID_ONLY — их таблица лежит в разделе «Инфраструктура», в «Ошибках проверки доступа и биллинга» |
КодSELFHOSTED_NOT_AVAILABLE |
HTTP402 | Когда возникаетКоробочный Битрикс24 пока не доступен на этой установке — доступ открывается постепенно. Серверы и данные портала сохраняются, ничего не удаляется. Покупкой тарифа отказ не снимается: адрес обращения — поддержка (details.upgradeUrl содержит mailto:) |
КодB24_PAID_TARIFF_REQUIRED |
HTTP402 | Когда возникаетТариф Битрикс24 на портале бесплатный, а на таком тарифе Битрикс24 закрывает REST при любом состоянии подписки BitrixGPT + Маркетплейс. Ответ несёт userMessage и не ведёт к оформлению: помогает только переход портала на любой платный тариф Битрикс24, повтор запроса состояние не меняет. Приходит на выписке ключа портала и на установке приложения. Тариф «Демо» не затронут — на нём REST работает |
КодTRIAL_PORTAL_LIMIT |
HTTP402 | Когда возникаетНа пробном периоде превышен общий лимит серверов на портал |
КодAPPLICATION_REUSE_CONFLICT |
HTTP409 | Когда возникаетПока платформа подбирала существующий сервер для повторного использования, привязку сервера к приложению изменил параллельный запрос. retryable: true, повторите запрос создания |
КодPLAN_NOT_ALLOWED_ON_TRIAL |
HTTP402 | Когда возникаетЗапрошенный план сервера/агента недоступен на пробном периоде |
КодGALAXY_NOT_ON_TRIAL |
HTTP402 | Когда возникаетХост Galaxy нельзя создать на пробном доступе. Получите полный доступ по модели региона. Для пробного развёртывания используйте отдельный сервер с планом из capabilities.servers.create.limits.allowedPlans ответа GET /v1/me в пределах оставшейся квоты. Контейнер GALAXY_APP на существующем подходящем хосте этим отказом не запрещён |
КодSERVER_WAKE_BLOCKED |
HTTP403 | Когда возникаетПробуждение сервера заблокировано по небиллинговой причине — например, закончился доступ к платформе |
КодB24_MARKET_SUBSCRIPTION_REQUIRED |
HTTP403 | Когда возникаетНа аккаунте нет активной подписки BitrixGPT + Маркетплейс. Приходит на привязке места встраивания, на установке приложения, а также на выписке и перевыпуске ключа портала — в том числе на коробочном портале, где ключ выдаёт модуль-коннектор. На облачном аккаунте с прочитанным бесплатным тарифом Битрикс24 вместо него приходит B24_PAID_TARIFF_REQUIRED. Коробочный аккаунт эта подмена не затрагивает |
КодB24_MARKET_TRIAL_USED |
HTTP403 | Когда возникаетПробный период подписки BitrixGPT + Маркетплейс уже использован — привязка места встраивания, установка приложения, выписка и перевыпуск ключа портала требуют платной подписки. На облачном аккаунте с прочитанным бесплатным тарифом Битрикс24 вместо него приходит B24_PAID_TARIFF_REQUIRED. Коробочный аккаунт эта подмена не затрагивает |
КодINT_TARIFF_REQUIRED |
HTTP403 | Когда возникаетАккаунт работает по тарифной модели доступа, при этом привязка места встраивания, установка приложения, выписка и перевыпуск ключа портала требуют коммерческого тарифа Битрикс24 |
КодPORTAL_TARIFF_UNREADABLE |
HTTP403 | Когда возникаетСостояние тарифа аккаунта сейчас подтвердить не удалось. Причина может быть временной (занята очередь проверок, недавняя попытка, истёк отведённый на проверку срок) или в правах ключа. Повторите проверку через /v1/me?refresh=tariff и действуйте по details.remedy. Поле details.requiredTariffs пустое, покупка не предлагается. Переподключение под главным администратором аккаунта и обращение в поддержку нужны, только если повторная проверка стабильно не помогает |
КодPORTAL_SUBSCRIPTION_UNREADABLE |
HTTP403 | Когда возникаетСостояние подписки аккаунта сейчас подтвердить не удалось. Причина может быть временной (занята очередь проверок, недавняя попытка, истёк отведённый на проверку срок) или в правах ключа. Повторите проверку через /v1/me?refresh=tariff и действуйте по details.remedy. Поле details.requiredTariffs пустое, покупка не предлагается. Переподключение под главным администратором аккаунта и обращение в поддержку нужны, только если повторная проверка стабильно не помогает |
Что закрывает заморозка счёта. Отказ 402 ACCOUNT_FROZEN приходит на вызовах, которые оплачиваются балансом Вайбкод: инфраструктура /v1/infra/..., хранилище /v1/storage/..., поиск и глубокий поиск, расход AI сверх месячной квоты тарифа портала, депо исходников приложения, вложения обращений и правка обращения, а также выписка проектного ключа, создание приложения и создание приложения из Cowork/Code, активация купона, сброс лимитов по праву акции и подключение демо Маркетплейса.
Вызовы, за которые баланс не платит, под заморозкой продолжают работать: обращения к своему Битрикс24 через маршруты сущностей и пакетный вызов, AI в пределах месячной квоты тарифа портала, оплаченный период подписки Cowork/Code, список моделей, самоописание GET /v1/me, справочник, спека GET /v1/openapi.json, переписка по обращениям — создание, список, чтение одного обращения и комментарий к нему — и отзыв своего ключа Cowork/Code.
У всех перечисленных семейств, кроме AI, отказ выносится до валидации запроса, поэтому 400 и 404 на закрытом заморозкой вызове не приходят. У AI-маршрутов решение принимает сам обработчик, уже разобрав параметры: запрос с неверным полем ответит 400 раньше, чем дойдёт до проверки заморозки.
Важно: сужение отказа раскатывается по порталам постепенно. Пока оно не дошло до вашего портала, заморозка отвечает 402 ACCOUNT_FROZEN почти на любой вызов V1, включая чтения по сущностям и пакетный вызов. Открытыми в этом состоянии остаются самоописание, справочник, спека, те же четыре вызова переписки по обращениям и отзыв своего ключа Cowork/Code.
Причины и порядок действий по BILLING_EXHAUSTED, COMMERCIAL_PLAN_REQUIRED, B24_MARKET_SUBSCRIPTION_REQUIRED, B24_MARKET_TRIAL_USED и INT_TARIFF_REQUIRED — Биллинг, тариф и подписка.
Ограничение частоты
| Код | HTTP | Когда возникает |
|---|---|---|
КодRATE_LIMITED |
HTTP429 | Когда возникаетБитрикс24 ограничил частоту запросов или превышен внутренний лимит. У одиночного отказа срок повтора приходит заголовком Retry-After (секунды), поля retryAfter в теле нет. У сформированной платформой подошибки пакета срок приходит полем retryAfter внутри ответа 200, без отдельного заголовка для подвызова |
КодCALLER_RATE_LIMITED |
HTTP429 | Когда возникаетИсчерпан общий поминутный лимит запросов. Платформенные потолки: 600 на API-ключ, 1200 на все ключи одного владельца. Опрос событий бота считается отдельными счётчиками — 120 на бота, 600 на ключ и 1200 на владельца. Эффективное число в заголовке не публикуется (подробнее). Заголовок X-RateLimit-Scope называет счётчик (key, user, bot), Retry-After — секунды до конца минутного окна. Поля retryAfter в теле нет |
КодERROR_LOOP_DETECTED |
HTTP429 | Когда возникаетБлокировка на стороне Вайбкод: один и тот же запрос повторяется с одинаковой ошибкой. Сигнал о баге в коде клиента. Для пробы нужны N запросов и растущая пауза. Успешный вызов снимает блок |
КодOPERATION_TIME_LIMIT |
HTTP429 | Когда возникаетБитрикс24 приостановил ЭТОТ метод для ВАШЕГО ключа примерно на 5 минут: метод исчерпал бюджет рабочего времени. В ответе scope: "apiKey", retryAfter и заголовок Retry-After. Остальные методы и другие ключи портала работают |
КодTIMEOUT_QUARANTINE |
HTTP429 | Когда возникаетБлокировка на стороне Вайбкод: метод несколько раз подряд не ответил порталу за отведённое вызову время, и пара «портал + метод» поставлена на паузу. В ответе scope: "portal", retryAfter и заголовок Retry-After. Пауза общая для ВСЕХ ключей портала и снимается автоматически |
Причины и порядок действий по этой группе — Лимиты, очереди и паузы.
Бэкенд и сторонние сервисы
| Код | HTTP | Когда возникает |
|---|---|---|
КодBITRIX_ERROR |
HTTP422 | Когда возникаетБитрикс24 вернул бизнес-ошибку, не подпадающую под более узкие категории (ACCESS_DENIED, NOT_FOUND, INVALID_PARAMS) |
КодAGGREGATION_LIMIT_EXCEEDED |
HTTP422 | Когда возникаетАгрегация отказалась отвечать: выборка шире 5000 записей, оценённая стоимость вызова превысила безопасный бюджет, страница записей не догрузилась — либо (для дел без сужающего фильтра) Битрикс24 не ответил за отведённое на вызов время. message говорит, какой именно случай. Заголовка Retry-After нет: отказ не временный |
КодMETHOD_NOT_YET_AVAILABLE |
HTTP422 | Когда возникаетМетод выходит в обновлении Битрикс24 и на этот портал ещё не пришёл. Ответ содержит поле error.release с идентификатором обновления, например imopenlines 26.700.0. Это признак постепенного выпуска обновления, а не ошибка вызова — подробнее |
КодSTAGE_NOT_APPLIED |
HTTP422 | Когда возникаетБитрикс24 принял запись, но не применил стадию или воронку: присланное значение не из справочника. Запись уже создана или изменена — фактическое состояние приходит в data ответа. Тот же вердикт выносят пакетные двери и импорт, только внутри 200: элемент POST /v1/{entity}/batch и строка POST /v1/{entity}/import получают success: false, этот код в error и сохраняют id. Подвызов POST /v1/batch уходит в data.errors.<id> с записью в data этой ошибки. При одиночном создании этот код не выносится: там стадия проверяется по справочнику ДО записи и отказ приходит кодом UNKNOWN_STAGE (сверять запись после создания нельзя — там работает автоматизация портала, и робот «при создании» дал бы ложный отказ, а импорт правила автоматизации не запускает) |
КодAMOUNT_NOT_APPLIED |
HTTP422 | Когда возникаетЗапрос ЯВНО просил ручной режим суммы (isManualOpportunity: true) у элемента смарт-процесса, Битрикс24 принял запись, но флаг не сохранил. Обычная причина — у типа выключена товарная часть (isLinkWithProductsEnabled: false): сумма и флаг хранятся только у типов с ней. Ручной режим распознаётся во всех написаниях, которые принимает платформа: true, "true", "Y", "yes", "1". Сумма, если её присылали, перечисляется в отказе вместе с флагом. Сумма БЕЗ флага не проверяется — по ответу её не отличить от законного пересчёта по товарным позициям. Запись уже создана или изменена — её фактическое состояние приходит в data ответа, а неприменённые поля перечислены в error.details.unappliedFields. Раньше такой вызов отвечал 201/200 и сумма пропадала молча. Тот же вердикт выносят пакетные двери и импорт, только внутри 200: элемент POST /v1/items/{entityTypeId}/batch и строка POST /v1/items/{entityTypeId}/import получают success: false, этот код в error и сохраняют id. Подвызов POST /v1/batch уходит в data.errors.<id> с записью в data этой ошибки |
КодREST_REGISTRATION_FAILED |
HTTP400 | Когда возникаетБитрикс24 отказал в регистрации приложения или входящего вебхука и причину не назвал. Приходит на создании приложения и на выписке ключа портала. Ответ несёт error.details.incidentCode — шестисимвольный код обращения, по которому поддержка находит запись в журнале. Назовите этот код в обращении |
КодBITRIX_UNAVAILABLE |
HTTP502 | Когда возникаетБитрикс24 вернул 5xx, не ответил вовремя или связь с порталом оборвалась до полного ответа |
КодBIND_FAILED |
HTTP502 | Когда возникаетБитрикс24 отклонил регистрацию события (event.bind) — например, портал не на коммерческом тарифе. См. Подписки на события портала |
КодWINDOWED_SEARCH_FAILED |
HTTP— | Когда возникаетБольше не возвращается: при полном отказе авто-окон /search возвращается реальный код Битрикс24 — UNKNOWN_FILTER_FIELD / INVALID_PARAMS / BITRIX_ACCESS_DENIED / RATE_LIMITED / BITRIX_UNAVAILABLE / BITRIX_TIMEOUT (503) / BITRIX_ERROR (422), как для узкого диапазона |
КодQUEUE_OVERFLOW |
HTTP429 | Когда возникаетОчередь портала переполнена: слишком много одновременных вызовов Битрикс24. Отклоняется мгновенно, Retry-After в заголовке |
КодQUEUE_TIMEOUT |
HTTP429 | Когда возникаетОчередь портала перегружена: больше 80 секунд ожидания на стороне Вайбкод. Запрос не был отправлен в Битрикс24 — безопасно повторить |
КодBITRIX_TIMEOUT |
HTTP503 | Когда возникаетБитрикс24 принял запрос, но не ответил за 60 секунд — исход неизвестен. Для операций записи: сначала перечитайте сущность, изменение могло примениться |
КодPOOL_EXHAUSTED |
HTTP503 | Когда возникаетСервис временно перегружен — исчерпан пул соединений с базой данных. В ответе retryAfter и заголовок Retry-After. Для записи исход неизвестен: перед повтором перечитайте состояние |
КодDB_TRANSIENT |
HTTP503 | Когда возникаетТранзакция в базе данных закрылась или истекла. В ответе retryAfter и заголовок Retry-After. Откат локальной транзакции не откатывает уже совершённый вызов Битрикс24, поэтому для записи сначала перечитайте состояние |
КодSERVICE_UNAVAILABLE |
HTTP503 | Когда возникаетГраница платформы не смогла передать запрос бэкенду (например, в момент редеплоя) — либо не дождалась ответа. В ответе retryAfter и заголовок Retry-After. Если запрос мог быть выполнен (истёк таймаут ожидания ответа), для не-идемпотентных операций перед повтором сверьте состояние сущности |
КодINTERNAL_ERROR |
HTTP500 | Когда возникаетНепредвиденная ошибка бэкенда Вайбкод |
КодPLACEMENT_UNBIND_FAILED |
HTTP502 | Когда возникаетАккаунт не подтвердил снятие мест встраивания. Публикация и изменение приложения при этом не применяются, коды приходят в error.placements. Возвращается только на аккаунтах, где включена проверка снятия |
КодNETWORK_DEVKEY_REQUIRED |
HTTP503 | Когда возникаетКлюч разработчика для автора приложения ещё не выдан — привязка места встраивания временно недоступна. На аккаунтах с включённой проверкой снятия тем же кодом отвечают публикация и изменение приложения |
Причины и порядок действий по BITRIX_ERROR, METHOD_NOT_YET_AVAILABLE, BITRIX_UNAVAILABLE, BITRIX_TIMEOUT и INTERNAL_ERROR — Битрикс24 и платформа. По QUEUE_OVERFLOW и QUEUE_TIMEOUT — Лимиты, очереди и паузы. Доставка целевого вызова и безопасность повтора чтения или записи собраны отдельно на странице Что безопасно повторять.