# Изменения API: 23 октября 2026

[← Журнал изменений](/docs/changelog) · [Октябрь 2026](/docs/changelog/2026-10)

### FIX-1023-1: подсказка 502 для галактики в ERROR, ни разу не подключавшейся, больше не советует повтор

**Было**

[POST /v1/infra/servers/:id/deploy](/docs/infra/deploy/deploy) и [DELETE /v1/infra/servers/:id](/docs/infra/servers/delete) для galaxy-приложения, виртуальная машина галактики которого не поднялась и осталась в статусе `ERROR`, отвечали `502 GALAXY_HOST_UNREACHABLE` с подсказкой `error.hint`: подождать 1–2 минуты, повторить тот же запрос и не удалять слот. Повтор так и не помогал, ответ на удаление вдобавок говорил «try again shortly».

**Стало**

Для галактики в статусе `ERROR`, туннель которой ни разу не подключался (`blackholeStatus` — `NONE`), код ответа прежний, `502 GALAXY_HOST_UNREACHABLE`, но поля `error.hint` говорят прямо: повтор не поможет. Галактику, которая так ни разу и не запустилась, платформа снимает фоновой уборкой вместе со слотом приложения, после чего запросы по id приложения отвечают `404`, и приложение создаётся заново. Если слот держится дольше суток, нужно запустить галактику из кабинета или обратиться в поддержку. В остальных случаях подсказка не изменилась, в том числе для галактики в `ERROR`, которая уже подключалась: её поднимает повтор или запуск. Подробности — в разделе [Галактики](/docs/infra/galaxy).

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

Не повторяйте deploy и удаление, если `error.hint.reason` говорит, что галактика в статусе `ERROR` и её туннель ни разу не подключался: дождитесь снятия слота и создайте приложение заново.

### NEW-1023-2: Отправка результата CRM-формы и формы клиенту открытой линии

`POST /v1/crm-forms/:id/results` отправляет данные посетителя и возвращает `201` с `data.resultId`. Битрикс24 может создавать записи CRM, запускать роботов и уведомлять ответственных. `POST /v1/openlines/sessions/send-form` принимает `sessionId` и `formId`, сам получает коды формы и возвращает `200` с `data.sent`. Это сообщение клиенту, а не подтверждение доставки. Оба маршрута требуют READWRITE; отправке в диалог нужны скоупы `imopenlines` и `crm`.

### FIX-1023-3: Подсказки GET /v1/me учитывают ограничения ключа Коворка

**Было**

Ответ `GET /v1/me` для ключа со скоупом `vibe:cowork` предлагал операции управления приложениями и серверами, которые этот ключ не мог выполнить.

**Стало**

Ответ остаётся HTTP 200. Правила, советы по восстановлению серверов и инструкции по встраиванию учитывают ограничения ключа: вместо адресов операций, отвечающих `403 INFRA_FORBIDDEN_FOR_COWORK_KEY`, они отсылают к доступному пути в `deployment` или действию пользователя. Для ключей без `vibe:cowork` подсказки сохраняются.

### FIX-1023-4: Выкладка на новый или проснувшийся сервер переживает обновление системы

**Было**

[POST /v1/infra/servers/:id/deploy](/docs/infra/deploy/deploy) с установкой окружения на только что созданный или проснувшийся сервер мог завершиться `DEPLOY_TIMEOUT` примерно через 330 секунд: автоматическое обновление системы перезапускало сеть, и установка окружения обрывалась вместе с соединением.

**Стало**

Перед установкой окружения проверка готовности дожидается окончания системных обновлений в пределах прежних 15 минут ожидания. В первый час после создания или пробуждения сервера установка окружения переживает временную потерю соединения, а итог дочитывается после его восстановления. Если итог подтвердить не удалось, выкладка по-прежнему отвечает `DEPLOY_TIMEOUT`, в худшем случае примерно через 390 секунд после начала установки. Сообщение об окончании ожидания готовности называет причину `APT_BUSY`, если сервер всё ещё ставил обновления.

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

