Для AI-агентов: markdown этой страницы — /docs-content/errors/request.md индекс документации — /llms.txt
Запрос и данные
Подробный разбор кодов, которыми API Вайбкод отвечает на некорректное тело запроса, недостающий фильтр и обращение к несуществующей записи.
Сводная таблица всех кодов API Вайбкод — Коды ошибок.
`VALIDATION_ERROR` (400)
Тело или query-параметры не прошли проверку схемы. Для большинства V1-эндпоинтов обработка реализована через Zod, поэтому сообщение содержит конкретные поля с проблемами.
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "fields.title: Required; fields.stageId: Expected string, received number"
}
}
Причины:
- Отсутствуют обязательные поля.
- Тип значения не соответствует схеме (строка вместо числа, неверный формат даты).
- Отсутствует заголовок
Content-Type: application/json. Тело, которое не разбирается как JSON, отклоняется отдельными кодами —INVALID_JSON_BODY,FST_ERR_CTP_INVALID_JSON_BODYилиfst_err_ctp_invalid_json_bodyна маршрутах AI Router. Какой из них придёт, зависит от маршрута — см. сводную таблицу кодов.
Решение:
- Сверить тело запроса со схемой эндпоинта в обзоре API или на странице конкретного эндпоинта.
- Числа передавать без кавычек, даты — в формате ISO 8601 (
2026-04-29T10:00:00). - Добавить заголовок
Content-Type: application/json.
`INVALID_PARAMS` (400)
Битрикс24 или обработчик маршрута нашёл некорректное значение параметра. Ошибки Битрикс24 формата INVALID_PARAMS: ... приходят под этим же кодом.
{
"success": false,
"error": {
"code": "INVALID_PARAMS",
"message": "Path parameter :id must be a positive integer"
}
}
Причины:
- Некорректное значение path-параметра (например, не число там, где ожидается число).
- Битрикс24 отверг параметр запроса (например, неподходящее значение enum-поля).
- В поле, объявленное скаляром (
string,number,boolean,date,datetime), на записи передан объект или массив. Такое значение Битрикс24 сохраняет как строкуArray, то есть данные теряются без ошибки, поэтому запрос отклоняется до вызова. Проверка работает на создании и обновлении сущностей по путям/v1/<entity>, на обеих поверхностях пакетной записи и на импорте. - При обновлении сотрудника в
personalPhotoпередано значение, из которого Битрикс24 не может собрать файл: пустая строка, строка только из пробельных символов, литералfalse, логическиеtrueиfalse, число0, строка, в которой меньше двух символов алфавита base64, inline-пара[имя файла, base64], содержимое которой — одно из перечисленного, и любая другая структура, у которой второго значения нет, оноnullили нечитаемо (вложенная{fileData: [...]}, пустой массив, массив из одного элемента, явныйnullили структура на месте содержимого). Каждое из них Битрикс24 воспринимает как команду снять текущую фотографию, поэтому Вайбкод отклоняет значение до вызова. Чтобы сохранить фотографию, не передавайте поле, а чтобы снять её — вызовитеDELETE /v1/users/:id/personal-photo.
Границы проверок значения:
- Имя, которого нет в схеме сущности (пользовательские поля
UF_*,propertyNNN, опечатка), не проверяется — у него нет объявленного типа. - Число и логическое значение в строковом поле принимаются: Битрикс24 сохраняет
123456и1, значение не теряется. Проверка формы также принимаетnull. Исключение —users.personalPhotoна UPDATE: логическиеtrueиfalse, число0и остальные значения, из которых Битрикс24 не соберёт файл (пустая строка, строка только из пробельных символов, литералfalse, строка, в которой меньше двух символов алфавита base64, и inline-пара с таким же содержимым), отклоняются сINVALID_PARAMSна всех трёх поверхностях обновления — на одиночномPATCH /v1/users/:id, в пакетной записи по одной сущности и вPOST /v1/batch. Отдельно от них стоитnull: он отклоняется только на UPDATE вPOST /v1/batch, потому что кодировщик общего пакета превратил бы его в пустую команду. На одиночном PATCH и в пакетной записи по одной сущностиnullдо ветки удаления не доходит и фотографию не снимает, поэтому там он не отклоняется. - Для остальных скалярных типов проверяется соответствие ЗНАЧЕНИЯ объявленному типу, а не только его форма. Числовое поле принимает JSON-число или числовую строку с точкой как разделителем дробной части (
"1234.56"); ведущие и конечные пробелы вокруг такой строки игнорируются (" 1234.56 "принимается), а запятая ("1234,56"— конвенция ru/de/fr/es/it/br) — нет: значение отклоняетсяINVALID_PARAMSс явным указанием на точку, а не приводится к ней молча. Булево поле принимает JStrue/falseлибо распознаваемые строковые формы без учёта регистра и с обрезкой пробелов ("true"/"false","yes"/"no","y"/"n","1"/"0") — JSON-число1или0такой формой не считается и тоже отклоняется. Числовые поляtasks.priorityиtasks.statusдополнительно проверяются на принадлежность объявленному перечню значений — значение вне перечня отклоняетсяINVALID_PARAMS; у остальныхenum-полей реестра перечень не закрытый, и такая проверка на них не выполняется. Пустая строка — исключение, которое работает ТОЛЬКО в строковом поле (см. выше): в числовом и булевом поле она не очищает значение, а отклоняется как несоответствие типа, потому что иначе Битрикс24 привёл бы её к0или кfalseпод видом успеха. Поля, объявленныеdateиdatetime, эту проверку значения пока не проходят: структурное значение (объект, массив) в них по-прежнему отклоняется (см. выше), а некорректная по формату строка — нет, она уходит в Битрикс24 как есть. - Строковое поле с объявленным ограничением длины (сегодня это только
order-statuses.color, предел 10 символов) отклоняетINVALID_PARAMSзначение длиннее предела вместо того, чтобы молча обрезать его до ширины колонки базы. У строкового поля без объявленного предела проверка длины не выполняется. - Поля, объявленные как
object,arrayи многозначные, структуру принимают штатно. - Отдельное исключение — поле-файл:
users.personalPhotoпринимает на записи массив ровно из двух непустых строк[имя файла, base64], и только на одиночныхPOST /v1/usersиPATCH /v1/users/:id. Любая другая структура в нём (в том числе вложенная{fileData: [...]}, которую Битрикс24 принимает успехом и при этом снимает фотографию) и та же форма на пакетных маршрутах отклоняются: подзапрос пакета едет строкой запроса под общим потолком тела, и за пределом длины значение обрезалось бы, отвечая при этом успехом. На UPDATE через одиночный PATCH или любой из двух пакетных маршрутов сINVALID_PARAMSотклоняется любое значение, из которого Битрикс24 не соберёт файл: пустая строка, строка только из пробельных символов, литералfalse, логическиеtrueиfalse, число0, строка, в которой меньше двух символов алфавита base64, и та же inline-пара, если её содержимое — одно из перечисленного (форма из двух непустых строк ничего не говорит о том, что содержимое декодируется). Чтобы сохранить фотографию, не передавайте поле, а чтобы снять её — вызовитеDELETE /v1/users/:id/personal-photo. На CREATE вPOST /v1/usersпустая строка не получает новый отказ. Подробности — Обновить сотрудника. ОбёрткаPOST /v1/users/inviteпринимает ту же inline-пару, переводит имя поля и проверяет её отдельно с собственным кодомPERSONAL_PHOTO_INVALID, но потолок тела у неё остался ОБЩИМ (1 МиБ против 40 МиБ у одиночных), поэтому снимок с телефона там упрётся в размер: для настоящей фотографии беритеPOST /v1/usersилиPATCH /v1/users/:id. - Форма отказа различается по поверхности, и различаются не только поля, но и охват. Общий пакетный вызов отклоняет ТОЛЬКО свой подвызов: отказ приходит в
data.errors["<id вызова>"]отдельными полямиcodeиmessage, соседние подвызовы выполняются. Если все подвызовы отклонены до отправки, общий ответ сохраняет400 INVALID_REQUEST. Пакетная запись по одной сущности (POST /v1/{entity}/batch) и импорт отклоняют ВЕСЬ запрос: приходит400с кодомBATCH_ITEM_VALIDATIONилиIMPORT_ITEM_VALIDATION, а номер элемента иINVALID_PARAMS— внутриmessageвидаItem at index N: INVALID_PARAMS — …. Ниdata, ни поэлементныхresultsв таком ответе нет, и в Битрикс24 не уходит ни одной записи: проверка идёт до отправки. - Отдельные обособленные маршруты записи проверку пока не проходят:
POST /v1/addresses,PATCH /v1/addresses, комментарии задач (/v1/tasks/:taskId/comments),POST /v1/doc-templates, настройки открытых линий и товарные строки (/v1/{сущность}/:id/products). Там прежнее поведение сохраняется.
Решение:
- Проверить страницу эндпоинта: какие значения допустимы для каждого параметра.
- Для
filterиспользовать список полей изGET /v1/<entity>/fields.
`MISSING_REQUIRED_FILTER` (400)
Не передан обязательный фильтр на list-эндпоинте, который требует контекста.
{
"success": false,
"error": {
"code": "MISSING_REQUIRED_FILTER",
"message": "GET /v1/timelines requires filter fields: entityType, entityId. Example: GET /v1/timelines?filter[entityType]=...&filter[entityId]=..."
}
}
Причины:
- Список записей таймлайна требует пары родительских идентификаторов
entityType+entityId. - Список товаров и разделов каталога требует
iblockId, а список значений списочного свойства —propertyId. - Агрегация дел требует сужающего фильтра: пара
ownerTypeId+ownerId, либоresponsibleId, либо граница по дате наcreatedAt/updatedAt/deadline. Здесь требование не «все перечисленные», а «любое одно» — Битрикс24 не успевает посчитать все дела аккаунта за отведённое на вызов время. Требование включается платформой отдельно на каждый аккаунт. Проверить состояние —data.aggregateFilterRequirement.enforcementв ответеGET /v1/activities/fields.
Проверка выполняется до обращения к Битрикс24 и действует на GET /v1/{entity}, POST /v1/{entity}/search и POST /v1/{entity}/aggregate.
Решение:
- Добавить обязательные параметры фильтра, перечисленные в
messageили на странице эндпоинта.
`BATCH_LIMIT_EXCEEDED` (400)
Запрос превышает лимит элементов в массивной операции. На уровне /v1/batch лимит проверяется через INVALID_REQUEST со ссылкой на Array must contain at most 50 element(s). На доменных эндпоинтах массовых операций (например, chats, task-comments) — отдельный код BATCH_LIMIT_EXCEEDED.
{
"success": false,
"error": {
"code": "BATCH_LIMIT_EXCEEDED",
"message": "Maximum 50 dialogs per bulk request (Bitrix24 batch limit)."
}
}
Причины:
- В массиве больше 50 элементов.
Решение:
- Разделить операцию на несколько запросов по 50 элементов.
- Использовать batch-запросы для последовательных вызовов с одного ключа.
`ENTITY_NOT_FOUND` (404)
Запись CRM-сущности с указанным id не существует или была удалена.
{
"success": false,
"error": {
"code": "ENTITY_NOT_FOUND",
"message": "Элемент не найден"
}
}
Причины:
- Запись с таким
idдействительно не существует. - Запись была удалена параллельным процессом.
- Перепутана сущность: запрос идёт на
/v1/deals/:id, а ID — от лида.
Решение:
- Проверить наличие записи через list-эндпоинт сущности.
- Восстановить из корзины Битрикс24, если запись была удалена недавно (через интерфейс портала).