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

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

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

BC-0902-1: Документы сообщают состояние преобразования в PDF

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

Было

Поля isTransformationError, transformationErrorCode, transformationErrorMessage, transformationCancelReason и pullTag не были объявлены в контракте документов. Если Битрикс24 возвращал их через GET /v1/documents/:id, API Вайбкод передавал значения без нормализации. Те же поля в телах POST /v1/documents и PATCH /v1/documents/:id не отклонялись локальной проверкой полей только для чтения.

Стало

Пять полей объявлены как допускающие null поля ответа только для чтения. isTransformationError возвращается как boolean | null, остальные четыре поля — как string | null. Пустые строки в строковых полях становятся null. Запрос записи с любым из этих полей возвращает 400 READONLY_FIELD.

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

Не передавать эти пять полей в телах создания и изменения документа, в том числе при повторной отправке ранее полученного объекта. При чтении учитывать null и использовать pullTag для подписки на обновления состояния преобразования.

BC-0902-2: Адрес переключателя режима в отказе по режиму доступа больше не фиксирован

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

Было

Отказ по режиму доступа WRITE_BLOCKED_READONLY_KEY всегда возвращал details.switchUrl равным "/keys", а машинная схема закрепляла это значение перечислением enum: ["/keys"]. Раздел ключей показывает только личные ключи, поэтому для двух других видов путь был тупиком: ни ключ авторизации приложения, ни менеджмент-ключ там не показываются по построению — ни владельцу, ни администратору Битрикс24. Держателю сообщали адрес страницы, на которой переключателя для его ключа нет.

Стало

details.switchUrl указывает на страницу, где режим переключается именно у этого ключа: личный ключ — раздел ключей "/keys", ключ авторизации приложения — кабинет приложений "/applications", менеджмент-ключ — раздел менеджмент-ключей "/management-keys". Текст сообщения называет тот же адрес, что и поле, — они собираются вместе и разойтись не могут. Перечисление значений снято со схемы: это путь в интерфейсе, а не константа протокола, и закрепление литерала делало контракт невыполнимым при переезде страницы. Поле по-прежнему приходит всегда и остаётся обязательным — изменилось значение, а не наличие.

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

Читать switchUrl из ответа, а не подставлять "/keys". Клиентам, которые генерируют типы из схемы, литеральный тип '/keys' больше не выдаётся — обновите сгенерированные типы, иначе проверка значения не пройдёт.

FIX-0902-3: поток, который не начался, завершается повторяемой ошибкой у моделей всех поставщиков

Было

