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

Изменения API: 1 сентября 2026

← Журнал изменений · Сентябрь 2026

FIX-0901-1: отказ по правам на доске спринта приходит как 403, а не как ошибка платформы

Было

Ключ, у пользователя которого нет доступа к скрам-проекту, получал на колонки доски спринта ответ 422 BITRIX_ERROR — тот же класс, которым платформа Вайбкод сообщает о бизнес-ошибке Битрикс24. Отличить «нет прав» от «что-то временно не так на портале» по коду было нельзя, и запрос повторяли, хотя состояние стабильное и повтор ничего не меняет.

HTTP 422
{ "success": false, "error": { "code": "BITRIX_ERROR", "message": "Access denied", "b24Code": "0" } }

Стало

GET /v1/scrum/sprints/{sprintId}/stages и POST /v1/scrum/sprints/{sprintId}/stages отвечают на отказ по правам кодом 403 BITRIX_ACCESS_DENIED — тем же, что описан в общем справочнике ошибок. Это сигнал «не повторять, а выдать пользователю доступ к скрам-проекту».

HTTP 403
{ "success": false, "error": { "code": "BITRIX_ACCESS_DENIED", "message": "Access denied" } }

Успешные ответы не меняются: список колонок по-прежнему приходит с HTTP 200, созданная колонка — с HTTP 201. Не меняется и ответ на несуществующий спринт: он остаётся 404 ENTITY_NOT_FOUND.

BC-0901-2: пустая фотография сотрудника отклоняется при обновлении

Поддержка старого формата до: не предусмотрена

Было

При UPDATE сотрудника пустая строка или строка только из пробельных символов в personalPhoto доходила до Битрикс24 как команда снять текущую фотографию. Одиночный PATCH /v1/users/:id возвращал 200 success:true, хотя фотография удалялась.

Стало

Такие значения отклоняются до вызова Битрикс24 с INVALID_PARAMS. Одиночный PATCH /v1/users/:id возвращает 400 success:false; пакетные маршруты сохраняют свои конверты ошибок. На глобальном POST /v1/batch так же отклоняется personalPhoto: null: кодировщик подзапроса превращает null в пустое значение строки запроса, то есть в ту же команду снять фотографию. На PATCH /v1/users/:id и в пакете по сущности null нового отказа не получает. Чтобы оставить фотографию без изменений, не передавайте personalPhoto. На CREATE в POST /v1/users пустая строка не получает новый отказ; рабочая inline-пара и отдельная проверка приглашения сотрудника не изменились.

FIX-0901-3: описания лимита частоты называют долю процесса, а не только общий кап

Было

Описания POST /v1/feedback в путеводителе GET /v1/guide, в блоке feedback.limits ответа GET /v1/me и в схеме GET /v1/openapi.json называли лимит числом — «5 запросов в минуту». Запросы обслуживает несколько процессов платформы, каждый держит свою долю лимита, поэтому клиенту приходило меньше обещанного, и заголовок X-RateLimit-Limit расходился с описанием. То же расхождение было на страницах справки по отправке обращения и загрузке вложения, а в схеме — у пяти операций раздела Коворк.

Стало

Описания называют число и рядом поясняют, что предел делится между процессами платформы, а действующее значение приходит в заголовке X-RateLimit-Limit. У операций Коворк в схеме описание отказа 429 приведено к той же форме, что уже стоит на страницах справки. Одна общая строка 429 на странице обращений разделена на две — у создания обращения и у загрузки вложения счётчики разные.

Влияние на интеграторов

Значения лимитов не менялись, поведение прежнее. Клиент, который закладывал число из описания, получал отказ раньше ожидаемого — теперь источник действующего значения назван явно: читайте X-RateLimit-Limit из ответа.

BC-0901-4: обновление комментария задачи отклоняет поля только для чтения

Поддержка старого формата до: не предусмотрена

Было

На старой карточке PATCH /v1/tasks/:taskId/comments/:id, которому клиент возвращал объект комментария из GET с изменённым message, мог ответить HTTP 200 и передать в Битрикс24 поля только для чтения. Элемент POST /v1/tasks/:taskId/comments/batch мог аналогично завершиться с success:true.

