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

Коды ошибок

Справочник кодов ошибок API Вайбкод: единый формат ответа, перечень кодов, типичные причины и способы устранения. Применяется ко всем эндпоинтам /v1/....

Разделы документации

Формат ответа при ошибке

Каждый ответ с ошибкой возвращается в едином виде. error — объект.

JSON
{
  "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. Приходит не всегда — только когда Битрикс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:

JSON
{
  "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 Ключ не найден в системе или формат не распознан
INVALID_APP_KEY 401 Передан vibe_app_*, но без сопровождающего Authorization: Bearer ...
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
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.reasonNOT_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_uritoken_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, обработчик маршрута нашёл некорректное значение параметра, либо на записи в поле-скаляр передан объект или массив. См. Запрос и данные
INVALID_REQUEST 400 Структура запроса не соответствует требуемой — например, calls в /v1/batch пустой массив или содержит больше 50 элементов, создание сервера без обязательных полей, не-объект вместо тела на маршрутах пользовательских полей
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, foldersparentId, calendar-eventstype и ownerId. message перечисляет недостающие поля
MISSING_REQUIRED_FIELDS 400 Не передано поле тела, объявленное обязательным при создании сущности. message называет недостающее поле
MISSING_FIELD 400 Создание пользовательского поля без userTypeId. message приводит примеры допустимых типов
EMPTY_CREATE_BODY 400 Тело запроса на создание пустое — не передано ни одного поля
EMPTY_UPDATE_BODY 400 Тело запроса на обновление пустое — не передано ни одного поля
INVALID_FILTER_FIELD 400 Имя поля фильтра начинается с родного префикса Битрикс24 @ (IN) или !@ (NOT IN) — используйте операторы $in / $nin
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 — на товарах каталога. Чужое написание метод не понимает, и его гейт отклоняет
SELECT_FIELD_NOT_RETURNED 400 Отбор полей select по имени, которое у сущности ЕСТЬ, но никогда не возвращается: GET /v1/{entity}/fields показывает его с notReturned: true. Отдельный код нужен потому, что UNKNOWN_SELECT_FIELD утверждает «такого имени нет», а справочник сущности это имя публикует. Уберите его из select — остальные поля придут в ответе
UNKNOWN_SORT_FIELD 400 Сортировка по несуществующему полю (для сущностей, у которых валидатор сортировки активен)
BATCH_LIMIT_EXCEEDED 400 Запрос содержит больше 50 элементов в массивной операции (chats, task-comments и подобные)
MESSAGE_REQUIRED 400 POST /v1/chats/{dialogId}/messages без текста: поле message пустое и нет блока attach. Частая причина — текст передан под неизвестным именем поля, например text. Ответ перечисляет нераспознанные поля
INVALID_EVENT 400 Код события подписки портала не соответствует формату ^[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.

Маршрута не существует:

JSON
{
  "success": false,
  "error": {
    "code": "ROUTE_NOT_FOUND",
    "message": "Route GET:/v1/dealz not found. Check GET /v1/guide for available endpoints and verbs."
  }
}

Маршрут существует, объекта нет:

JSON
{
  "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.listGET /v1/catalog-products, crm.deal.listGET /v1/deals, crm.user.listGET /v1/users, crm.deal.searchPOST /v1/deals/search. На остальных путях приходит ROUTE_NOT_FOUND без details, и маршрут нужно найти через GET /v1/guide.

JSON
{
  "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 Запись с такими ключевыми полями уже существует
B24_USER_DELETED 409 Сотрудник Битрикс24, которому принадлежит ключ, больше не активен на аккаунте — выписать ключ на него нельзя. Приходит везде, где у ключа появляется владелец: создание приложения, выдача проектного ключа, а также выпуск и перевыпуск ключа менеджмент-ключом (менеджмент-ключи). Состояние постоянное, помогает только восстановление сотрудника на аккаунте
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 — их таблица лежит в разделе «Инфраструктура», в «Ошибках проверки доступа и биллинга»
INT_VIBE_PLUS_REQUIRED 402 На портале не подключён тариф Vibe+. Подключите тариф Vibe+ и повторите запрос
SELFHOSTED_NOT_AVAILABLE 402 Коробочный Битрикс24 пока не доступен на этой установке — доступ открывается постепенно. Серверы и данные портала сохраняются, ничего не удаляется. Покупкой тарифа отказ не снимается: адрес обращения — поддержка (details.upgradeUrl содержит mailto:)
B24_PAID_TARIFF_REQUIRED 402 Подписка BitrixGPT + Маркетплейс на портале оплачена, но тариф Битрикс24 бесплатный, и на нём подписка не действует. Условий доступа два, и userMessage называет оба, указывая невыполненное. Ссылки на оформление нет — подписка уже оплачена. Помогает только переход портала на любой платный тариф Битрикс24, повтор запроса состояние не меняет. Приходит на выписке ключа портала и на установке приложения
TRIAL_EXPIRED 402 14-дневный пробный период завершён
TRIAL_PORTAL_LIMIT 402 На пробном периоде превышен общий лимит серверов на портал
TRIAL_USER_LIMIT 402 На пробном периоде превышен лимит серверов на пользователя
PLAN_NOT_ALLOWED_ON_TRIAL 402 Запрошенный план сервера/агента недоступен на пробном периоде
SERVER_WAKE_BLOCKED 403 Пробуждение сервера заблокировано по небиллинговой причине
B24_MARKET_SUBSCRIPTION_REQUIRED 403 На аккаунте нет активной подписки BitrixGPT + Маркетплейс. Приходит на привязке места встраивания, на установке приложения, а также на выписке и перевыпуске ключа портала — в том числе на коробочном портале, где ключ выдаёт модуль-коннектор
B24_MARKET_TRIAL_USED 403 Пробный период подписки BitrixGPT + Маркетплейс уже использован — привязка места встраивания, установка приложения, выписка и перевыпуск ключа портала требуют платной подписки
INT_TARIFF_REQUIRED 403 Аккаунт работает по тарифной модели доступа, при этом привязка места встраивания, установка приложения, выписка и перевыпуск ключа портала требуют коммерческого тарифа Битрикс24

Причины и порядок действий по 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. Это признак раскатки, а не ошибка вызова — подробнее
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 Очередь портала перегружена: больше 30 секунд ожидания на стороне Вайбкод. Запрос не был отправлен в Битрикс24 — безопасно повторить
BITRIX_TIMEOUT 503 Битрикс24 принял запрос, но не ответил за 15 секунд — исход неизвестен. Для операций записи: сначала перечитайте сущность, изменение могло примениться
POOL_EXHAUSTED 503 Сервис временно перегружен — исчерпан пул соединений с базой данных. В ответе retryAfter и заголовок Retry-After, повторите через несколько секунд
DB_TRANSIENT 503 Транзакция в базе данных закрылась или истекла до того, как операция завершилась, — платформа откатила её целиком. Отказ временный: в ответе retryAfter и заголовок Retry-After, повторите через несколько секунд. Изменение не применилось ни частично, ни полностью
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Лимиты, очереди и паузы.

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