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

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

### NEW-0712-1: Ответ при исчерпании AI-квоты подсказывает путь к пополнению

Ошибка `402 ai_quota_exhausted` с `reason: wallet_empty` теперь дополнительно возвращает поля `hint` и `topupUrl`. `hint` — короткая подсказка на английском: месячная AI-квота и баланс портала исчерпаны, и администратор портала может пополнить баланс, чтобы возобновить работу. `topupUrl` — ссылка, которую администратор открывает для пополнения. Поля аддитивны: прежние поля ответа (`reason`, `resetAt`) не изменились, а ветки `reason: breaker` и `reason: wallet_off` их не несут. Так агент-клиент может передать человеку путь к пополнению. Ошибку возвращают вызовы моделей, см. [POST /v1/chat/completions](/docs/ai/chat/completions).

### FIX-0712-2: `sleep-now` на сервере с давно прошедшим расчётным пробуждением теперь честно усыпляет

**Было**

Для сервера с включённым расписанием пробуждения вызов `POST /v1/infra/servers/:id/sleep-now` мог навсегда возвращать `{ data: { slept: false, reason: "WAKE_IMMINENT" } }`, если запланированное пробуждение осталось в далёком прошлом (например, сервер разбудили вне расписания). Сервер никогда не засыпал и держал тариф включённым круглосуточно.

**Стало**

Пробуждение, которое осталось в прошлом дальше допуска расписания (запас плюс обычное время подготовки сервера), больше не считается неминуемым: `sleep-now` усыпляет сервер и отвечает `{ success: true }`, а следующее пробуждение переносится на ближайшее окно расписания. `WAKE_IMMINENT` остаётся штатным ответом только для действительно близкого пробуждения.
