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

Изменения API: 26 августа 2026

← Журнал изменений · Август 2026

FIX-0826-1: socnetGroupId работает на вложенных ресурсах списков рабочих групп

Было

Параметр socnetGroupId учитывался только на самих списках — GET /v1/lists и GET /v1/lists/{iblockId}. На вложенных ресурсах он принимался и молча терялся: GET /v1/lists/{iblockId}/elements, поля, разделы, файлы свойства и все удаления при iblockTypeId=lists_socnet уходили в Битрикс24 без идентификатора группы. Битрикс24 искал инфоблок вне рабочей группы, не находил его и отвечал ошибкой о неверном типе инфоблока — клиент видел 422, хотя группу в запросе указал.

Стало

socnetGroupId доезжает до Битрикс24 со всех эндпоинтов семейства /v1/lists: в строке запроса на чтениях и удалениях, в теле запроса на создании и изменении. Список элементов, полей и разделов списка рабочей группы возвращается так же, как у обычного списка.

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

Менять запросы не нужно. Если обход списков рабочих групп был построен на прямых вызовах lists.* из-за этой ошибки, теперь он собирается на эндпоинтах платформы Вайбкод.

BC-0826-2: exec в galaxy-приложение отвечает CONTAINER_NOT_READY вместо мнимого успеха

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

Было

POST /v1/infra/servers/{id}/exec у galaxy-приложения, контейнер которого ещё не поднят, отвечал 200 и success: true, а внутри отдавал exitCode: 1 и текст движка контейнеров в поле stderr. Команда не выполнялась, но ответ выглядел успешным, и клиенту приходилось разбирать сообщение об ошибке строкой, чтобы понять причину.

Стало

Такой вызов отвечает 502 с кодом CONTAINER_NOT_READY и подсказкой hint, которая ведёт к выкладке приложения. Подробности движка контейнеров наружу больше не возвращаются. Клиентам, которые ожидали 200, нужно обрабатывать CONTAINER_NOT_READY как сигнал сначала выложить приложение и затем повторить команду. Разбор ответа строкой не нужен: причина названа кодом. Если host-agent ещё не поддерживает безопасный container_exec, платформа не запускает legacy-команду и отвечает 502 EXEC_FAILED; после обновления агента вызов можно повторить. Ответы успешных команд на поддерживаемой версии агента не изменились.

FIX-0826-3: 404 для имён методов Битрикс24 указывает на маршрут V1

Было

Запросы GET /v1/catalog.product.list, GET /v1/crm.deal.list, GET /v1/crm.user.list и GET /v1/crm.deal.search возвращали общий 404 ROUTE_NOT_FOUND только с указателем на GET /v1/guide. Агенту приходилось самостоятельно искать замену среди маршрутов V1.

Стало

Эти запросы по-прежнему возвращают 404 ROUTE_NOT_FOUND и не вызывают метод Битрикс24, но теперь error.details содержит причину BITRIX_METHOD_AS_PATH, исходное имя метода, объект suggestedEndpoint с правильными HTTP-методом и путём и объект guide с указателем на GET /v1/guide. Подсказки ведут на GET /v1/catalog-products, GET /v1/deals, GET /v1/users или POST /v1/deals/search.

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

Не формируйте пути V1 из имён методов Битрикс24. При error.details.reason = BITRIX_METHOD_AS_PATH повторите запрос по suggestedEndpoint, а требования к параметрам уточните через guide.

FIX-0826-4: Нейтральное смещение в английском описании createdDate

Было

GET /v1/task-time/fields использовал для createdDate пример смещения, специфичный для одного региона.

Стало

Английское описание использует нейтральное смещение +00:00.

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

Действий не требуется. Изменился только пример в описании поля.

NEW-0826-5: создание приложения из десктопа Коворк/Код — две новые ручки

Приложение платформы Вайбкод теперь создаётся прямо из десктопа, без похода в кабинет за ключом.

GET /v1/cowork/applications/defaults отдаёт всё, что мастеру нужно до первого вопроса человеку: пресеты «какие данные портала нужны приложению», режим доступа, которым аккаунт снабжает новые ключи по умолчанию, остаток квоты ключей и параметры сервера для последующего вызова POST /v1/infra/servers. Ручка только читает и ничего не создаёт. Пресет несёт идентификатор и набор скоупов, но не подписи: платформа отвечает за состав пресета, а формулировку клиент локализует по устойчивому идентификатору. Признак placement имеет три значения, а не два: galaxy-preferred — обычный вердикт аккаунта, которому политика разрешает оба размещения, и в него же понижается galaxy у аккаунта на бесплатном тарифе. Когда создание выключено настройкой платформы, ручка отвечает 200 с полем available: false, а не отказом: мастер прячет пункт меню заранее, вместо того чтобы упереться в отказ после ввода имени.