Стало

Single PATCH с полем только для чтения возвращает HTTP 400 READONLY_FIELD до обращения к Битрикс24. Для успешного обновления комментария старой карточки запросом только с {message} статус ответа остаётся HTTP 200; на новой карточке сохраняется 410 GONE.

В custom batch верхний ответ остаётся HTTP 200 с success:true, а запрещённый элемент получает success:false и error:READONLY_FIELD, не отправляется в Битрикс24 и не мешает выполнению валидных соседних элементов.

Что делать интеграторам

Для single PATCH формируйте новое тело только с {message} и не отправляйте обратно поля ответа id, taskId, authorId, createdAt или их aliases. В custom batch оставьте lowercase id селектором комментария и передавайте рядом только message: удалите дополнительный ID и остальные поля только для чтения. Клиентам, которые уже отправляют только документированные writable-поля, ничего менять не нужно.

FIX-0901-5: ошибка 401 TOKEN_MISSING называет причину на всех маршрутах V1

Было

Причину, по которой у личного ключа нет вебхука Битрикс24, ответ называл только на маршрутах сущностей (/v1/deals, /v1/tasks и т. п.) и в POST /v1/batch. Остальные семейства — чаты, списки, почта, скрам, заметки, открытые линии, боты, пользовательские поля и прочие — отвечали плоским текстом «API key has no tokens configured.» без поля error.details. Один и тот же сломанный ключ на /v1/deals получал объяснение, а на /v1/chats — текст, из которого не следовало ничего.

Стало

Ответ 401 TOKEN_MISSING устроен одинаково на всех маршрутах V1: личный ключ получает причину в error.details.reason и текст с нужным действием, ключ приложения — указание на недостающий OAuth-шаг. Ответ остаётся HTTP 401, набор кодов не менялся.

Влияние на интеграторов

Разбирайте error.details.reason — контрактом является он, а не error.message. Текст сообщения на этих маршрутах изменился, и код, сравнивающий его со строкой «API key has no tokens configured.», перестанет попадать; такой разбор был ненадёжен и раньше. Причины перечислены в ответе GET /v1/me в блоке b24Credentials.

FIX-0901-6: прямую загрузку можно повторить после удаления объекта

Было

После успешного DELETE /v1/storage/objects/{key} новая прямая загрузка POST /v1/storage/objects/upload с тем же ключом отвечала 409 STORAGE_KEY_DELETED до физической уборки объекта через 30 дней.

Стало

Для объекта приложения в состоянии COMPLETED без multipart-сессии прямая загрузка отвечает HTTP 200, сохраняет те же id и visibility и записывает новое содержимое. Удалённая публичная ссылка с этим id снова становится доступна с новыми байтами. Это не восстановление прежнего содержимого.

Путь B остаётся отключённым и отвечает 503 STORAGE_PRESIGNED_UPLOAD_DISABLED без URL. Путь C, удалённые объекты PENDING и объекты с multipart-сессией по-прежнему отвечают 409 STORAGE_KEY_DELETED. Сам DELETE и последующее чтение без новой подходящей прямой загрузки по-прежнему дают 410 STORAGE_OBJECT_DELETED в течение периода хранения.

Влияние на интеграторов

Менять запрос не нужно. После удаления подходящего объекта отправьте новые байты обычной прямой загрузкой с тем же ключом.

FIX-0901-7: временный отказ склада образов больше не помечает galaxy-приложение сломанным

Было

POST /v1/infra/servers с полем source, упёршийся в 502 GALAXY_BASE_IMAGE_UNAVAILABLE или в нехватку места на хосте, переводил слот в status=error — при том что тот же отказ на POST /v1/infra/servers/:id/deploy статус не трогал, а текст ошибки обещал, что слот, контейнер и том /data целы. Повтор деплоя error не снимал: GET продолжал отдавать сломанный слот, и приложение переставало удерживать свой хост от засыпания.

Стало

