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

Коды ошибок

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

Базовый URL: https://vibecode.bitrix24.tech/v1 | Авторизация: X-Api-Key

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

Быстрый старт

Запросите сделку, которой нет на портале. Ответ придёт с HTTP-статусом 404 и кодом отказа в поле error.code:

Terminal
curl "https://vibecode.bitrix24.tech/v1/deals/999999999" \
  -H "X-Api-Key: YOUR_API_KEY"
JSON
{
  "success": false,
  "error": {
    "code": "ENTITY_NOT_FOUND",
    "message": "Элемент не найден"
  }
}

Тот же конверт приходит на любом маршруте /v1/.... Поля конверта разобраны в разделе «Формат ответа при ошибке» ниже.

Полный пример

Клиент делает три запроса: читает список сделок, запрашивает несуществующую сделку и обращается по пути с опечаткой. Каждый отказ разбирается по error.code, а не по тексту error.message: язык сообщения заранее не известен. На RATE_LIMITED клиент ждёт столько секунд, сколько указано в заголовке Retry-After, и повторяет запрос не больше двух раз.

javascript
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 — объект.

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.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:

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. Некоторые отказы передают срок только заголовком — в одиночном ответе опирайтесь на него. У подошибки внутри успешного пакетного ответа отдельного заголовка нет: если срок передан, берите его из 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.

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

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 Тип Описание
Поле 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.

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 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 — Лимиты, очереди и паузы. Доставка целевого вызова и безопасность повтора чтения или записи собраны отдельно на странице Что безопасно повторять.

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