POST /v1/cowork/applications создаёт личное приложение и чеканит его личный ключ, который возвращается один раз. Сервер при этом не создаётся: у личного приложения его нет по определению, он доращивается публикацией и сам привязывается к карточке. Карточка в ответе несёт тот же набор полей, что витрина приложений, поэтому объект «приложение» у клиента остаётся один. Часть признаков эта ручка не наполняет — закрепление, сохранённые версии исходников и идущую операцию читайте из витрины.

Заголовок Idempotency-Key обязателен. Повтор с тем же телом отвечает 201, заголовком Idempotent-Replayed: true и rawApiKey: null — сырой ключ хранится необратимо и повторно не выдаётся. Потерянный ключ этим же ключом Коворк/Код не перевыпускается — идентификатора выданного ключа в ответе нет, поэтому сохраняйте его сразу, а взамен потерянного создавайте приложение заново с новым значением заголовка. Тот же заголовок с другим телом отвечает 409 IDEMPOTENCY_KEY_BODY_MISMATCH; отпечаток берётся с нормализованного тела, поэтому переставленный порядок полей и другой порядок скоупов повтор не ломают.

Скоупы Битрикс24 обязательны и дефолта не имеют. Выданный ключ несёт права на инфраструктуру и хранилище плюс запрошенные скоупы Битрикс24 и намеренно НЕ несёт прав на ИИ и веб-поиск: приложение, созданное этой ручкой, не расходует кошелёк платформы на ИИ.

Обе ручки требуют скоуп vibe:cowork и активную подписку Коворк/Код. Ключ подписки, выписанный для сторонней агентной программы, к ним не допускается — 403 COWORK_HARNESS_KEY_FORBIDDEN.

FIX-0826-6: график работ отвечает понятной ошибкой, когда не передан обязательный id

Было

GET /v1/workday/schedule без обязательного id уходил в Битрикс24 и возвращал 422 BITRIX_ERROR с текстом Битрикс24 о ненайденном параметре. Ни имени параметра в понятном виде, ни указания на этот метод в ответе не было, а машинное описание метода не объявляло id обязательным, поэтому сгенерированный клиент сам собирал такой вызов.

Стало

Запрос без id отклоняется до обращения к Битрикс24 и возвращает 400 MISSING_REQUIRED_PARAMS с указанием, что нужен идентификатор графика, а не пользователя. В машинном описании метода id объявлен обязательным query-параметром.

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

Запрос с id работает как раньше. Если вызов делался без id, вместо 422 придёт 400 — ответ и раньше был ошибкой, менять рабочие запросы не требуется.

NEW-0826-7: приложению не выдаётся право `vibe:infra` на портале с выключенной инфраструктурой

Было

POST /v1/apps со списком прав, где есть vibe:infra, создавал приложение и его ключ с этим правом независимо от того, включена ли инфраструктура на портале.

JSON
POST /v1/apps
{ "title": "My app", "scopes": ["crm", "vibe:infra"] }

HTTP 201
{ "success": true, "data": { "scopes": ["crm", "vibe:infra"] } }

Стало

Если администратор портала выключил работу с серверами, запрос с этим правом отвечает 403 INFRA_DISABLED_FOR_PORTAL, приложение не создаётся.

JSON
POST /v1/apps
{ "title": "My app", "scopes": ["crm", "vibe:infra"] }

HTTP 403
{
  "success": false,
  "error": {
    "code": "INFRA_DISABLED_FOR_PORTAL",
    "message": "Infrastructure is disabled on this portal — the vibe:infra scope cannot be granted"
  }
}

Успешный путь не меняется: на портале с включённой инфраструктурой на тот же запрос ответ по-прежнему HTTP 201. Запрос без этого права проходит и на закрытом портале — там право просто не дописывается по умолчанию, отказа не будет.

NEW-0826-8: право `vibe:infra` нельзя добавить приложению через правку его прав

Было