Запросы менять не требуется. Форматы JSON и SSE и коды ошибок сохранены. Установка окружения по-прежнему отправляется на сервер один раз и не повторяется.

### BC-1023-5: CRM-формы: чтение конфигурации и справочников конструктора

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

**Было**

`GET /v1/crm-forms` возвращал только id и name без пагинации, `meta.total` содержал размер ответа. `GET /v1/crm-forms/:id` отдавал ограниченный состав формы; типы полей ФИО были `name`, `last-name`, `second-name`, видимость и подписи соглашений приходили из прежнего контракта.

**Стало**

Список поддерживает фильтры name, code, entityScheme, responsibleUserId, диапазоны createdTime/updatedTime и limit/offset до 1000. Ответ расширен code, active, system, createdTime, updatedTime. Битрикс24 не сообщает общее количество: `meta.total` отсутствует. `isCallback` фильтрует уже выбранную страницу.

Карточка формы сохраняет прежние ключи и добавляет блоки конфигурации. `fields[].type` у ФИО теперь `string`; `fields[].visible` всегда `true`, поскольку новый контракт не публикует видимость. `agreements[].name` сохраняет `AGREEMENT_<id>`, а `agreements[].label` теперь `null`: CRM-контракт не предоставляет текст подписи. Полный блок соглашений доступен как `agreementsSettings`. Поля дополнены sort, valueType, value; варианты списков остаются в items.

Новые маршруты: `GET /v1/crm-forms/configuration`, `/v1/crm-forms/scenarios`, `/v1/crm-forms/scenario-categories`, `/v1/crm-forms/entity-fields?entityName=LEAD`, `/v1/crm-forms/fields`, `/v1/crm-forms/fields/:name`. Они читают настройки и справочники конструктора. Аналитика, интеграции и защита от спама не публикуются.

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

Обходите список страницами через limit/offset; не используйте meta.total как размер коллекции. Считайте string типом поля ФИО; не используйте visible для определения скрытых полей. Учитывайте nullable label соглашения. Отказы Битрикс24 возвращают исходную причину; отсутствие формы — `404 ENTITY_NOT_FOUND`.

### FIX-1023-6: запрос к модели bitrix без изображений больше не упирается в предел для изображений

**Было**

[POST /v1/chat/completions](/docs/ai/chat/completions) с моделью `bitrix/*` мерил любое тело тем же пределом, что и тело с изображениями, и отклонял длинную историю сообщений без изображений ответом `413 ai_payload_too_large`.

**Стало**

Тело без изображений меряется собственным, более высоким пределом кластера моделей и уходит модели. Тело с изображениями меряется прежним пределом, а изображения `data:` в нём платформа по-прежнему уменьшает сама. Если тело без изображений не уложилось в свой предел, ответ — `413 ai_payload_too_large`: сообщение называет размер запроса, действующий предел и советует сократить историю сообщений, а не уменьшать изображения.

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

Действий не требуется. Запросы, которые проходили раньше, работают как раньше. Подробнее — [анализ изображений](/docs/ai/chat/vision).

### FIX-1023-7: неподдерживаемый filter в GET-коллекциях получает предупреждение

**Было**

В перечисленных ниже GET-эндпоинтах общий параметр `filter` игнорировался, а ответ возвращал более широкую коллекцию без объяснения.

**Стало**

Эти эндпоинты сохраняют прежний успешный ответ и те же данные. Если общий `filter` не поддерживается, ответ содержит заголовок `Warning: 299 - "filter is not supported on this endpoint and was ignored"`; использование фиксируется сервером. Для `/v1/chats/recent` и `/v1/chats/:dialogId/users` это относится к legacy-ветке. `format=v2` сохраняет прежнюю строгую проверку.

**Затронутые эндпоинты:**

