# Изменения API: 4 июля 2026

[← Журнал изменений](/docs/changelog) · [Июль 2026](/docs/changelog/2026-07)

### BC-0704-1: Перегрузочные отказы: 429/503 вместо 504

> Поддержка старого формата до: 31.07.2026

Перегрузочные отказы сменили HTTP-статусы (коды в теле ответа НЕ изменились — меняется только статус). Правило: **429** — запрос НЕ был обработан, безопасно повторить через `Retry-After` (заголовок теперь ставится всегда); **503** — платформе или апстриму плохо, повторите позже, для write-операций сначала проверьте, применилось ли изменение. Прикладной 504 из API исключён.

**Что изменилось:** `QUEUE_OVERFLOW` 503→429; `QUEUE_TIMEOUT` 504→429; `BITRIX_TIMEOUT` (Bitrix24 не ответил за 15 секунд — для этого кода write мог примениться, перечитайте сущность перед повтором) →503; `ai_provider_timeout` 504→503; `UPSTREAM_TIMEOUT` (веб-поиск `/v1/search` — апстрим-провайдер не ответил вовремя) 504→503; `RUNTIME_TIMEOUT` / `GATEWAY_TIMEOUT` / `WAKE_TIMEOUT` 504→503.

### NEW-0704-2: Новый код перегрузки AI: 429 ai_congested

AI-запросы к платформенному кластеру теперь проходят через admission-гейт: при перегрузке пула ответ — `429` с кодом `ai_congested` в теле и заголовком `Retry-After`. Повтор безопасен (запрос не выполнялся, списания нет). BYOK-ключи и внешние провайдеры гейтом не затрагиваются. По умолчанию гейт выключен — включается платформой.

### BC-0704-3: ключи в режиме «только чтение» (READONLY) больше не выполняют запись на рукописных эндпоинтах

> Поддержка старого формата до: 03.07.2026

**Было**

APP-ключ с режимом доступа «только чтение» (`accessMode: READONLY`) доходил до записи в Битрикс24 на части рукописных эндпоинтов (реквизиты и пресеты, пользовательские поля, timeline pin/note/bind, телефония, почта, диск, бизнес-процессы, приглашение и деактивация пользователя и другие) — гард проверял только скоуп, но не режим доступа ключа.

**Стало**

Любая попытка записи ключом в режиме «только чтение» возвращает `403` с кодом `WRITE_BLOCKED_READONLY_KEY`. Эндпоинты чтения не затронуты.

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

Если интеграция выполняла запись ключом «только чтение», переключите ключ в режим чтения и записи на странице управления ключами.

### FIX-0704-4: деплой galaxy-приложения корректно распаковывает архивы с обёрткой и понятно сообщает о пустом source.content

**Было**

[POST /v1/infra/servers/:id/deploy](/docs/infra/deploy) для galaxy-приложения (`kind=GALAXY_APP`), где файлы проекта в `source.content` лежали внутри обёрточной папки (типичный zip, собранный в macOS), собирал приложение с пустым контекстом сборки и падал в рантайме с `npm error enoent Could not read package.json`. Если же `source.content` вообще не распаковывался в файлы (передан versionId, путь или пустой архив) — деплой давал ту же непонятную ошибку сборки.

**Стало**

Такие архивы деплоятся корректно: файлы приложения оказываются в корне контекста сборки. А если `source.content` распаковался в пустой контекст, деплой сразу возвращает `GALAXY_APP_BUILD_FAILED` с понятным сообщением о пустом контексте сборки и подсказкой, что `source.content` должен быть base64-архивом (tar.gz или zip) файлов вашего проекта, а не versionId и не путём.