PATCH /v1/apps/:id со списком прав, куда дописано vibe:infra, проставлял это право парным ключам приложения независимо от того, включена ли инфраструктура на портале. Через этот путь ключ получал доступ к серверам там, где создание такого ключа отказом закрыто.

JSON
PATCH /v1/apps/{id}
{ "scopes": ["crm", "vibe:infra"] }

HTTP 200
{ "success": true, "data": { "scopes": ["crm", "vibe:infra"] } }

Стало

Если администратор портала выключил работу с серверами, попытка добавить право отвечает 403 INFRA_DISABLED_FOR_PORTAL, права приложения и его ключей не меняются.

JSON
PATCH /v1/apps/{id}
{ "scopes": ["crm", "vibe:infra"] }

HTTP 403
{
  "success": false,
  "error": {
    "code": "INFRA_DISABLED_FOR_PORTAL",
    "message": "Infrastructure is disabled on this portal — the vibe:infra scope cannot be granted"
  }
}

Успешный путь не меняется: на портале с включённой инфраструктурой на тот же запрос ответ по-прежнему HTTP 200. Правка приложения, которое это право уже несёт, проходит и на закрытом портале, снятие права разрешено всегда.

NEW-0826-9: управление галактическим сервером закрыто, пока галактики выключены на портале

Было

Флаг галактик проверялся только при создании. Уже созданным галактическим сервером — POST /v1/infra/servers/:id/wake, PATCH /v1/infra/servers/:id/sleep и остальные изменяющие операции — можно было управлять и после того, как администратор портала выключил галактики.

JSON
POST /v1/infra/servers/{id}/wake

HTTP 200
{ "success": true }

Стало

Пока галактики на портале выключены, изменяющие операции над таким сервером отвечают 403 GALAXY_DISABLED.

JSON
POST /v1/infra/servers/{id}/wake

HTTP 403
{
  "success": false,
  "error": {
    "code": "GALAXY_DISABLED",
    "message": "Galaxy feature is not enabled for this portal"
  }
}

На портале с включёнными галактиками ответ по-прежнему HTTP 200. Чтение (GET), обновление статуса (POST /v1/infra/servers/:id/refresh) и удаление сервера остаются доступными всегда: уйти из пилота и убрать за собой можно и после выключения. Обычных серверов правило не касается.

NEW-0826-10: право `vibe:infra` не выдаётся на портале с выключенной инфраструктурой

Было

POST /v1/keys и PATCH /v1/keys/:id выдавали ключу право vibe:infra независимо от того, включена ли инфраструктура на портале: доступность проверял только интерфейс кабинета.

JSON
PATCH /v1/keys/{id}
{ "scopes": ["crm", "vibe:infra"] }

HTTP 200
{ "success": true, "data": { "scopes": ["crm", "vibe:infra"] } }

Стало

Если администратор портала выключил работу с серверами, попытка добавить право отвечает 403 INFRA_DISABLED_FOR_PORTAL.

JSON
PATCH /v1/keys/{id}
{ "scopes": ["crm", "vibe:infra"] }

HTTP 403
{
  "success": false,
  "error": {
    "code": "INFRA_DISABLED_FOR_PORTAL",
    "message": "Infrastructure is disabled on this portal — the vibe:infra scope cannot be granted"
  }
}

Успешный путь не меняется: на портале с включённой инфраструктурой на тот же запрос ответ по-прежнему HTTP 200. Правка ключа, который это право уже несёт, продолжает работать и на закрытом портале: гейт считает добавление права, а не его присутствие в теле запроса. Удаление права разрешено всегда. При создании ключа без явной просьбы право просто не дописывается по умолчанию — отказа не будет.

NEW-0826-11: карта требуемых прав в самоописании ключа

GET /v1/me теперь отдаёт в блоке data.api поле scopeRequirements — карту прав ключа. Раньше границу ключа можно было узнать только вызовом: запрос уходил и возвращался отказом 403 SCOPE_DENIED, называющим недостающее право. Список доступных сущностей показывал только то, что открыто, а закрытое просто отсутствовало, и по отсутствию нельзя было отличить «такой сущности нет в продукте» от «она есть, но вашему ключу закрыта».

Поле granted перечисляет права, которые у ключа есть, отдельно по Битрикс24 и по Вайбкод. Поле missing перечисляет недостающие и для каждого показывает, какие сущности и какие адреса оно откроет, а также howToObtain — способ получения: права Битрикс24 закрепляются за ключом при выпуске, поэтому получить их можно только перевыпуском. Списки адресов обрезаны на пяти элементах, остаток назван в unlocksRemaining рядом с признаком truncated. Поле unobtainable перечисляет права, которые личный ключ-вебхук нести не может в принципе. Поле aliases показывает написания, которые Битрикс24 считает одним правом.