- [GET /v1/activities/:activityId/bindings](/docs/entities/activities/bindings/list)
- [GET /v1/bots/:botId/events](/docs/bots/events)
- [GET /v1/bookings/:id/clients](/docs/entities/bookings/clients-list)
- [GET /v1/booking-wait-list/:id/clients](/docs/entities/booking-wait-list/clients-list)
- [GET /v1/calendar-resources/bookings](/docs/entities/calendar-resources/bookings)
- [GET /v1/calendar/accessibility](/docs/calendar/accessibility)
- [GET /v1/catalog-products/:productId/images](/docs/entities/catalog-products/images-list)
- [GET /v1/chats/events](/docs/chats/events)
- [GET /v1/chats/:dialogId/users](/docs/chats/members/list)
- [GET /v1/chats/recent](/docs/chats/discovery/recent)
- [GET /v1/crm-deliveries](/docs/entities/crm-deliveries/list)
- [GET /v1/crm-documents](/docs/entities/documents/crm-list)
- [GET /v1/crm-payments/:id/products](/docs/entities/crm-payments/products-list)
- [GET /v1/crm-payments/available-products](/docs/entities/crm-payments/available-products)
- [GET /v1/humanresources/nodes/:id/children](/docs/humanresources/node-operations/children)
- [GET /v1/humanresources/nodes/:id/communications](/docs/humanresources/node-operations/communications-get)
- [GET /v1/infra/servers/:id/b24-users](/docs/infra/access/b24-users)
- [GET /v1/mail/mailboxes/:id/senders](/docs/mail/mailboxes/senders)
- [GET /v1/mail/messages/:id/thread](/docs/mail/messages/thread)
- [GET /v1/me/workgroups](/docs/me/workgroups)
- [GET /v1/note/collections](/docs/note/collections/list)
- [GET /v1/note/collections/:collectionId/documents](/docs/note/collections/tree)
- [GET /v1/note/documents](/docs/note/documents/list)
- [GET /v1/note/documents/search](/docs/note/documents/search)
- [GET /v1/openline-configs/:lineId/quick-replies](/docs/openlines/quick-replies/list)
- [GET /v1/openlines/crm/chats](/docs/openlines/crm-chats)
- [GET /v1/openlines/operators](/docs/openlines/operators)
- [GET /v1/posts](/docs/feed/posts/list)
- [GET /v1/scrum/epics](/docs/scrum/epics/list)
- [GET /v1/scrum/sprints](/docs/scrum/sprints/list)
- [GET /v1/scrum/sprints/:sprintId/stages](/docs/scrum/stages/list)
- [GET /v1/stage-history](/docs/stage-history)
- [GET /v1/tasks/:taskId/chat/messages](/docs/entities/tasks/chat)
- [GET /v1/tasks/:taskId/dependencies](/docs/entities/tasks/dependencies-list)
- [GET /v1/timeline-logs](/docs/timeline-logs/logs/list)
- [GET /v1/triggers](/docs/automation/triggers/list)
- [GET /v1/workday/time-control/reports](/docs/workday/time-control-reports)
- [GET /v1/workday/time-control/users](/docs/workday/time-control-users)
- [GET /v1/workgroups/:groupId/users](/docs/entities/workgroups/users)

**План перехода**

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

### FIX-1023-8: Список моделей Bitrix учитывает настройку доступа

**Было**

Штатные модели Bitrix без настроенного доступа предлагались в [GET /v1/models](/docs/ai), но запрос генерации возвращал внутреннюю ошибку.

**Стало**

Такие модели не предлагаются в списке. При прямом запросе генерации без настроенного доступа возвращается `402 ai_credentials_not_configured` вместо внутренней ошибки.

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

Модели с настроенным доступом остаются доступны для генерации. Выбирайте доступную модель из списка или настройте доступ к Bitrix.

### FIX-1023-9: сноски веб-поиска соответствуют возвращённым источникам

**Было**

В ответе [POST /v1/search](/docs/search/run) через `bitrix-search` в `answer` могли оставаться сноски `[6]` и `[7]`, хотя `results` содержал только пять источников с `id` 1–5 из-за `max_results`. Ответ оставался HTTP 200.

**Стало**