Оба временных отказа оставляют слот в status=provisioning; причина по-прежнему видна в provisionError ответа GET /v1/infra/servers/:id. Повтор того же деплоя на слоте, сломанном такой причиной, снимает error в начале попытки. Если слот бросить, платформа через ~20 минут всё равно завершит его ошибкой, но сохранит настоящую причину вместо общей DEPLOY_INCOMPLETE. Подсказки в error.hint, чеклист в /v1/me и документация больше не называют срок «2–3 минуты»: окно недоступности склада бывает и часовым.

BC-0901-8: Обычный чат-бот блокирует удаление ключа

Поддержка старого формата до: не предусмотрена

Было

Удаление API-ключа могло удалить привязанного обычного чат-бота вместе с токеном, нужным для штатного снятия регистрации на портале.

Стало

Удаление ключа с обычным чат-ботом, включая отключённую строку Bot Platform, возвращает 409 KEY_HAS_LINKED_AGENT. Возьмите числовой bitrixBotId из details.bots ответа 409, затем снимите регистрацию через DELETE /v1/bots/:botId или перенесите бота на другой ключ.

FIX-0901-9: загрузка файлов и AI-запросы получили отказ 429 при перегрузке памяти

Было

POST /v1/files/upload (до 70 МБ), POST /v1/note/documents/{id}/files (до 40 МБ), POST /v1/chat/completions (до 30 МБ) и POST /v1/audio/transcriptions (аудио до 25 МБ) принимали любое число одновременных крупных тел. При нескольких параллельных загрузках предельного размера запросы могли обрываться без ответа — в том числе чужие, идущие в этот момент.

Ещё одно наблюдаемое отличие: запрос без ключа или с неверным ключом на этих маршрутах мог получить 400 (неразобранный JSON), 413 (размер) или 415 (тип данных) — то есть ответ о теле раньше ответа о ключе.

Стало

Одновременные тела крупнее 1 МиБ ограничены общим объёмом. Запрос сверх лимита получает 429 с кодом LARGE_BODY_BACKEND_BUSY и заголовком Retry-After: 5 — до обращения к Bitrix24, то есть без побочных эффектов, и одинаково независимо от того, объявлен ли Content-Length:

JSON
{
  "success": false,
  "error": {
    "code": "LARGE_BODY_BACKEND_BUSY",
    "message": "Too many large request bodies are being processed. Retry in a few seconds.",
    "retryAfter": 5
  }
}

На OpenAI-совместимых POST /v1/chat/completions, POST /v1/ai/chat/completions и POST /v1/audio/transcriptions (+ POST /v1/ai/audio/transcriptions) конверт — как у остальных ответов этой поверхности, то есть без success и с кодом в нижнем регистре:

JSON
{
  "error": {
    "message": "Too many large request bodies are being processed. Retry in a few seconds.",
    "type": "rate_limit_exceeded",
    "code": "large_body_backend_busy",
    "retryAfter": 5
  }
}

Запрос без ключа или с неверным ключом теперь получает 401 на всех этих маршрутах — проверка ключа идёт до чтения тела. Успешные запросы и тела до 1 МиБ не затронуты; повтор через 5 секунд проходит штатно.

⚠️ На транскрипциях лимит считается по объявленному Content-Length. Загрузка без него (Transfer-Encoding: chunked) в общий объём не попадает и ограничена только собственным потолком в 25 МБ на файл.

FIX-0901-10: создание Hermes-агента больше не падает из-за размера стартового пакета

Было

Создание Hermes-агента завершалось ошибкой сразу после шага выдачи сервера. Виртуальная машина не создавалась вовсе, агент оставался в состоянии ошибки с кодом инцидента, а поле сервера в карточке оставалось пустым. Повторные попытки давали тот же результат. Причина — стартовый пакет для облака вырос и перестал помещаться в предел, который облако отводит на такие пакеты.

Стало

Служебные комментарии больше не уезжают в облако вместе с установочным скриптом, поэтому стартовый пакет снова помещается в предел с большим запасом, и виртуальная машина создаётся. Сам установочный скрипт и все прочие способы его доставки не изменились. Дополнительно перед обращением к облаку добавлена проверка размера: если пакет когда-нибудь снова вырастет сверх предела, запрос в облако не отправляется вовсе, а Вайбкод возвращает привычную ошибку провайдера с кодом инцидента.