Поле coverage объявляет полноту самой карты: entities всегда complete, а paths пока partial — часть адресов ещё не имеет машинного вердикта, поэтому списки путей занижают. Отсутствие адреса в unlocks не доказывает, что адрес не требует прав: если вызов всё-таки отвечает отказом, верьте отказу, а не карте. Права, которые платформа выдаёт сама и пользователь получить не может, попадают в unobtainable, а не в missing с невыполнимым советом.

Карта описывает только проверку прав на стороне платформы, о чём предупреждает _note. Она не обещает, что вызов пройдёт: право, выданное в кабинете уже после выпуска ключа, попадёт в карту, но Битрикс24 его не признает и ответит BITRIX_ACCESS_DENIED. Отказы по виду ключа, владению, режиму только для чтения, заморозке и тарифу — отдельные оси, в карте они не описаны.

Отбивки не изменились ни кодом, ни текстом: 403 SCOPE_DENIED по-прежнему называет недостающее право. Добавлена предварительная проверка, а не замена отбивки.

FIX-0826-12: сортировка комментариев задачи в скобочной форме `?sort[поле]=направление`

Было

GET /v1/tasks/{taskId}/comments?sort[id]=desc отвечал 500 INTERNAL_ERROR. Скобочную форму сортировки принимают /v1/tasks и /v1/deals, а плоская форма того же запроса — ?sort=id:desc — работала и здесь, поэтому отказ выглядел случайным. Ошибку давала любая скобочная сортировка, включая несортируемое поле: ?sort[createdAt]=desc тоже отвечал 500, тогда как плоский ?sort=createdAt возвращал понятный 400 INVALID_SORT_FIELD с перечнем допустимых полей.

Стало

Скобочная форма разбирается так же, как плоская, и проходит ту же проверку имени поля. ?sort[id]=desc сортирует по ID и отвечает 200; плоская форма ?sort=id:desc не меняется — её ответ остаётся HTTP 200. Несортируемое поле в скобках отвечает 400 INVALID_SORT_FIELD с тем же перечнем полей, что и плоская форма, и текст ошибки называет поле — Unsupported sort 'createdAt:desc'. Сортировка в форме, которую нельзя прочитать однозначно (повторный параметр, смешение плоской и скобочной форм, вложенные или повреждённые скобки, массив либо больше одного двоеточия), тоже отвечает 400, а не молча переосмысливается или теряется. Такой же скобочный sort на списке пунктов чек-листа задачи теперь отвечает контролируемым 400, а не 500. 500 этот параметр больше не даёт ни в одной форме.

FIX-0826-13: пробуждение приложения на неисправном Galaxy-хосте завершается явной ошибкой

Было

Запросы POST /v1/infra/servers/:id/start и POST /v1/infra/servers/:id/wake для Galaxy-приложения могли выглядеть успешными, хотя гостевая ОС общего хоста уже была признана незагружаемой. Клиент продолжал ждать запуск, который не мог завершиться.

Стало

Для такого Galaxy-приложения оба запроса возвращают HTTP 422 с кодом GUEST_NOT_BOOTING. Клиент может сразу прекратить ожидание и предложить заменить неисправный хост.

FIX-0826-14: отказ Битрикс24 на выписке ключа больше не отдаёт внутренний текст вендора

Было

Когда Битрикс24 отказывал в регистрации на выписке ключа или приложения, в поле error.message уезжала его внутренняя формулировка как есть — например Cannot register webhook: Failed to register webhook in portal. Текст всегда английский, не описан в документации и мог измениться на стороне Битрикс24 в любой момент. Отдельная семья таких отказов (регистрация входящего вебхука) вдобавок отдавала код Битрикс24 напрямую, вместо кода платформы Вайбкод.

Стало

error.message содержит текст платформы Вайбкод, а подробности ответа Битрикс24 остаются в журналах. Отказ регистрации вебхука классифицируется наравне с отказом регистрации приложения и отдаёт REST_REGISTRATION_FAILED. Ответ дополнен полем error.details.incidentCode — шестизначный код обращения, по которому поддержка находит запись в журнале. HTTP-статусы и коды ошибок прежние, клиенту менять ничего не нужно.