У моделей bitrix/* установка потока уже делала одну попытку с общим бюджетом, а у моделей остальных поставщиков платформа молча отправляла запрос второй раз и ждала ещё один полный бюджет. Клиент в это время не получал ничего — до двух полных бюджетов тишины, — а затем видел общий отказ провайдера, по которому нельзя отличить зависшую установку потока от любой другой неопознанной ошибки.

data: { "error": { "code": "ai_provider_unavailable", "type": "server_error", "retryable": true, "retryAfter": 6 } }
data: [DONE]

Стало

Установка потока делает одну попытку с общим бюджетом у моделей ЛЮБОГО поставщика. Если заголовки не пришли за отведённое время, ожидание не удваивается, а поток завершается тем же событием stream_idle_timeout, что и замолчавший в середине ответа, — по нему видно, что молчал именно поток.

data: { "error": { "code": "stream_idle_timeout", "type": "server_error", "retryable": true, "retryAfter": 7 } }
data: [DONE]

Ожидание больше не удваивается невидимо, а причина отказа названа точно — теперь на всём наборе моделей, а не только на bitrix/*.

NEW-0902-4: список ресурсов бронирования в V1

Появился GET /v1/booking-resources — он возвращает ресурсы бронирования, доступные ключу, и закрывает разрыв в сценарии первого бронирования: POST /v1/bookings требует непустой resourceIds, а узнать валидные идентификаторы средствами одного только V1 было нельзя.

Нужен скоуп booking. Ключ с режимом «только чтение» подходит — метод читающий. Фильтры typeId и searchQuery необязательны и комбинируются, любой другой параметр отклоняется с 400 INVALID_PARAMS.

Каталог собирается целиком, поэтому параметров постраничного вывода нет: meta.total равен длине data, meta.hasMore всегда false. Каждая запись несёт ровно четыре поля — id, name, typeId и isMain. Поле description не отдаётся: это свободный текст портала, для выбора ресурса он не нужен.

Полнота ответа гарантируется для каталога, не менявшегося во время запроса, — снимка коллекции Битрикс24 не предоставляет. Портал больше чем с 500 ресурсами получает 502 BITRIX_RESULT_TOO_LARGE вместо усечённого списка; сузить выборку помогают те же два фильтра.

NEW-0902-6: device-flow принимает идентификатор устройства

POST /v1/connect/device/authorize принимает необязательный параметр device_id — стабильный идентификатор установки клиента (до 128 символов, буквы, цифры, _.:-). Он действует для приложения Cowork/Code: при повторном подключении с того же устройства прежний ключ отзывается, а не остаётся в списке рядом с новым. Сторонние клиенты параметр передавать могут, но на выдачу их ключей он пока не влияет.

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

NEW-0902-7: новый код отказа INT_BOX_PARTNER_REQUIRED для коробок на международной установке

На международной установке доступ коробочного портала к платформе может требовать подтверждённой партнёрской (NFR) лицензии. Коробка без подтверждения получает HTTP 402 с новым кодом INT_BOX_PARTNER_REQUIRED — на создании сервера, агента, управляемого бота и на выписке ключа. Тело отказа устроено как у соседних кодов этого семейства (userMessage, alternatives, hint), но поле details.requiredTariffs пустое: переход на другой тариф Битрикс24 этот отказ не снимает, признак читается при регистрации модуля коннектора. Тот же код приезжает в поле reason слота capabilities.servers.create ответа GET /v1/me, а адрес документации — в его alternatives[].url. Требование включается отдельно; пока оно не включено, ни один портал этого кода не увидит и ответы остаются прежними.

NEW-0902-8: стабильный идентификатор портала в самоописании ключа

GET /v1/me возвращает новое поле portalId — устойчивый идентификатор портала Битрикс24, к которому привязан ключ. Оно приходит тем же запросом, рядом с уже существующими portal и owner, и есть у ключей vibe_api_ и vibe_app_.

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

В успешном ответе поле всегда непустое: ключ без привязанного портала до этого ответа не доходит, он получает 401 NO_PORTAL. Менеджмент-ключи vibe_live_ нового поля не получают — они не привязаны к одному порталу и по-прежнему отдают перечень порталов в portals.

NEW-0902-9: создание сервера отвечает 409 `REISSUE_IN_PROGRESS`, пока перевыпускается ключ авторизации приложения

У POST /v1/infra/servers появился новый код отказа REISSUE_IN_PROGRESS со статусом 409. Платформа Вайбкод отвечает им, когда владелец карточки приложения в этот момент перевыпускает её ключ авторизации: сервер не создаётся, потому что он оказался бы на ключе, который отзывается в ту же секунду.

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

FIX-0902-10: методы дашборда Открытых линий появились в OpenAPI

Было

Шесть публичных методов статистики Открытых линий были описаны на страницах документации, но отсутствовали в /v1/openapi.json и сгенерированных карточках API.

Стало

Все шесть методов доступны в OpenAPI и карточках API со скоупом imopenlines, параметрами и форматами ответов. Runtime-поведение не менялось: успешный ответ остаётся HTTP 200, прежние статусы и форматы ошибок сохранены.

NEW-0902-11: код обращения в неопознанном отказе выписки ключа

Когда Битрикс24 отказывает в выписке ключа причиной, которую платформа не распознаёт, ответ теперь дополнительно несёт error.details.incidentCode — код обращения из шести символов (латинские буквы и цифры). Тот же код платформа записывает в журнал портала рядом с разбором отказа, поэтому поддержке достаточно его назвать, чтобы найти запись.

Поле опциональное и добавлено к уже существующему телу ответа: HTTP-статус, error.code и error.details.reason прежние, клиентам делать ничего не нужно.

NEW-0902-12: лимит частоты, ETag и Vary у GET /v1/openapi.json

У GET /v1/openapi.json появился лимит частоты на один адрес вызывающего. Точное значение потолка отдаётся в заголовке x-ratelimit-limit ответа — читайте его оттуда, а не задавайте числом в коде. Превышение отвечает 429 RATE_LIMITED. Лимит щедрый и на обычное чтение не рассчитан: спека отдаётся с ETag, поэтому дискавери-клиент и генератор SDK повторно получают 304 вместо тела.

Тело спеки может зависеть от ключа в запросе. Поэтому ответ помечен Vary: Authorization, X-Api-Key (ключ читается из любого из двух заголовков), а с ключом, для которого тело отличается, отдаётся под Cache-Control: private вместо public. Не переиспользуйте один сохранённый файл спеки между разными ключами.

FIX-0902-13: тарифный отказ Битрикс24 при выписке ключа и установке приложения называет причину

Было

Когда Битрикс24 отказывал в выписке кодом FEATURE_NOT_AVAILABLE_ON_CURRENT_PLAN (тариф портала не включает Вайбкод), ответ был безликим на ЛЮБОЙ ручке выписки — и там, где выпускается ключ (POST /v1/keys → 502 CONNECTOR_KEY_ISSUE_FAILED), и там, где устанавливается приложение (POST /v1/apps → 502 CONNECTOR_APP_INSTALL_FAILED). Текста для человека в теле не было вовсе, а причина оставалась только во внутреннем поле, поэтому клиент читал отказ как временный сбой платформы и повторял запрос. Повтор не помогает никогда: гейт снимается только сменой тарифа Битрикс24.

HTTP 502
{ "success": false, "error": { "code": "CONNECTOR_KEY_ISSUE_FAILED", "message": "connector refused to issue the key" } }

Стало

Отказ разбирается по региону портала. Там, где доступ продаётся, приходит 402 с кодом тарифного пейвола и текстом для человека: на международном сегменте — INT_VIBE_PLUS_REQUIRED с details.requiredTariffs: ["vibe+"] и details.upgradeUrl на страницу подключения тарифа в самом портале, в тарифных регионах СНГ на бесплатном тарифе — BY_PAID_ONLY, KZ_PAID_ONLY или UZ_PAID_ONLY. Там, где предлагать нечего (коробочный портал, портал уже на платном тарифе, нераспознанный регион), ответ остаётся 502, но получает собственный код CONNECTOR_PLAN_REQUIRED и непустой userMessage вместо пустого тела.

HTTP 402
{ "success": false, "error": { "code": "INT_VIBE_PLUS_REQUIRED", "message": "This action requires a Vibe+ plan on your Bitrix24 account.", "details": { "requiredTariffs": ["vibe+"], "upgradeUrl": "https://example.bitrix24.com/online/?feature_promoter=limit_why_pay_tariff_vibe" } } }

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

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

FIX-0902-14: отказ на странице согласия возвращает пользователя в приложение партнёра

Было

Пользователь подтверждал доступ, упирался в отказ выдачи ключа — нет подписки, неподдерживаемый регион, исчерпан лимит ключей — и оставался на странице согласия. На redirect_uri не уходило ничего: партнёр не узнавал ни о попытке, ни о её причине.

Стало

Отказ несёт готовый адрес возврата: на странице появляется кнопка «Вернуться в приложение», а redirect_uri получает error=access_denied (temporarily_unavailable при недоступности Битрикс24), машинный код причины в error_description и исходный state. Если у зарегистрированного адреса возврата был свой параметр code, при отказе он снимается — отказ не приходит вперемешку с признаками успеха. Так же ведут себя отказы до подтверждения — протухшая ссылка согласия и битый CSRF-токен, в том числе на кнопке «Отклонить».