Для AI-агентов: markdown этой страницы — /docs-content/changelog/2026-08-31.md индекс документации — /llms.txt
Изменения API: 31 августа 2026
← Журнал изменений · Август 2026
FIX-0831-1: сервер, у которого не поднялся агент, больше не числится рабочим
Было
Если установка агента при старте машины обрывалась, виртуалка всё равно доходила до
running, и сервер так и оставался в этом состоянии. В карточке и в списке серверов
приходил status: "running" с пустыми provisionError и provisionErrorCode — по ответу
этих эндпоинтов отличить рабочий сервер от неработающего было нельзя, а тарификация
продолжалась.
{ "status": "running", "blackholeStatus": "NONE", "provisionError": null, "provisionErrorCode": null }
Стало
Такой сервер переводится в error с объяснением и новым кодом
provisionErrorCode: "AGENT_NEVER_CONNECTED", и тарификация закрывается.
{ "status": "error", "blackholeStatus": "NONE", "provisionError": "Сервер загрузился, но агент так и не подключился — …", "provisionErrorCode": "AGENT_NEVER_CONNECTED" }
Влияние на интеграторов
Менять ничего не нужно: error — существующий статус, новых полей не появилось. Что стоит
учесть:
- Цикл ожидания готовности сервера теперь завершается:
runningприblackholeStatus: "NONE"больше не длится вечно. Если ждёте парыrunning+CONNECTED, добавьте выход поerror. - Восстановление —
POST /v1/infra/servers/:id/repair: он ставит агента заново по SSH. Пересоздавать сервер стоит, только если починка не помогла. POST /v1/infra/servers/:id/startна таком сервере отвечает422с кодомAGENT_NEVER_CONNECTED. Статус ответа не изменился: по такой машине/startи раньше отдавал422(SERVER_WRONG_STATE, потому что она числиласьrunning) — меняется код, не статус. Запуск тут не чинит ничего, а объяснение стирает — поэтому он и отклоняется. Клиент, который перезапускает упавшие серверы по расписанию, должен читать код и звать починку.- Три операции жизненного цикла на такой машине переходят из успешного ответа в отказ, потому
что требуют
running:POST /v1/infra/servers/:id/stopиPOST /v1/infra/servers/:id/rebootотвечают422с кодомSERVER_WRONG_STATE, аPOST /v1/infra/servers/:id/sleep-now—400с кодомNOT_RUNNING. Выключать такую машину и не нужно: тарификация закрывается вместе с вердиктом, так что плановая остановка ради экономии на ней ничего не экономит. Рабочие действия —repair(починить) иDELETE /v1/infra/servers/:id(удалить); их же перечисляетavailableActionsв ответе. - Вердикт выносится только что созданным серверам, уже работающие он не трогает. Перед ним
платформа сверяется со шлюзом, поэтому живой туннель с потерянным уведомлением чинится, а не
помечается ошибкой. Если агент подключится позже, сервер сам вернётся в
running, аprovisionErrorиprovisionErrorCodeочистятся.
FIX-0831-2: отказ выписки на бесплатном тарифе называет причину вместо «повторите через минуту»
Было
Портал с оплаченной подпиской на Маркетплейс, но на бесплатном тарифе Битрикс24, получал на выписку ключа и на установку приложения 502 CONNECTOR_REST_UNAVAILABLE с текстом «Битрикс24 сейчас не выдал ключ. Повторите попытку через минуту». Повтор не помогал никогда: на бесплатном тарифе Битрикс24 не считает подписку действующей и отказывает в REST целиком, а ответ об этом не сообщал.
Стало
Та же ситуация отвечает 402 B24_PAID_TARIFF_REQUIRED. Поле userMessage называет оба условия доступа и говорит, какое из них не выполнено: подписка у портала есть, нужен платный тариф Битрикс24. Успешные ответы не изменились и по-прежнему отдают HTTP 200, прочие причины отказа по-прежнему отвечают 502 CONNECTOR_REST_UNAVAILABLE.
FIX-0831-3: поиск и исследование через провайдера Linkup
Было
Любой вызов POST /v1/search или POST /v1/research с provider: "linkup" отклонялся провайдером: платформа не передавала обязательное поле outputType. По этой же причине не проходила проверка собственного ключа Linkup — подключение BYOK-ключа возвращало INVALID_CREDENTIAL с текстом HTTP 400 даже для действующего ключа.
Стало
Вызовы к Linkup выполняются, подключение BYOK-ключа отражает реальное состояние ключа: действующий ключ сохраняется, недействующий отклоняется.
В /v1/search поле answer заполняется при include_answer: true и равно null при include_answer: false; в этом случае текст страницы приходит в results[].content. Поле results[].published_date у Linkup всегда null — провайдер не отдаёт дату публикации, и матрица возможностей в GET /v1/search/providers теперь сообщает об этом честно.
FIX-0831-6: Пакетное создание линий телефонии отдаёт адресуемый номер в results[].id
Было
POST /v1/telephony-lines/batch с action: "create" отвечал 200, но в results[].id приходил внутренний числовой идентификатор строки Битрикс24. Подставить его в PATCH или DELETE /v1/telephony-lines/:number было нельзя — линия ищется по номеру, и запрос отвечал 422. Одиночный POST /v1/telephony-lines при этом уже отдавал правильный номер, то есть две двери на одно и то же создание расходились в ответе.
Стало
results[].id — тот же номер, что передан в поле number этого элемента, и то же значение, что отдаёт одиночный POST /v1/telephony-lines. Значение возвращается без изменений, включая номера с + и другими символами. Ответ по-прежнему 200, состав остальных полей не менялся.
FIX-0831-7: повторный вход в Коворк на бесплатном месте больше не отбивается
Было
Если человек отменял бесплатную подписку Коворка, повторный вход десктопа отбивался
403 COWORK_SUB_CANCELLED: отменённое место не оживало, а ключ выдаётся только активному.
Из приложения выхода не было — браузерного пути к возврату бесплатного места в этом
сценарии не существует, и человек оставался без входа насовсем.
Стало
Место с нулевой ценой возвращается в активное состояние прямо на входе, и ключ выдаётся.
Платное место по-прежнему отвечает 403 COWORK_SUB_CANCELLED / COWORK_SUB_PAUSED —
его возобновление это оплата, и оно делается осознанно в кабинете.
FIX-0831-8: `TOKEN_MISSING` для личного ключа называет причину отказа в вебхуке
Было
Если у личного ключа (vibe_api_*) не было вебхука Битрикс24 из-за того, что портал
отказал владельцу ключа в праве на входящие вебхуки, либо прошлая попытка выпустить
вебхук завершилась ошибкой, ответ 401 TOKEN_MISSING всё равно называл общую причину
(например, WEBHOOK_NOT_CONFIGURED) и отправлял читать GET /v1/me, не объясняя,
что вебхука не будет и кто должен это исправить.
Стало
В этих двух сценариях error.details.reason возвращает WEBHOOK_MINT_REFUSED_BY_PORTAL
(нужны действия администратора портала) или WEBHOOK_MINT_FAILED (платформа повторяет
попытку сама), а error.message называет причину и адресата действия явно. Для
WEBHOOK_MINT_REFUSED_BY_PORTAL совет переподключить ключ
больше не приходит — платформа выпустит вебхук автоматически, как только администратор
портала откроет право на входящие вебхуки, и повторный запрос переподключения не поможет.
Код ответа, HTTP-статус и структура error не изменились.
Влияние на интеграторов
Обрабатывайте WEBHOOK_MINT_REFUSED_BY_PORTAL и WEBHOOK_MINT_FAILED как отдельные
значения details.reason наравне с уже документированными — не пересоздавайте ключ и не
дёргайте reconnect в цикле по этим причинам, ждите действия администратора портала или
автоматический повтор платформы.
Отдельно про текст сообщения. error.message теперь ветвится по причине и по тому,
доступно ли этому ключу переподключение, — и это касается НЕ только двух новых причин.
У ключа без скоупов Битрикс24 (VIBE_SCOPES_ONLY) текст стал своим, а ключам, которым
платформа переподключение отобьёт (коворк-ключи, ключи приложений, ключи с привязанным
сервером или живым агентом), вместо совета переподключиться приходит совет создать новый
ключ. Значения details.reason в этих сценариях прежние. Если ваш код разбирает
error.message поиском по строке — переключитесь на details.reason: текст сообщения
контрактом не является и меняется.
FIX-0831-9: пополнение вайбов коробочному порталу открыто на международной установке
Было
Коробочному порталу на международной установке пополнение всегда отвечало
отказом BOX_TOPUP_NOT_AVAILABLE. Превью подписки
GET /v1/cowork/subscription/preview возвращало такому аккаунту
topUpAvailable: false, а каталог пакетов приезжал пустым.
Стало
Коробочный портал на международной установке пополняется наравне с облачным —
получает каталог пакетов, ссылку на оплату и topUpAvailable: true в превью
подписки. Отказ BOX_TOPUP_NOT_AVAILABLE остаётся только там, где пополнение
коробочным порталам закрыто для региона портала. Формат ответа не меняется,
успешный ответ остаётся HTTP 200.