[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-infra\u002Flifecycle\u002Fsleep-now":3,"docs-tabs-infra\u002Flifecycle\u002Fsleep-now":6},{"content":4,"lastmod":5},"\n## Усыпить сейчас\n\n`POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fsleep-now`\n\nНемедленно усыпляет работающий BLACKHOLE-сервер: виртуальная машина останавливается у провайдера, статус меняется на `sleeping`, рабочая биллинг-транзакция финализируется и открывается сонная (тариф sleep ниже). Полезно для разовой экономии, когда вы знаете, что сервер не понадобится в ближайшие часы. Для автоматической остановки через N минут простоя используйте [`PATCH \u002Fsleep`](.\u002Fsleep.md).\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | Описание |\n|----------|---|-----|:-----:|----------|\n| `id` | path | string (UUID) | да | ID сервера в режиме `BLACKHOLE`, статус `running` |\n\nТело запроса пустое.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\ncurl -X POST -H \"X-Api-Key: YOUR_API_KEY\" \\\n  https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Fsleep-now\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Fsleep-now\n```\n\n### JavaScript — личный ключ\n\n```javascript\nawait fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Fsleep-now`,\n  { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY' } }\n)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nawait fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Fsleep-now`,\n  {\n    method: 'POST',\n    headers: {\n      'X-Api-Key': 'YOUR_APP_KEY',\n      'Authorization': 'Bearer USER_SESSION_TOKEN',\n    },\n  }\n)\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|----------|\n| `success` | boolean | `true` при успешном переходе в `sleeping` |\n\n## Пример ответа\n\n```json\n{ \"success\": true }\n```\n\n## Пример ответа при ошибке\n\n400 — сервер не в BLACKHOLE:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BLACKHOLE_ONLY\",\n    \"message\": \"Sleep is only available for BLACKHOLE servers\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|----------|\n| 400 | `BLACKHOLE_ONLY` | Сервер в режиме `OPEN`. Для OPEN-серверов используйте [`\u002Fstop`](.\u002Fstop.md) |\n| 400 | `NOT_RUNNING` | Сервер не в статусе `running` (уже спит, в ошибке или создаётся) |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный или просроченный API-ключ |\n| 404 | `NOT_FOUND` | Сервер не существует или принадлежит другому API-ключу |\n| 409 | `CONFLICT` | Гонка состояний — статус сервера изменился во время операции |\n| 429 | `RATE_LIMITED` | Превышен общий лимит запросов платформы |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **На OPEN-сервере используйте [`\u002Fstop`](.\u002Fstop.md).** Функционально для BLACKHOLE `\u002Fsleep-now` и `\u002Fstop` эквивалентны, но `\u002Fsleep-now` помечен как BH-специфический и для OPEN вернёт `BLACKHOLE_ONLY`.\n- **Автоматическое пробуждение сохраняется.** В отличие от административного блока (`preventWake=true`), ручной `\u002Fsleep-now` не ставит `preventWake` — сервер проснётся сам при обращении к HTTPS-субдомену или по вызову [`\u002Fdeploy`](\u002Fdocs\u002Finfra\u002Fdeploy\u002Fdeploy).\n- **Атомарный переход.** База обновляется одним `updateMany` с фильтром `status='RUNNING'` — гонки двух одновременных вызовов приводят ко второму `CONFLICT`, а не к двойному списанию.\n\n## Смотрите также\n\n- [Настроить авто-сон](.\u002Fsleep.md) — `PATCH \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fsleep` — сервер засыпает сам через N минут.\n- [Остановить сервер](.\u002Fstop.md) — универсальная остановка (работает и для OPEN).\n- [Запустить сервер](.\u002Fstart.md) — пробудить из `sleeping`.\n- [Разбудить с ожиданием](.\u002Fwake.md) — `POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fwake?wait=true` — блокирующее пробуждение.\n","2026-06-23",{"sleep.md":7,"wake.md":8},"\n## Настроить авто-сон\n\n`PATCH \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fsleep`\n\nНастраивает таймер автоматического засыпания BLACKHOLE-сервера. При отсутствии HTTP-запросов или SSH-активности в течение `sleepAfterMinutes` минут сервер автоматически останавливается. При следующем обращении просыпается сам. Передача `null` отключает авто-сон.\n\n`null` отключает только наш авто-сон по бездействию. Если сервер стоит на **вытесняемом (preemptible)** тарифе (`bc-agent`, `bc-micro` — см. [Тарифы](\u002Fdocs\u002Finfra\u002Fproviders\u002Fplans)), облако всё равно принудительно перезапускает такую машину примерно раз в сутки, с коротким окном недоступности; платформа автоматически будит её обратно. Для по-настоящему непрерывной 24\u002F7-нагрузки выбирайте **невытесняемый** тариф (`bc-small` и выше) — на нём `null` действительно означает работу до ручной остановки.\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | Описание |\n|----------|---|-----|:-----:|----------|\n| `id` | path | string (UUID) | да | ID сервера в режиме BLACKHOLE |\n\n## Поля запроса (body)\n\n| Поле | Тип | Обяз. | Описание |\n|------|-----|:-----:|----------|\n| `sleepAfterMinutes` | number \\| null | **да** | Таймаут простоя в минутах. Допустимые значения: `15`, `30`, `60`, `240`, или `null` (для отключения авто-сна). Другие значения отклоняются с `VALIDATION_ERROR` |\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\n# Включить авто-сон через 60 минут простоя\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Fsleep \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"sleepAfterMinutes\": 60}'\n\n# Отключить авто-сон\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Fsleep \\\n  -H \"X-Api-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"sleepAfterMinutes\": null}'\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X PATCH https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Fsleep \\\n  -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"sleepAfterMinutes\": 60}'\n```\n\n### JavaScript — личный ключ\n\n```javascript\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Fsleep`,\n  {\n    method: 'PATCH',\n    headers: {\n      'X-Api-Key': 'YOUR_API_KEY',\n      'Content-Type': 'application\u002Fjson',\n    },\n    body: JSON.stringify({ sleepAfterMinutes: 60 }),\n  }\n)\nconst { data } = await res.json()\nconsole.log(`Авто-сон через ${data.sleepAfterMinutes} мин`)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nawait fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Fsleep`,\n  {\n    method: 'PATCH',\n    headers: {\n      'X-Api-Key': 'YOUR_APP_KEY',\n      'Authorization': 'Bearer USER_SESSION_TOKEN',\n      'Content-Type': 'application\u002Fjson',\n    },\n    body: JSON.stringify({ sleepAfterMinutes: null }),\n  }\n)\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|----------|\n| `success` | boolean | Всегда `true` при успехе |\n| `data.sleepAfterMinutes` | number \\| null | Актуальное значение таймаута (эхо переданного) |\n\n## Пример ответа\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"sleepAfterMinutes\": 60\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n400 — некорректное значение `sleepAfterMinutes`:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"sleepAfterMinutes must be 15, 30, 60, 240, or null\"\n  }\n}\n```\n\n400 — сервер не в BLACKHOLE:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"BLACKHOLE_ONLY\",\n    \"message\": \"Sleep settings are only available for BLACKHOLE servers\"\n  }\n}\n```\n\n400 — переход в «Всегда онлайн» при включённых окнах пробуждения:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"ALWAYS_ON_CONFLICT\",\n    \"message\": \"The server has enabled wake-schedule windows, which conflict with always-on (24\u002F7) mode. Delete or disable the wake windows first, or keep a sleep timeout.\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|----------|\n| 400 | `VALIDATION_ERROR` | `sleepAfterMinutes` не в списке `[15, 30, 60, 240, null]` |\n| 400 | `BLACKHOLE_ONLY` | Сервер в режиме `OPEN` — авто-сон недоступен |\n| 400 | `ALWAYS_ON_CONFLICT` | `null` на невытесняемом тарифе при включённых [окнах пробуждения](\u002Fdocs\u002Fchangelog) — сначала удалите или отключите окна |\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный или просроченный API-ключ |\n| 404 | `NOT_FOUND` | Сервер не существует, удалён или принадлежит другому API-ключу |\n| 429 | `RATE_LIMITED` | Превышен общий лимит запросов платформы |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Что считается активностью и сбрасывает таймер.** HTTP-обращения к приложению через туннель, активность на порту 22 (для OPEN-серверов) и exec-сессии Deploy API. Реальная активность проверяется раз в несколько минут через Gateway-метрики.\n- **Авто-пробуждение сохраняется.** Сервер, заснувший по таймеру, автоматически просыпается при следующем HTTP-запросе к HTTPS-субдомену или при вызове [`\u002Fdeploy`](\u002Fdocs\u002Finfra\u002Fdeploy\u002Fdeploy)\u002F[`\u002Fwake`](.\u002Fwake.md)\u002F[`\u002Fstart`](.\u002Fstart.md).\n- **Значение по умолчанию для новых серверов** — 60 минут. Текущее значение — в поле [`GET \u002Fv1\u002Finfra\u002Fservers\u002F:id`](\u002Fdocs\u002Finfra\u002Fservers\u002Fget).\n- **Агенты и managed-боты** создают свои серверы с `sleepAfterMinutes: null` — они должны оставаться в сети круглосуточно, чтобы отвечать на сообщения. Для обычных приложений такая настройка тоже допустима, но приведёт к постоянному списанию по рабочему тарифу. По умолчанию агент\u002Fбот создаётся на вытесняемом тарифе (дешевле), который облако перезапускает ~раз в сутки; для непрерывной работы включите опцию «Всегда онлайн» при создании — она ставит агента\u002Fбота на невытесняемый тариф.\n- **Взаимное исключение с расписанием пробуждения.** `sleepAfterMinutes: null` на невытесняемом тарифе означает «Всегда онлайн» — такой сервер несовместим с включёнными [окнами пробуждения](\u002Fdocs\u002Fchangelog): запрос отклоняется с `ALWAYS_ON_CONFLICT`. Верно и обратное — окно нельзя объявить на сервере «Всегда онлайн». Сначала удалите или отключите окна, либо оставьте числовой таймаут.\n- **Эндпоинт не меняет статус** — только обновляет конфигурацию. Чтобы усыпить сервер сразу, используйте [`POST \u002Fsleep-now`](.\u002Fsleep-now.md).\n\n## Смотрите также\n\n- [Усыпить сейчас](.\u002Fsleep-now.md) — немедленная остановка, не дожидаясь таймера.\n- [Запустить сервер](.\u002Fstart.md) — пробудить из `sleeping`.\n- [Тарифы провайдера](\u002Fdocs\u002Finfra\u002Fproviders\u002Fplans) — поле `sleepPriceMonthly` показывает тариф в режиме сна.\n- [Получить сервер](\u002Fdocs\u002Finfra\u002Fservers\u002Fget) — проверить текущее значение `sleepAfterMinutes`.\n","\n## Разбудить сервер\n\n`POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fwake`\n\nПробуждает сервер из `sleeping` или `provisioning`. В отличие от [`\u002Fstart`](.\u002Fstart.md), `\u002Fwake` поддерживает блокирующий режим через `?wait=true` — ответ возвращается только когда сервер полностью готов (виртуальная машина запущена **и** туннель подключился) или сработал таймаут. Используйте блокирующий режим, когда клиенту нужна готовность перед следующим шагом (cron-задача, триггерный вызов), и асинхронный — когда можно подождать на опросе.\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | По умолч. | Описание |\n|----------|---|-----|:-----:|-----------|----------|\n| `id` | path | string (UUID) | да | — | ID сервера в статусе `sleeping` или `provisioning` |\n| `wait` | query | string | нет | — | `true` — блокирующий режим: ответ вернётся только когда сервер готов (до 6.5 минут) или сработает таймаут. Любое другое значение — асинхронный режим, ответ сразу |\n\nТело запроса пустое.\n\n## Примеры\n\n### curl — личный ключ\n\n```bash\n# Асинхронный вызов — ответ сразу, готовность проверяйте опросом\ncurl -X POST -H \"X-Api-Key: YOUR_API_KEY\" \\\n  https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Fwake\n\n# Блокирующий — ждёт готовности до ~6.5 минут\ncurl -X POST -H \"X-Api-Key: YOUR_API_KEY\" \\\n  \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Fwake?wait=true\"\n```\n\n### curl — OAuth-приложение\n\n```bash\ncurl -X POST -H \"X-Api-Key: YOUR_APP_KEY\" \\\n  -H \"Authorization: Bearer USER_SESSION_TOKEN\" \\\n  \"https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002FSERVER_ID\u002Fwake?wait=true\"\n```\n\n### JavaScript — личный ключ\n\n```javascript\n\u002F\u002F Блокирующий вариант — проще всего для последующих шагов\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Fwake?wait=true`,\n  { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY' } }\n)\nconst body = await res.json()\nif (!body.success) {\n  \u002F\u002F Rich-error: показать пользователю userMessage, предложить alternatives\n  console.error(body.error.userMessage ?? body.error.message)\n  if (body.error.alternatives) console.log('Варианты:', body.error.alternatives)\n  throw new Error(body.error.code)\n}\nconsole.log(`Сервер готов: ${body.data.appUrl}`)\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nconst res = await fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Fwake?wait=true`,\n  {\n    method: 'POST',\n    headers: {\n      'X-Api-Key': 'YOUR_APP_KEY',\n      'Authorization': 'Bearer USER_SESSION_TOKEN',\n    },\n  }\n)\n```\n\n## Поля ответа\n\n| Поле | Тип | Описание |\n|------|-----|----------|\n| `success` | boolean | `true` при успешном пробуждении |\n| `data.id` | string (UUID) | ID сервера |\n| `data.status` | string | Актуальный статус (`RUNNING` при `wait=true` успехе, `PROVISIONING` в асинхронном режиме) |\n| `data.blackholeStatus` | string | Состояние туннеля (`CONNECTED` в блокирующем при успехе) |\n| `data.appUrl` | string \\| null | HTTPS-адрес приложения |\n\n## Пример ответа\n\nУспешное пробуждение (`?wait=true`):\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"id\": \"e765edfc-ba0a-43de-b8ea-838dd872c522\",\n    \"status\": \"RUNNING\",\n    \"blackholeStatus\": \"CONNECTED\",\n    \"appUrl\": \"https:\u002F\u002Fapp-05b67cf7.vibecode.bitrix24.tech\"\n  }\n}\n```\n\n## Пример ответа при ошибке\n\n402 — коммерческий тариф обязателен (расширенный формат ошибки для AI-агентов):\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"COMMERCIAL_PLAN_REQUIRED\",\n    \"message\": \"Waking this server requires a commercial Bitrix24 plan or an active trial\",\n    \"userMessage\": \"Для пробуждения сервера нужен коммерческий тариф Битрикс24 или активный trial. Оформите тариф на https:\u002F\u002Fwww.bitrix24.ru\u002Fprices\u002F\",\n    \"alternatives\": [\n      \"Обновить тариф Битрикс24 и повторить\",\n      \"Перейти на AI Router с BYOK-ключами — он работает на любом тарифе\"\n    ],\n    \"hint\": \"Не повторяйте автоматически — нужно действие пользователя\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|----------|\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный или просроченный API-ключ |\n| 402 | `COMMERCIAL_PLAN_REQUIRED` | Бесплатный тариф и trial недоступен — обновите тариф Битрикс24 |\n| 402 | `TRIAL_EXPIRED` | Trial использован и завершился |\n| 402 | `BILLING_EXHAUSTED` | Баланс Вайбкод исчерпан — пополните |\n| 402 | `ACCOUNT_FROZEN` | Баланс заморожен |\n| 403 | `SERVER_WAKE_BLOCKED` | Пробуждение заблокировано не из-за биллинга (завершённый trial, административный блок, нарушения безопасности) |\n| 404 | `NOT_FOUND` | Сервер не в статусе `sleeping`\u002F`provisioning`, удалён или принадлежит другому API-ключу |\n| 422 | `VM_MISSING` | У записи нет `externalId` — виртуальная машина не создана у провайдера. Удалите сервер и создайте новый |\n| 429 | `RATE_LIMITED` | Превышен лимит запросов. В ответе приходит заголовок `Retry-After` с рекомендованной паузой |\n| 502 | `PROVIDER_ERROR` | Облачный провайдер вернул ошибку при запуске виртуальной машины |\n| 503 | `WAKE_TIMEOUT` | Блокирующий `?wait=true` не дождался готовности (таймаут ~6.5 минуты). Сервер возвращается в `sleeping` — попробуйте снова |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Поведение при таймауте `?wait=true`.** Если за ~6.5 минуты виртуальная машина не поднялась, эндпоинт возвращает `503 WAKE_TIMEOUT` и пробует откатить сервер в `sleeping` — чтобы квота не висела на «вечно зависшем» сервере. Поможет повторный `\u002Fwake` или [`\u002Frepair`](.\u002Frepair.md).\n- **Поля расширенной ошибки для AI-агентов.** При 402\u002F403 тело ошибки дополнительно содержит `userMessage` (переведённая формулировка для пользователя), `alternatives` (список путей решения) и `hint` (совет AI-агенту, повторять автоматически или нет). Используйте эти поля в UI вместо голого `code`\u002F`message`.\n- **`\u002Fwake` не нужен при доступе через HTTPS-субдомен.** Любое обращение к HTTPS-субдомену сервера само инициирует пробуждение BLACKHOLE-сервера. Явный `\u002Fwake` нужен, когда:\n  - Клиенту нужен программный gate «сначала разбуди, потом делай» — через `wait=true`.\n  - Сервер помечен `preventWake=true` (биллинговая блокировка, требует ручного действия).\n- **Проверка доступности ДО вызова.** Перед `\u002Fwake` вызывайте [`GET \u002Fv1\u002Fme`](\u002Fdocs\u002Fkeys-auth) и смотрите `capabilities.servers.wake.available`. Если `false`, пользователю нужно совершить действие (пополнить баланс, обновить тариф) до того, как пробуждение станет возможным.\n- **Для `error`-сервера `\u002Fwake` не подходит** — используйте [`\u002Fstart`](.\u002Fstart.md) или [`\u002Frepair`](.\u002Frepair.md).\n\n## Смотрите также\n\n- [Запустить сервер](.\u002Fstart.md) — `POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fstart` — ручной старт без блокировки.\n- [Усыпить сейчас](.\u002Fsleep-now.md) — обратная операция.\n- [Восстановить туннель](.\u002Frepair.md) — если сервер проснулся, но туннель не подключается.\n- [Тариф и доступ](\u002Fdocs\u002Finfra#тариф-и-доступ) — контекст для 402-ошибок.\n"]