При нормализации маркера `[sourceId:N]` сноска `[N]` появляется в финальном `answer`, только если источник с этим `id` вошёл в возвращённый `results`. Иначе маркер удаляется. Это правило действует в обычном ответе и в завершающем событии `done`. Количество результатов по-прежнему ограничено `max_results`. Ответ остаётся HTTP 200.

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

Менять запросы не нужно. Состав и номера возвращённых источников сохраняются. Удаляется только сноска, сам текст утверждения остаётся. Промежуточные `answer_delta` не меняются, поэтому финальный текст потока нужно брать из `done.answer`.

### BC-1023-10: Лимиты операций V1 учитывают проверенный ключ доступа

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

**Было**

Создание сервера, получение SSH-доступа, настройки сна, пробуждения и порта, изменение заданий сервера, загрузка исходников приложения или сервера, получение чертежа приложения, списка исходников и скачивание файла комментария задачи делили лимит между разными ключами с одного IP-адреса. Запросы без действующего ключа тоже расходовали этот лимит, а смена IP-адреса давала новый бюджет.

**Стало**

Эти операции учитывают запросы отдельно для каждого проверенного ключа. Разные ключи с одного адреса имеют независимый бюджет, а один ключ с разных адресов использует общий бюджет операции. Запросы без ключа или с неверным ключом, дошедшие до проверки доступа, получают HTTP 401 и не расходуют маршрутный бюджет. Порог и окно каждого маршрутного лимита сохранены; общие ограничения частоты запросов продолжают действовать.

`HEAD /v1/me/sources` больше не поддерживается и возвращает HTTP 404. [GET /v1/me/sources](/docs/source-storage/registry) остаётся доступен с прежним форматом ответа.

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

Вместо `HEAD /v1/me/sources` используйте GET. Для остальных перечисленных операций изменять запросы не требуется. При HTTP 429 учитывайте Retry-After; смена адреса не сбрасывает бюджет ключа.

### BC-1023-11: Пакетное чтение событий календаря отклоняет from, to и section в params

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

**Было**

В [POST /v1/calendar-events/batch](/docs/entities/calendar-events) действие `list` молча отбрасывало прямые `params.from`, `params.to` и `params.section`. Подвызов завершался успешно, но без этих ограничений.

**Стало**

Подвызов с любым из этих ключей получает ошибку `UNSUPPORTED_BATCH_LIST_PARAM`. Соседние подвызовы продолжают работу, ответ пакета остаётся HTTP 200.

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

Уберите `from`, `to` и `section` из подвызовов пакета. Для выборки событий по периоду или разделу используйте одиночный [GET /v1/calendar-events](/docs/entities/calendar-events).

### FIX-1023-12: Пакетное чтение событий и разделов календаря передаёт обязательные параметры

**Было**

В [POST /v1/calendar-events/batch](/docs/entities/calendar-events) и [POST /v1/calendar-sections/batch](/docs/entities/calendar-sections) действие `list` теряло обязательные `type` и `ownerId` из `params`. Те же ключи в `params.filter` вызывали `UNSUPPORTED_FILTER`.

**Стало**

Оба варианта передают `type` и `ownerId` в метод Битрикс24. Если обязательного значения нет, оно пустое или нескалярное, соответствующий подвызов получает `MISSING_REQUIRED_PARAMS`. Соседние подвызовы продолжают работу, ответ пакета остаётся HTTP 200. Примеры справочника показывают рабочее действие `list`.

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

Передавайте `type` и `ownerId` в `params` или `params.filter`.

### NEW-1023-13: Создание, изменение и управление CRM-формами

CRM-формы можно создавать, изменять, проверять, включать, выключать и удалять через [CRM-формы](/docs/entities/crm-forms). Новые маршруты используют REST v3: `POST /v1/crm-forms`, `PATCH /v1/crm-forms/:id`, `POST /v1/crm-forms/validate`, `POST /v1/crm-forms/:id/validate`, `POST /v1/crm-forms/:id/activate`, `POST /v1/crm-forms/:id/deactivate`, `DELETE /v1/crm-forms/:id`. Проверка доступна READONLY-ключам; запись требует READWRITE и скоупа `crm`. Изменение требует `updatedTime` из GET, удаление активной формы — `confirm=true`. Создание возвращает 201, остальные успешные операции — 200, включая проверку с `valid:false`.