NEW-0901-11: редактор бизнес-процессов доступен через API

Появился раздел /v1/workflow-designer/* — работа с шаблонами нового редактора бизнес-процессов на языке самого редактора: блоки, связи, каталог типов блоков, проверка графа, черновики и публикация. Это не то же самое, что /v1/bizproc-templates: тот раздел читает и пишет строки шаблонов, где граф лежит непрозрачным блоком.

Требуется scope bizprocdesigner — отдельный от bizproc. Добавьте его в ключ и перевыпустите ключ.

Запись идёт двумя шагами. POST /v1/workflow-designer/templates/{id}/draft сохраняет черновик: работающий бизнес-процесс продолжает выполняться по опубликованной версии, и черновик можно показать человеку, переписать или бросить. POST /v1/workflow-designer/templates/{id}/publish делает черновик рабочей версией — необратимо, и вместе с публикацией удаляются все черновики шаблона, включая чужие. Публикация требует draftFingerprint из GET /v1/workflow-designer/templates/{id}: так публикуется ровно тот граф, который вы прочитали и показали человеку, а переписанный кем-то черновик отбивается вместо тихой подмены.

Начинать работу стоит с GET /v1/workflow-designer/capabilities: он отвечает, доступен ли редактор этому порталу и этому ключу, а если нет — называет причину (DESIGNER_NOT_SUPPORTED — портал ещё не обновлён до версии, отдающей редактор через API, либо модуля нет, DESIGNER_UNAVAILABLE — редактор выключен или не входит в тариф, SCOPE_DENIED — у ключа нет scope, DESIGNER_REQUIRES_WRITE_KEY — ключ только на чтение, а операция пишет, DESIGNER_PROBE_FAILED — проверка не завершилась и состояние редактора неизвестно). Различить эти состояния по отказу самих методов нельзя, поэтому проверка вынесена в отдельный вызов.

Ключ только на чтение раздел обслуживает: граф, каталог блоков, поля документа, инструкцию портала и validate читает и он. DESIGNER_REQUIRES_WRITE_KEY приходит только на трёх пишущих операциях — создание шаблона, сохранение черновика и публикация.

Затронутые эндпоинты: GET /v1/workflow-designer/capabilities, POST /v1/workflow-designer/templates, GET /v1/workflow-designer/templates/{id}, GET /v1/workflow-designer/templates/{id}/brief, GET /v1/workflow-designer/templates/{id}/blocks, GET /v1/workflow-designer/templates/{id}/blocks/{blockId}, GET /v1/workflow-designer/templates/{id}/document-fields, POST /v1/workflow-designer/templates/{id}/validate, POST /v1/workflow-designer/templates/{id}/draft, POST /v1/workflow-designer/templates/{id}/publish

BC-0901-12: удаление сервера удаляет и привязанного к нему агента

Поддержка старого формата до: не предусмотрена

Было

DELETE /v1/infra/servers/:id удалял только сервер. Агент, который на нём работал, оставался в платформе Вайбкод как живой: его состояние по-прежнему читалось «работает», бот оставался зарегистрированным на портале Битрикс24, ключ агента — действующим, а ссылка агента вела на сервер, которого уже нет.

Стало

Вместе с сервером удаляется и привязанный к нему агент. Запись агента помечается удалённой, бот снимается с портала Битрикс24, ключ агента отзывается, карточка приложения снимается с каталога Битрикс24. Успешное удаление отвечает прежним HTTP 200 с телом {"success": true}.

Появился один новый исход. Если в момент вызова того же агента параллельно менял другой запрос, ответ — 409 AGENT_DELETE_CONFLICT в обычной форме отказа {"success": false, "error": {"code": "...", "message": "..."}}. Тогда не удалён и сам сервер: он продолжает работать и тарифицироваться, а запрос нужно повторить.

Что делать интеграторам

Сценарий, который рассчитывал пережить удаление сервера и переиспользовать агента, надо перестроить: агент создаётся заново после создания нового сервера. Код AGENT_DELETE_CONFLICT обрабатывается как повторяемый — сервер цел, повторите тот же запрос. Удаление сервера без агента и удаление сервера вида GALAXY_APP работают как раньше.