Для AI-агентов: markdown этой страницы — /docs-content/errors.md индекс документации — /llms.txt
Коды ошибок
Справочник кодов ошибок API Вайбкод: единый формат ответа, перечень кодов, типичные причины и способы устранения. Применяется ко всем эндпоинтам /v1/....
Разделы документации
- Авторизация, ключи и права —
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,TRIAL_EXPIRED,B24_MARKET_SUBSCRIPTION_REQUIRED,B24_MARKET_TRIAL_USED,INT_TARIFF_REQUIRED - Лимиты, очереди и паузы —
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 и что делать с чтением или записью по каждому временному коду
- Повторы и обработка ошибок в коде — когда повторять запрос, а когда сначала перечитать сущность
Формат ответа при ошибке
Каждый ответ с ошибкой возвращается в едином виде. 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.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). У RATE_LIMITED и ERROR_LOOP_DETECTED поля в теле нет — срок приходит только заголовком Retry-After. У LARGE_BODY_BACKEND_BUSY поле приходит не на всех путях отказа — там тоже берите срок из заголовка |
error.b24Code |
string | нет | Машиночитаемый код причины от Битрикс24 в ответах 422 BITRIX_ERROR; у роутов чатов на мессенджере v2 — загрузки чата, счётчиков, сообщений вокруг сообщения и режима format=v2 — ещё и в 404 ENTITY_NOT_FOUND. Приходит не всегда — только когда Битрикс24 прислал отдельный код |
error.release |
string | нет | Идентификатор обновления Битрикс24, которого ждёт портал: имя модуля и номер версии одной строкой, например imopenlines 26.700.0. Приходит только в METHOD_NOT_YET_AVAILABLE |
error.scope |
string | нет | Радиус отказа по лимиту: "apiKey" — приостановлен только вызывающий ключ, "portal" — пауза действует на весь портал Битрикс24 и её видят все его ключи. Появляется в OPERATION_TIME_LIMIT ("apiKey"), TIMEOUT_QUARANTINE ("portal") и FEEDBACK_QUOTA_EXCEEDED (оба значения). Различает «чинить свой код» и «ждать вместе с порталом» |
Пример ответа с дополнительным полем 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. Есть отказы, где поле в теле не приходит, а заголовок — приходит, поэтому опирайтесь на заголовок.
Сводная таблица кодов
Таблица покрывает основные коды, которые встречаются на любом эндпоинте API Вайбкод. Доменные коды (BOT_NOT_FOUND, SERVER_NOT_RUNNING, AGENT_LIMIT_REACHED и подобные) описаны на страницах соответствующих разделов.
Авторизация и ключи
| Код | HTTP | Когда возникает |
|---|---|---|
MISSING_API_KEY |
401 | Запрос без заголовка X-Api-Key |
INVALID_API_KEY |
401 | Платформа не знает такой строки ключа: опечатка, обрезанное при копировании значение, ключ от другого окружения или удалённый ключ. Существующий ключ, который перестал работать, отвечает другими кодами — KEY_INACTIVE, KEY_EXPIRED, PORTAL_CREDENTIALS_REJECTED |
KEY_INACTIVE |
401 | Ключ найден, но отозван или заблокирован платформой. Строка ключа прежняя, и новый ключ выдаётся отдельно — восстановить отозванный нельзя |
KEY_EXPIRED |
401 | Ключ найден, срок действия из expiresAt прошёл. Поле status при этом остаётся ACTIVE |
INVALID_APP_KEY |
401 | OAuth-ручка получила app_key, который не найден или не принадлежит OAuth-приложению |
WRONG_AUTH_SCHEME |
401 | API-ключ передан в заголовке Authorization: Bearer. Ключ OAuth-приложения (vibe_app_*) передаётся в X-Api-Key, а Authorization: Bearer несёт сессионный токен (vibe_session_*). Клиенту, который умеет только Bearer, используйте личный ключ (vibe_api_*) — он принимается в Authorization: Bearer |
TOKEN_EXPIRED |
401 | Срок действия OAuth-токена истёк |
TOKEN_REFRESH_FAILED |
401 | Не удалось обновить OAuth-токен на стороне Битрикс24 |
PORTAL_CREDENTIALS_REJECTED |
401 | Битрикс24 отклонил учётные данные, с которыми ключ обращается к порталу: вебхук ключа отозван или потерял силу. Повтор не помогает — ключ нужно переподключить |
PORTAL_ADDRESS_CHANGED |
409 | Коробочный портал переехал на новый адрес, а вебхук ключа выписан на прежний. Платформа не отправляет секрет туда, где портала больше нет, поэтому вызов отклоняется до обращения к порталу. Повтор не помогает — переподключите ключ: платформа перевыпустит вебхук, строка ключа и его права не изменятся |
WRONG_KEY_TYPE |
401 | Тип ключа не подходит к эндпоинту: например, менеджмент-ключ на маршруте сущности |
WRONG_KEY |
403 | Сервер существует, но вызывающему не принадлежит. Операции над содержимым приложения — выкладка, команда, загрузка файла и чтение логов — открыты по любому из трёх оснований: управляющий ключ сервера, ключ, приложение которого привязано к этому серверу, либо членство в команде разработки этого сервера. Токены доступа и загрузка значка требуют управляющего ключа. Управление машиной открыто ещё и роли «Администратор» команды разработки. В ответе — hint с восстановлением из двух шагов: перепривязать сервер в кабинете и сменить ключ, которым обращается клиент. Подробнее — восстановление доступа |
TOKEN_MISSING |
401 | У ключа нет кредов Битрикс24. Для личного ключа (vibe_api_*) — нет вебхука портала: на маршрутах сущностей и в POST /v1/batch причина приходит в error.details, на остальных маршрутах приходит тот же код без details. Для ключа приложения (vibe_app_*) — не передан Authorization: Bearer с токеном сессии |
SESSION_REQUIRED |
401 | Операция с местами встраивания выполнена без заголовка Authorization: Bearer с токеном сессии там, где аккаунт его требует |
SESSION_APP_MISMATCH |
403 | Сессия в Authorization: Bearer выписана другому приложению или другому аккаунту Битрикс24, чем ключ в X-Api-Key. Передайте ключ авторизации того приложения, которое выписало сессию через POST /v1/oauth/token |
PERSONAL_KEY_WEBHOOK_SCOPES_INVALID |
400 | Выписка, обновление или перевыпуск ключа портала, где placement и entity запрошены, а кроме них в наборе прав ничего нет. Ключ портала стоит на входящем вебхуке Битрикс24, а такие права вебхук не несёт — добавьте право на данные либо заведите OAuth-приложение. Подробнее — менеджмент-ключи |
ACCOUNT_PENDING_ERASURE |
503 | Аккаунт владельца ключа ждёт удаления данных — на это время ключ заморожен. В ответе заголовок Retry-After: 3600. Действует на любой ключ владельца, включая менеджмент-ключ. Отмена запроса на удаление возвращает ключу работу, перевыпускать его не нужно |
Причины и порядок действий по MISSING_API_KEY, INVALID_API_KEY и TOKEN_MISSING — Авторизация, ключи и права.
Состояние аккаунта Битрикс24
Состояние аккаунта, к которому привязан ключ, проверяется на каждом вызове. Отказы этой группы не привязаны к эндпоинту: пока аккаунт в одном из перечисленных состояний, ключ получает их на маршрутах /v1/..., у которых нет собственного отказа для этого состояния, и повтор запроса ничего не меняет.
| Код | HTTP | Когда возникает |
|---|---|---|
PORTAL_SUSPENDED |
403 | Аккаунт приостановлен |
PORTAL_DELETED |
403 | Аккаунт удалён |
PORTAL_BLOCKED |
403 | Аккаунт заблокирован. Рядом с кодом приходит blockedAt — момент блокировки в формате ISO 8601. Причину блокировки ответ не раскрывает |
NO_PORTAL |
401 | Ключ не привязан ни к одному аккаунту. Исключение — маршруты хранилища: непривязанный ключ получает там 403 STORAGE_REQUIRES_PORTAL_BINDING. Тот же код с HTTP 500 приходит на маршрутах авторизации пользователей приложения и означает там другое — приложение не связано с аккаунтом |
Авторизация пользователей приложения (OAuth)
| Код | HTTP | Когда возникает |
|---|---|---|
INVALID_REDIRECT_URI |
400 | redirect_uri не зарегистрирован у приложения на входе GET /v1/oauth/authorize |
INVALID_STATE |
400 | state не найден или истёк за 20 минут на приёме ответа Битрикс24. В error.details.reason — NOT_FOUND или EXPIRED |
INVALID_CODE |
400 | Код авторизации не найден или принадлежит другому приложению |
CODE_EXPIRED |
400 | Срок действия кода авторизации прошёл — 5 минут |
CODE_ALREADY_USED |
400 | Код авторизации уже обменян на токен сессии |
REDIRECT_URI_MISMATCH |
400 | redirect_uri при обмене кода не совпадает с переданным на входе |
DOMAIN_MISMATCH |
400 | domain в POST /v1/oauth/placement-session не совпадает с порталом приложения |
USER_AUTH_REQUIRED |
401 | Токен пользователя Битрикс24 не подтвердил авторизацию на портале |
MISSING_TOKEN |
400 | POST /v1/oauth/revoke без заголовка Authorization: Bearer с токеном сессии |
Отказ на приёме возврата может прийти не кодом, а параметром ?error= в адресе redirect_uri — token_exchange_failed, invalid_domain или profile_fetch_failed.
Полное описание потока — Авторизация пользователей приложения.
Права и скоупы
| Код | HTTP | Когда возникает |
|---|---|---|
SCOPE_DENIED |
403 | У ключа нет нужного скоупа (например, crm для сделок, imbot для ботов) |
WRITE_BLOCKED_READONLY_KEY |
403 | У ключа задан режим «только чтение», а вызов выполняет запись |
INFRA_FORBIDDEN_FOR_COWORK_KEY |
403 | Ключ 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 этого кода не отдаёт вовсе. Порядок действий — Проектный ключ для деплоя. В error.details.deployableKeys ответ перечисляет ваши другие активные ключи с правом деплоя — name, prefix, suffix, до пяти |
INFRA_SCOPE_REQUIRED |
403 | У ключа нет скоупа vibe:infra — управление инфраструктурой недоступно. Добавьте скоуп или используйте ключ с правами на инфраструктуру |
INFRA_DISABLED_FOR_PORTAL |
403 | Право vibe:infra явно запрошено при создании ключа или приложения либо добавлено правкой их прав, а администратор портала выключил работу с серверами. Проверка считает добавление права, а не его присутствие в теле: правка ключа или приложения, которые это право уже несут, проходит и на закрытом портале, снятие права разрешено всегда. Не путать с INFRA_SCOPE_REQUIRED — тот про вызов инфраструктуры ключом без права, этот про саму выдачу права |
SERVER_ROLE_FORBIDDEN |
403 | Вы состоите в команде разработки сервера, но операция шире вашей роли: роль «Разработчик» покрывает работу с кодом, роль «Администратор» — ещё и управление машиной. В error.hint приходят yourRole, requiredRole, отказанное действие deniedAction и список открытых вам вызовов allowedHere. Доступ не сломан и не требует ни выдачи заново, ни перепривязки ключа — либо продолжайте по вызовам из allowedHere, либо попросите владельца выполнить эту операцию. Разбор ролей — Список серверов |
KEY_POLICY_READONLY_REQUIRED |
403 | Политика портала разрешает обычным пользователям создавать только ключи с режимом «только чтение» — выпуск ключа с записью отклонён |
RATE_LIMIT_ADMIN_ONLY |
403 | Запрос меняет собственный поминутный лимит ключа на AI-вызовы — поле rateLimit при создании или правке, — а вызывающий не администратор портала. Через POST /v1/keys и PATCH /v1/keys/:id смена этого поля отклоняется и администратору: значение задаётся в личном кабинете. Передача текущего значения без изменения проходит, поэтому клиент, отправляющий объект ключа целиком ради переименования, этого отказа не получает. Оставьте поле пустым, и действует общий лимит платформы — Лимиты запросов |
MANAGEMENT_KEY_READ_ONLY |
403 | Менеджмент-ключ создаёт обращение — POST /v1/feedback или загрузка вложения к нему. Чтение и обновление обращений таким ключом доступны, создание — нет. Запрет записи по режиму доступа ключа приходит другим кодом — WRITE_BLOCKED_READONLY_KEY |
MANAGEMENT_KEY_NO_ENTITY_ACCESS |
403 | Менеджмент-ключ обращается к эндпоинту сущности — нужен ключ приложения с нужным скоупом |
BITRIX_ACCESS_DENIED |
403 | Битрикс24 ответил ACCESS_DENIED: у пользователя нет прав на операцию или сущность |
B24_MARKET_SUBSCRIPTION_REQUIRED |
403 | Вызов существующего бота остановлен локально: Битрикс24 отклонил Bot REST из-за неактивной подписки Маркетплейса. Остановите опрос и обновите состояние тарифа после продления |
OAUTH_REQUIRED |
403 | Эндпоинт требует пользовательский контекст — нужен ключ типа vibe_app_* + Bearer-токен |
WAITLIST_PENDING |
403 | Аккаунт ожидает активации в списке ожидания |
OAUTH_SCOPE_CHANGE_REQUIRES_REISSUE |
403 | Попытка добавить право Битрикс24 к OAuth-app-ключу (vibe_app_*) через PATCH /v1/keys/:id или к приложению через PATCH /v1/apps/:id. Права OAuth-приложения фиксируются при выпуске — снятие прав работает, а добавление нет. Новое право даёт перевыпуск ключа авторизации в кабинете: он выдаёт ключ с расширенным набором, после чего аккаунт проходит авторизацию заново. Второй путь — создать приложение сразу с нужным набором |
OAUTH_APP_REQUIRED |
400 | Операция с местами встраивания выполнена личным ключом vibe_api_*. Привязка, отвязка и список привязанных мест доступны только ключу авторизации приложения vibe_app_* |
PLACEMENT_SCOPE_MISSING |
403 | У ключа нет скоупа placement — привязка и отвязка мест встраивания недоступны |
SESSION_REQUIRES_ADMIN |
403 | Привязка места встраивания на коробочном аккаунте выполняется под учётной записью без прав администратора аккаунта |
B24_EMBEDDING_APP_NOT_FOUND |
404 | Битрикс24 не знает идентификатор приложения: локальное приложение на аккаунте удалили или переустановили. Создайте локальное приложение заново и вызовите POST /v1/apps/:id/relink-oauth с новыми bitrixClientId и bitrixClientSecret. Не путать с APP_NOT_FOUND — тот про связку ключа и приложения на стороне платформы Вайбкод |
B24_EMBEDDING_INSTALL_DENIED |
403 | Битрикс24 отказал в установке встройки при действующей подписке: у пользователя, чьим ключом разработчика идёт вызов, нет права ставить локальные приложения и/или нет доступа к самому приложению. Подписка считается действующей в двух случаях — её подтвердил Битрикс24 либо проверку выполнить не удалось, а аккаунт уже числится подписанным в Вайбкод. Если действующей подписки нет ни по одному из источников, тот же отказ приходит как 502 |
APP_NOT_REGISTERED |
400 | У приложения нет идентификатора приложения Битрикс24 — привязать или отвязать место встраивания нельзя |
BOX_NO_DEVELOPER_KEY |
400 | У автора приложения не настроен ключ разработчика — операция с местами встраивания на коробочном аккаунте недоступна |
OAUTH_APP_KEY_CANNOT_RELINK |
403 | POST /v1/apps/:id/relink-oauth вызван ключом самого OAuth-приложения (vibe_app_*). Перепривязывать учётные данные приложения таким ключом нельзя — используйте личный ключ (vibe_api_*) или кабинет |
Причины и порядок действий по SCOPE_DENIED, BITRIX_ACCESS_DENIED и WRITE_BLOCKED_READONLY_KEY — Авторизация, ключи и права.
Валидация запроса
| Код | HTTP | Когда возникает |
|---|---|---|
VALIDATION_ERROR |
400 | Тело или query-параметры не прошли проверку схемы. message содержит подробности по полям |
INVALID_JSON_BODY |
400 | Тело запроса не разбирается как 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 |
400 | Тот же случай — тело не разбирается как JSON — на остальных маршрутах: POST /v1/search, POST /v1/research, POST /v1/batch и прочих |
CATALOG_NOT_ELIGIBLE |
400 | Карточка в каталоге приложений Битрикс24 для этого сервера невозможна: нет субдомена, приложение ещё не выкладывали, это рантайм агента, хост галактики, либо у сервера нет управляющего ключа или портала. См. Опубликовать в каталоге |
CATALOG_ORPHANED |
400 | Карточку в каталоге удалили на стороне портала. Восстановление доступно в личном кабинете, на публичном API — нет |
fst_err_ctp_invalid_json_body |
400 | Тот же случай на OpenAI-совместимых маршрутах AI Router — /v1/ai/, /v1/chat/, /v1/models, /v1/audio/. На них коды приводятся к нижнему регистру, а ответ идёт в OpenAI-конверте: error.type, error.code, без поля success |
INVALID_PARAMS |
400 | Битрикс24 вернул INVALID_PARAMS либо отклонил вызов до запуска метода, не найдя значения обязательного параметра (Could not find value for parameter) — тогда параметр назван в error.hint; обработчик маршрута нашёл некорректное значение параметра; на записи в поле-скаляр передан объект или массив. См. Запрос и данные |
INVALID_REQUEST |
400 | Структура запроса не соответствует требуемой — например, calls в /v1/batch пустой массив или содержит больше 50 элементов, создание сервера без обязательных полей, не-объект вместо тела на маршрутах пользовательских полей, не-объект (null, массив, строка, число, boolean) вместо тела на POST /{entity}/search |
MISSING_PARAMS |
400 | Не передан обязательный параметр, явно перечисленный в схеме эндпоинта |
MISSING_REQUIRED_FILTER |
400 | Не передан обязательный фильтр для list-эндпоинтов, требующих контекста: timelines (entityType + entityId), catalog-products и catalog-sections (iblockId), catalog-product-property-enums (propertyId). Он же приходит на агрегацию дел без сужающего фильтра — там достаточно одного сужения из нескольких, и message их перечисляет |
MISSING_REQUIRED_PARAMS |
400 | Не переданы обязательные параметры контекста для поиска или списка вложенных данных: files требует folderId, folders — parentId, calendar-events — type и ownerId. message перечисляет недостающие поля |
MISSING_REQUIRED_FIELDS |
400 | Не передано поле тела, объявленное обязательным при создании сущности. message называет недостающее поле |
MISSING_FIELD |
400 | Создание пользовательского поля без userTypeId. message приводит примеры допустимых типов |
EMPTY_CREATE_BODY |
400 | Тело запроса на создание пустое — не передано ни одного поля. Тот же код и для тела, которое вовсе не является JSON-объектом (null, массив, строка, число, boolean) — ни одно распознаваемое поле в нём найти нельзя в принципе |
EMPTY_UPDATE_BODY |
400 | Тело запроса на обновление пустое — не передано ни одного поля. Тот же код и для тела, которое вовсе не является JSON-объектом (null, массив, строка, число, boolean) |
INVALID_FILTER_FIELD |
400 | Имя поля фильтра начинается с родного префикса Битрикс24 @ (IN) или !@ (NOT IN) — используйте операторы $in / $nin |
INVALID_DUPLICATE_FILTER_FIELD |
400 | Два условия в одном фильтре сводятся к одному имени фильтра Битрикс24, поэтому второе молча заменило бы первое: имя из схемы и родное имя Битрикс24, разный регистр, два написания одного оператора, парные имена полей даты (updatedAt/updatedTime, createdAt/createdTime). Ещё две пары зависят от сущности: UF_-форма вместе с camelCase-написанием складывается только у сущностей со старым стилем именования и только для того написания, которое платформа переводит: чисто буквенное (ufCrmProjectCode) — везде на таких сущностях, а с цифровым хвостом (ufCrm_1698325419) — лишь у реквизитов; на остальных сущностях цифровая пара отказа не даёт, а связка $ne с $nin даёт один префикс ! у ВСЕХ сущностей, кроме элементов CRM (границы разные). message называет оба условия и общее имя. Пришлите одно из двух. Операторы, дающие разные имена, по-прежнему допустимы — см. Одно поле — одно написание |
UNKNOWN_FILTER_FIELD |
400 | Фильтрация по полю, которого нет в схеме сущности (для сущностей с полной схемой полей). Когда поле отклонил валидатор Вайбкод, message перечисляет допустимые имена после слова Available. Когда поле отклонил Битрикс24, список полей приходит в error.hint |
UNKNOWN_SELECT_FIELD |
400 | Отбор полей 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 |
400 | Отбор полей select по имени, которое у сущности ЕСТЬ, но никогда не возвращается: GET /v1/{entity}/fields показывает его с notReturned: true. Отдельный код нужен потому, что UNKNOWN_SELECT_FIELD утверждает «такого имени нет», а справочник сущности это имя публикует. Уберите его из select — остальные поля придут в ответе |
UNKNOWN_SORT_FIELD |
400 | Сортировка по несуществующему полю (для сущностей, у которых валидатор сортировки активен) |
UNKNOWN_STAGE |
400 | Создание сделки или лида со стадией, которой нет в справочнике аккаунта: 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 |
400 | Запрос содержит больше 50 элементов в массивной операции (chats, task-comments и подобные) |
MESSAGE_REQUIRED |
400 | POST /v1/chats/{dialogId}/messages без текста: поле message пустое и нет блока attach. PATCH /v1/chats/{dialogId}/messages/{messageId} без текста — по правилу Битрикс24 (одни пробелы, теги [BR]/[br] или NUL считаются пустым, а пустой текст удалял бы сообщение). Частая причина — текст передан под неизвестным именем поля, например text. Ответ перечисляет нераспознанные поля |
INVALID_EVENT |
400 | Код события подписки портала не соответствует формату ^[A-Z][A-Z0-9_]+(?:\.[A-Z][A-Z0-9_]+)*$. См. Подписки на события портала |
INVALID_APP_PATH |
400 | Путь доставки appPath не начинается с / либо содержит управляющие символы. См. Подписки на события портала |
PLATFORM_HANDLER_UNRESOLVABLE |
400 | Адрес обработчика указывает на технический адрес сервера приложения, а платформенный обработчик определить не удалось. Место встраивания не зарегистрировано. См. Привязать место |
Пустое тело с заголовком 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 |
413 | Тело запроса больше потолка этого маршрута |
INLINE_SOURCE_TOO_LARGE |
413 | Тело со встроенным архивом или файлом больше 96 МБ на трёх маршрутах инфраструктуры — выкладка кода, загрузка файла и создание сервера с полем source |
LARGE_BODY_BACKEND_BUSY |
429 | Платформа уже обрабатывает предельный объём крупных тел. Запрос не выполнялся, повторите его через 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 |
415 | Для PUBLIC-объектов запрещены типы text/html, application/javascript, application/x-javascript, image/svg+xml — они опасны межсайтовым выполнением скриптов. Загружайте такой файл как PRIVATE |
Предусловия подписок на события портала
| Код | HTTP | Когда возникает |
|---|---|---|
NOT_OAUTH_APP |
400 | Сервер не привязан к OAuth-приложению с application_token — подписку на событие зарегистрировать нельзя |
NO_USER_TOKEN |
400 | У приложения нет OAuth-токена — сначала авторизуйте приложение на портале |
Полное описание операций — Подписки на события портала.
Установка приложения через модуль-коннектор
| Код | HTTP | Когда возникает |
|---|---|---|
CONNECTOR_APP_INSTALL_FORBIDDEN |
403 | Администратор аккаунта Битрикс24 запретил этому сотруднику устанавливать приложения. Право выдаёт администратор аккаунта, повтор запроса состояние не меняет. Подробнее — Права на создание |
CONNECTOR_MODULE_NOT_INSTALLED |
409 | Модуль-коннектор на аккаунте не установлен. Состояние постоянное — пока модуль не установят, повтор бессмыслен |
CONNECTOR_APP_INSTALL_FAILED |
502 | Другой сбой установки на стороне модуля-коннектора. Запрос можно повторить |
CONNECTOR_REST_UNAVAILABLE |
502 | Подписка или пробный период действуют, но Битрикс24 отказал в выписке парного ключа. Исходная причина — в error.details.reason, error.details.retryable: true говорит, что состояние временное |
CONNECTOR_PLAN_REQUIRED |
502 | Тариф аккаунта Битрикс24 не включает Вайбкод, и предлагать нечего — коробочный аккаунт, аккаунт уже на платном тарифе, нераспознанный регион. Текст причины для человека — в error.userMessage. Состояние постоянное: повтор не поможет, пока тариф не сменён. Там, где доступ продаётся, тот же отказ приходит ответом 402 с кодом тарифного пейвола |
Коды приходят на создании приложения там, где приложение устанавливает модуль-коннектор: на коробочном аккаунте, а на облачном — когда такой выпуск для аккаунта включён. При любом из этих отказов ни приложение, ни парный ключ не создаются.
Ресурс не найден
| Код | HTTP | Когда возникает |
|---|---|---|
ROUTE_NOT_FOUND |
404 | Маршрута или HTTP-глагола не существует: опечатка в пути, несуществующая сущность, неподдерживаемый метод, а также операция, которой у этой сущности нет. Сверьте путь со списком в GET /v1/guide. Когда путь составлен из имени метода Битрикс24, ответ дополнительно называет замену — см. «Имя метода Битрикс24 вместо пути V1» ниже |
ENTITY_NOT_FOUND |
404 | Запись CRM-сущности с указанным id не существует. Канонический код для /v1/deals/:id, /v1/contacts/:id и подобных |
NOT_FOUND |
404 | Только GET /:id: Битрикс24 вернул success, но result пустой (применимо к нескольким смарт-методам) |
OPERATION_NOT_FOUND |
404 | Операции выкладки с таким идентификатором нет, она принадлежит другому ключу либо запись уже удалена. Три случая отвечают одинаково намеренно — см. Исход выкладки |
Доменные *_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 |
Тип | Описание |
|---|---|---|
reason |
string | BITRIX_METHOD_AS_PATH — путь составлен из имени метода Битрикс24 |
bitrixMethod |
string | Имя метода, распознанное в пути |
suggestedEndpoint |
object | Маршрут V1, который решает ту же задачу: method и path |
guide |
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 |
409 | Текущее состояние ресурса несовместимо с запросом |
ALREADY_EXISTS |
409 | Запись с такими ключевыми полями уже существует |
CURRENCY_MISMATCH |
409 | Валюта оплаты не совпадает с валютой её заказа. Проверяется при создании оплаты. При изменении поле не проверяется — в теле запроса нет заказа. Битрикс24 хранит оплату в валюте заказа и присланную не применяет. Чтобы унаследовать валюту, не передавайте поле. См. Создать оплату |
B24_USER_DELETED |
409 | Сотрудник Битрикс24, которому принадлежит ключ, больше не активен на аккаунте — выписать ключ на него нельзя. Приходит везде, где у ключа появляется владелец: создание приложения, выдача проектного ключа, а также выпуск и перевыпуск ключа менеджмент-ключом (менеджмент-ключи). Состояние постоянное, помогает только восстановление сотрудника на аккаунте |
KEY_ROTATION_RECOVERY_REQUIRED |
409 | Замена ключа не завершена: его перевыпуск закончился ответом 500 или ещё не закончился. Приходит на перевыпуске и удалении такого ключа и на выпуске им токена доступа. Порядок действий — Менеджмент-ключи |
APPLICATION_KEY_RECOVERY_REQUIRED |
409 | Ключ с незавершённой заменой не привязывается к серверу или приложению. Приходит в том числе на создании сервера, когда не завершена замена ключа, которым сделан запрос, и на замене ключа приложения Коворка, когда в незавершённой замене участвует ключ, привязанный к этому приложению. Новое значение Idempotency-Key отказ не снимает |
EVENT_BOUND_ELSEWHERE |
409 | Событие портала уже привязано к другому серверу того же OAuth-приложения. См. Подписки на события портала |
CATALOG_ALREADY_PUBLISHED |
409 | У сервера уже есть карточка в каталоге приложений Битрикс24. См. Опубликовать в каталоге |
CATALOG_DELETE_PENDING |
409 | По карточке в каталоге уже поставлено удаление — публикация в этом состоянии недоступна |
OAUTH_CLIENT_ID_IN_USE |
409 | POST /v1/apps/:id/relink-oauth: указанный bitrixClientId уже привязан к другому приложению. Один client_id — одно приложение |
OPERATION_OUTCOME_EXPIRED |
410 | Операция выкладки ваша и она точно была, но её исход больше не хранится (срок — 7 суток). См. Исход выкладки |
Биллинг и тариф
Возникают на эндпоинтах создания и пробуждения инфраструктуры (серверы, агенты, управляемые боты). Ответ содержит userMessage на русском языке для показа в интерфейсе клиента.
| Код | HTTP | Когда возникает |
|---|---|---|
BILLING_EXHAUSTED |
402 | Баланс ушёл в красную зону, аккаунт заморожен. Нужно пополнение баланса |
ACCOUNT_FROZEN |
402 | Платёжный аккаунт заморожен за отрицательный баланс. Отказ приходит на вызовах, которые оплачиваются балансом Вайбкод. Полный состав — в блоке «Что закрывает заморозка счёта» ниже |
COMMERCIAL_PLAN_REQUIRED |
402 | Бесплатный тариф Битрикс24, пробный период недоступен или уже использован |
MARKETPLACE_REQUIRED |
402 | На портале нет активной подписки BitrixGPT + Маркетплейс — оформите её, чтобы открыть создание серверов, деплой, пробуждение и выписку ключей. Выписка ключей закрывает и создание приложения: парный ключ выписывается там же. Приходит только там, где доступ к платформе открывает подписка. Где его открывает тариф Битрикс24, отказ приходит кодами BY_PAID_ONLY, KZ_PAID_ONLY и UZ_PAID_ONLY — их таблица лежит в разделе «Инфраструктура», в «Ошибках проверки доступа и биллинга» |
SELFHOSTED_NOT_AVAILABLE |
402 | Коробочный Битрикс24 пока не доступен на этой установке — доступ открывается постепенно. Серверы и данные портала сохраняются, ничего не удаляется. Покупкой тарифа отказ не снимается: адрес обращения — поддержка (details.upgradeUrl содержит mailto:) |
B24_PAID_TARIFF_REQUIRED |
402 | Тариф Битрикс24 на портале бесплатный, а на таком тарифе Битрикс24 закрывает REST при любом состоянии подписки BitrixGPT + Маркетплейс. Ответ несёт userMessage и не ведёт к оформлению: помогает только переход портала на любой платный тариф Битрикс24, повтор запроса состояние не меняет. Приходит на выписке ключа портала и на установке приложения. Тариф «Демо» не затронут — на нём REST работает |
TRIAL_EXPIRED |
402 | 14-дневный пробный период завершён |
TRIAL_PORTAL_LIMIT |
402 | На пробном периоде превышен общий лимит серверов на портал |
APPLICATION_REUSE_CONFLICT |
409 | Привязка приложения изменилась конкурентно; retryable: true, повторите запрос создания |
TRIAL_USER_LIMIT |
402 | На пробном периоде превышен лимит серверов на пользователя |
PLAN_NOT_ALLOWED_ON_TRIAL |
402 | Запрошенный план сервера/агента недоступен на пробном периоде |
SERVER_WAKE_BLOCKED |
403 | Пробуждение сервера заблокировано по небиллинговой причине |
B24_MARKET_SUBSCRIPTION_REQUIRED |
403 | На аккаунте нет активной подписки BitrixGPT + Маркетплейс. Приходит на привязке места встраивания, на установке приложения, а также на выписке и перевыпуске ключа портала — в том числе на коробочном портале, где ключ выдаёт модуль-коннектор. На облачном аккаунте с прочитанным бесплатным тарифом Битрикс24 вместо него приходит B24_PAID_TARIFF_REQUIRED. Коробочный аккаунт эта подмена не затрагивает |
B24_MARKET_TRIAL_USED |
403 | Пробный период подписки BitrixGPT + Маркетплейс уже использован — привязка места встраивания, установка приложения, выписка и перевыпуск ключа портала требуют платной подписки. На облачном аккаунте с прочитанным бесплатным тарифом Битрикс24 вместо него приходит B24_PAID_TARIFF_REQUIRED. Коробочный аккаунт эта подмена не затрагивает |
INT_TARIFF_REQUIRED |
403 | Аккаунт работает по тарифной модели доступа, при этом привязка места встраивания, установка приложения, выписка и перевыпуск ключа портала требуют коммерческого тарифа Битрикс24 |
PORTAL_TARIFF_UNREADABLE |
403 | Тариф аккаунта прочитать не удалось, поэтому какой именно тариф нужен, ответ не называет: поле details.requiredTariffs пустое, а кнопка ведёт в поддержку. Покупка тарифа отказ не снимает |
PORTAL_SUBSCRIPTION_UNREADABLE |
403 | Состояние подписки аккаунта прочитать не удалось: ключу разработчика не хватает прав на чтение лицензии, поэтому платформа не знает, есть подписка или нет. Поле 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, TRIAL_EXPIRED, B24_MARKET_SUBSCRIPTION_REQUIRED, B24_MARKET_TRIAL_USED и INT_TARIFF_REQUIRED — Биллинг, тариф и подписка.
Ограничение частоты
| Код | HTTP | Когда возникает |
|---|---|---|
RATE_LIMITED |
429 | Битрикс24 ограничил частоту запросов или превышен внутренний лимит. Срок повтора приходит только заголовком Retry-After (секунды), поля retryAfter в теле нет |
ERROR_LOOP_DETECTED |
429 | Блокировка на стороне Вайбкод: один и тот же запрос повторяется с одинаковой ошибкой. Сигнал о баге в коде клиента. Каждый N-й запрос пробрасывается дальше для проверки восстановления |
OPERATION_TIME_LIMIT |
429 | Битрикс24 приостановил ЭТОТ метод для ВАШЕГО ключа примерно на 5 минут: метод исчерпал бюджет рабочего времени. В ответе scope: "apiKey", retryAfter и заголовок Retry-After. Остальные методы и другие ключи портала работают |
TIMEOUT_QUARANTINE |
429 | Блокировка на стороне Вайбкод: метод несколько раз подряд не ответил порталу за отведённое вызову время, и пара «портал + метод» поставлена на паузу. В ответе scope: "portal", retryAfter и заголовок Retry-After. Пауза общая для ВСЕХ ключей портала и снимается автоматически |
Причины и порядок действий по этой группе — Лимиты, очереди и паузы.
Бэкенд и сторонние сервисы
| Код | HTTP | Когда возникает |
|---|---|---|
BITRIX_ERROR |
422 | Битрикс24 вернул бизнес-ошибку, не подпадающую под более узкие категории (ACCESS_DENIED, NOT_FOUND, INVALID_PARAMS) |
AGGREGATION_LIMIT_EXCEEDED |
422 | Агрегация отказалась отвечать: выборка шире 5000 записей, оценённая стоимость вызова превысила безопасный бюджет, страница записей не догрузилась — либо (для дел без сужающего фильтра) Битрикс24 не ответил за отведённое на вызов время. message говорит, какой именно случай. Заголовка Retry-After нет: отказ не временный |
METHOD_NOT_YET_AVAILABLE |
422 | Метод выходит в обновлении Битрикс24 и на этот портал ещё не приехал. Ответ содержит поле error.release с идентификатором обновления, например imopenlines 26.700.0. Это признак раскатки, а не ошибка вызова — подробнее |
STAGE_NOT_APPLIED |
422 | Битрикс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 |
422 | Запрос ЯВНО просил ручной режим суммы (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 |
400 | Битрикс24 отказал в регистрации приложения или входящего вебхука и причину не назвал. Приходит на создании приложения и на выписке ключа портала. Ответ несёт error.details.incidentCode — шестисимвольный код обращения, по которому поддержка находит запись в журнале. Назовите этот код в обращении |
BITRIX_UNAVAILABLE |
502 | Битрикс24 вернул 5xx или не ответил вовремя |
BIND_FAILED |
502 | Битрикс24 отклонил регистрацию события (event.bind) — например, портал не на коммерческом тарифе. См. Подписки на события портала |
WINDOWED_SEARCH_FAILED |
— | Больше не возвращается: при полном отказе авто-окон /search возвращается реальный код Битрикс24 — UNKNOWN_FILTER_FIELD / INVALID_PARAMS / BITRIX_ACCESS_DENIED / RATE_LIMITED / BITRIX_UNAVAILABLE / BITRIX_TIMEOUT (503) / BITRIX_ERROR (422), как для узкого диапазона |
QUEUE_OVERFLOW |
429 | Очередь портала переполнена: слишком много одновременных вызовов Битрикс24. Отклоняется мгновенно, Retry-After в заголовке |
QUEUE_TIMEOUT |
429 | Очередь портала перегружена: больше 80 секунд ожидания на стороне Вайбкод. Запрос не был отправлен в Битрикс24 — безопасно повторить |
BITRIX_TIMEOUT |
503 | Битрикс24 принял запрос, но не ответил за 60 секунд — исход неизвестен. Для операций записи: сначала перечитайте сущность, изменение могло примениться |
POOL_EXHAUSTED |
503 | Сервис временно перегружен — исчерпан пул соединений с базой данных. В ответе retryAfter и заголовок Retry-After. Для записи исход неизвестен: перед повтором перечитайте состояние |
DB_TRANSIENT |
503 | Транзакция в базе данных закрылась или истекла. В ответе retryAfter и заголовок Retry-After. Откат локальной транзакции не откатывает уже совершённый вызов Битрикс24, поэтому для записи сначала перечитайте состояние |
SERVICE_UNAVAILABLE |
503 | Граница платформы не смогла передать запрос бэкенду (например, в момент редеплоя) — либо не дождалась ответа. В ответе retryAfter и заголовок Retry-After. Если запрос мог быть выполнен (истёк таймаут ожидания ответа), для не-идемпотентных операций перед повтором сверьте состояние сущности |
INTERNAL_ERROR |
500 | Непредвиденная ошибка бэкенда Вайбкод |
PLACEMENT_UNBIND_FAILED |
502 | Аккаунт не подтвердил снятие мест встраивания. Публикация и изменение приложения при этом не применяются, коды приходят в error.placements. Возвращается только на аккаунтах, где включена проверка снятия |
NETWORK_DEVKEY_REQUIRED |
503 | Ключ разработчика для автора приложения ещё не выдан — привязка места встраивания временно недоступна. На аккаунтах с включённой проверкой снятия тем же кодом отвечают публикация и изменение приложения |
Причины и порядок действий по BITRIX_ERROR, METHOD_NOT_YET_AVAILABLE, BITRIX_UNAVAILABLE, BITRIX_TIMEOUT и INTERNAL_ERROR — Битрикс24 и платформа. По QUEUE_OVERFLOW и QUEUE_TIMEOUT — Лимиты, очереди и паузы. Доставка целевого вызова и безопасность повтора чтения или записи собраны отдельно на странице Что безопасно повторять.