### NEW-1023-14: Встраивание CRM-формы и места её подключения

Через API Вайбкод доступны код встраивания и публичная ссылка CRM-формы: `GET /v1/crm-forms/:id/embedding`. Параметр `variant` выбирает `inline`, `click` или `auto`. `PATCH /v1/crm-forms/:id/embedding` сохраняет настройки кнопки и автоматического показа по версии формы `updatedTime` и возвращает перечитанные данные. Запись меняет версию формы.

`GET /v1/crm-forms/:id/site-buttons` и `GET /v1/crm-forms/:id/openlines` возвращают страницу всех виджетов и открытых линий портала с признаком `bound` для выбранной формы, включая неподключённые. Чтению достаточно скоупа `crm` и READONLY; записи нужен READWRITE.

### NEW-1023-15: Права методов и готовность ключа компании

Ключ компании проверяет право каждого метода Битрикс24 по текущему согласию и отклоняет пакет целиком, если хотя бы один метод не разрешён. Готовность подключения теперь допускает любое одно право Битрикс24, включая `user`, без обязательного `crm`. Искусственное ограничение READONLY снято; список доступных HTTP-маршрутов сохранён.

### FIX-1023-16: Публикация после прерванной установки пакетов

**Было**

Публикация приложений Node.js 20, Node.js 24 и Python 3.12 останавливалась, если системная установка пакетов была прервана.

**Стало**

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

### FIX-1023-17: модели, загруженные с ключа стандартного провайдера, привязываются к этому ключу

**Было**

[POST /v1/ai/credentials/:id/fetch-models](/docs/ai/credentials/fetch-models) сохранял модели стандартного провайдера (OpenAI, Anthropic, Google Gemini, OpenRouter и других) в общий каталог платформы. Их видели все пользователи, у которых подключён ключ того же провайдера, а повторная загрузка возвращала в работу модели каталога платформы, выведенные из обращения.

**Стало**

Модели любого провайдера привязываются к ключу, с которым их загрузили, как раньше у Custom-ключей. Они видны и вызываются только с этим ключом, попадают в [GET /v1/ai/credentials/:id/models](/docs/ai/credentials/models-list) и получают статус `DEPRECATED`, когда провайдер перестаёт их возвращать. Каталог платформы загрузка не меняет.

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

Менять ничего не нужно. Чтобы вызывать модель стандартного провайдера своим ключом, загрузите каталог этим ключом через `fetch-models`. У одного ключа не больше 1000 моделей: если новые модели не поместились, ответ несёт новое поле `truncated: true`. Модель ключа получает возможности (`capabilities`) одноимённой модели каталога платформы, поэтому вызовы со `response_format` и эмбеддинги работают как раньше.

### FIX-1023-18: единый выбор модели для личного ключа и ключа портала

`GET /v1/models`, `GET /v1/models/:id`, `POST /v1/chat/completions` и `POST /v1/embeddings` теперь выбирают личную модель раньше одноимённой модели ключа портала и каталога платформы. В списках моделей, включая `GET /v1/me`, один идентификатор учитывается один раз.

Эмбеддинги больше не выбирают модель чужого ключа: если своей модели нет, ответ — `404 ai_model_not_found`, вместо ошибочного `402 ai_credentials_not_configured`. Менять интеграцию не требуется.

### FIX-1023-19: Замена модели в публичном API учитывает каталог платформы

**Было**

В ответе `GET /v1/models/{id}` цена замены и поле `replaced_by`, а также заголовки `Link` и `X-Model-Replacement` ответа `POST /v1/chat/completions` могли ссылаться на модель, доступную только по ключу клиента.

**Стало**

Эти сведения о замене публикуются только для моделей из каталога платформы. Если старая ссылка ведёт на модель ключа клиента, карточка сохраняет собственную цену без `replaced_by`, а заголовки замены не выдаются.
