[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-infra\u002Flifecycle\u002Freboot":3,"docs-tabs-infra\u002Flifecycle\u002Freboot":6},{"content":4,"lastmod":5},"\n## Перезагрузить сервер\n\n`POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Freboot`\n\nПерезагружает работающий сервер у облачного провайдера. Во время перезагрузки сервер переходит в `provisioning` и возвращается в `running` через 30–90 секунд. Операция атомарная: внутренний guard на уровне базы предотвращает гонки, если одновременно пришло несколько вызовов. Если провайдер не поддерживает перезагрузку — возвращается 501 и статус откатывается на `running`.\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | Описание |\n|----------|---|-----|:-----:|----------|\n| `id` | path | string (UUID) | да | ID сервера в статусе `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\u002Freboot\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\u002Freboot\n```\n\n### JavaScript — личный ключ\n\n```javascript\nawait fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Freboot`,\n  { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY' } }\n)\n\n\u002F\u002F Опрос готовности после перезагрузки\nwhile (true) {\n  await new Promise(r => setTimeout(r, 5000))\n  const res = await fetch(\n    `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}`,\n    { headers: { 'X-Api-Key': 'YOUR_API_KEY' } }\n  )\n  const { data } = await res.json()\n  if (data.status === 'running' && data.blackholeStatus === 'CONNECTED') break\n}\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nawait fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Freboot`,\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\n## Пример ответа\n\n```json\n{ \"success\": true }\n```\n\n## Пример ответа при ошибке\n\n422 — сервер существует, но не в статусе `running`. В ответе — текущее состояние и доступные действия:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SERVER_WRONG_STATE\",\n    \"message\": \"Server is SLEEPING; \u002Freboot requires RUNNING.\",\n    \"userMessage\": \"Server is currently SLEEPING. Reboot only applies to a RUNNING server.\",\n    \"currentState\": { \"status\": \"SLEEPING\", \"blackholeStatus\": \"DISCONNECTED\", \"hasExternalId\": true },\n    \"availableActions\": [\"wake\", \"start\", \"repair\", \"delete\"]\n  }\n}\n```\n\n409 — статус сервера изменился во время операции (гонка):\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"CONFLICT\",\n    \"message\": \"Server state changed during operation\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|----------|\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный или просроченный API-ключ |\n| 404 | `SERVER_NOT_FOUND` | Сервера с таким `id` нет — удалён или принадлежит другому API-ключу |\n| 422 | `SERVER_WRONG_STATE` | Сервер существует, но не в статусе `running`. В `error.currentState` — текущее состояние, в `error.availableActions` — что можно сделать сейчас |\n| 422 | `VM_MISSING` | У серверной записи нет облачной ВМ (создание не завершилось или ВМ удалена вручную) — удалите сервер и создайте заново |\n| 409 | `CONFLICT` | Гонка состояний — статус сервера изменился во время операции. Повторите запрос после проверки [`GET \u002Fv1\u002Finfra\u002Fservers\u002F:id`](\u002Fdocs\u002Finfra\u002Fservers\u002Fget) |\n| 429 | `RATE_LIMITED` | Превышен общий лимит запросов платформы |\n| 501 | `NOT_SUPPORTED` | Облачный провайдер не поддерживает перезагрузку. Используйте последовательность [`\u002Fstop`](.\u002Fstop.md) → [`\u002Fstart`](.\u002Fstart.md) |\n| 502 | `PROVIDER_ERROR` | Облачный провайдер вернул ошибку. Статус сервера автоматически откатывается на `running` |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Атомарный переход `running → provisioning`.** База обновляется одним `updateMany` с условием `status = 'RUNNING'`. Если в тот же момент прилетел ещё один `\u002Freboot` или `\u002Fstop`, второй вызов получит 409 `CONFLICT`.\n- **Автоматический откат при ошибке провайдера.** Если `adapter.rebootServer()` кинул исключение, запись возвращается к статусу `running` — чтобы клиент не остался с «зависшим» `provisioning`.\n- **Для перезапуска только приложения** (без перезагрузки виртуальной машины) используйте [`POST \u002Fexec`](\u002Fdocs\u002Finfra\u002Fdeploy\u002Fexec) с командой `systemctl restart app` — это в десятки раз быстрее и не прерывает туннель.\n- **После перезагрузки ждите оба поля.** Чтобы сервер был готов к работе, нужны одновременно `status: \"running\"` и `blackholeStatus: \"CONNECTED\"` — туннель переподключается после старта виртуальной машины.\n\n## Смотрите также\n\n- [Запустить сервер](.\u002Fstart.md) — `POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fstart`.\n- [Остановить сервер](.\u002Fstop.md) — `POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fstop`.\n- [Восстановить туннель](.\u002Frepair.md) — если туннель не восстанавливается после перезагрузки.\n- [Выполнить команду](\u002Fdocs\u002Finfra\u002Fdeploy\u002Fexec) — перезапуск приложения без перезагрузки виртуальной машины.\n","2026-07-10",{"start.md":7,"stop.md":8},"\n## Запустить сервер\n\n`POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fstart`\n\nПоднимает сервер из состояний `sleeping`, `error` или `provisioning`. Для `sleeping` виртуальная машина снова запускается у провайдера и возвращается к статусу `running` по мере готовности — вызов возвращает ответ сразу, не дожидаясь фактической готовности. Её нужно отслеживать опросом [`GET \u002Fv1\u002Finfra\u002Fservers\u002F:id`](\u002Fdocs\u002Finfra\u002Fservers\u002Fget). Для `error` с подключённым туннелем (`blackholeStatus: \"CONNECTED\"`) сервер сразу переводится в `running` без обращения к провайдеру. Для `provisioning` делается повторная попытка старта без сброса таймера ожидания. Для `running` сервера вызов возвращает 404.\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | Описание |\n|----------|---|-----|:-----:|----------|\n| `id` | path | string (UUID) | да | ID сервера |\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\u002Fstart\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\u002Fstart\n```\n\n### JavaScript — личный ключ\n\n```javascript\nawait fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Fstart`,\n  { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY' } }\n)\n\u002F\u002F Ждать готовности — опрашивать GET \u002Fv1\u002Finfra\u002Fservers\u002F:id\n```\n\n### JavaScript — OAuth-приложение\n\n```javascript\nawait fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Fstart`,\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\n## Пример ответа\n\n```json\n{ \"success\": true }\n```\n\n## Пример ответа при ошибке\n\n404 — сервер в статусе `running`\u002F`deleted` либо чужой:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"NOT_FOUND\",\n    \"message\": \"Sleeping, error, or provisioning server not found\"\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 | `ACCOUNT_FROZEN` | Баланс Вайбкод заморожен. Пополните и повторите |\n| 404 | `NOT_FOUND` | Сервер в статусе `running`\u002F`deleted` либо принадлежит другому API-ключу |\n| 409 | `CONFLICT` | Статус сервера изменился во время операции — повторите запрос |\n| 422 | `VM_MISSING` | У записи нет `externalId` — виртуальная машина не создана или удалена извне. Удалите сервер и создайте новый |\n| 429 | `RATE_LIMITED` | Превышен общий лимит запросов платформы |\n| 502 | `PROVIDER_ERROR` | Облачный провайдер вернул ошибку при запуске виртуальной машины |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Блокирующий вариант.** Если клиенту нужна полная готовность сервера перед следующим шагом — используйте [`POST \u002Fwake?wait=true`](.\u002Fwake.md) вместо `\u002Fstart`. Он ждёт `status: \"running\"` + `blackholeStatus: \"CONNECTED\"` до ~6.5 минут.\n- **Ручной `\u002Fstart` обходит `preventWake`.** В отличие от автоматического пробуждения при обращении к субдомену, явный `POST \u002Fstart` снимает флаг `preventWake` и запускает сервер даже если он был заблокирован. Биллинговые блокировки (`ACCOUNT_FROZEN`) обходятся отдельным пополнением, не через `\u002Fstart`.\n- **Для `running` возвращает 404, не 409.** Сознательный выбор: сервер уже в нужном состоянии, делать нечего. Для перезагрузки — [`POST \u002Freboot`](.\u002Freboot.md).\n\n## Смотрите также\n\n- [Остановить сервер](.\u002Fstop.md) — `POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fstop`.\n- [Разбудить сервер (с `?wait=true`)](.\u002Fwake.md) — блокирующий вариант с ожиданием готовности.\n- [Немедленно усыпить](.\u002Fsleep-now.md) — обратная операция.\n- [Обновить статус](.\u002Frefresh.md) — принудительно опросить провайдера после старта.\n- [Получить сервер](\u002Fdocs\u002Finfra\u002Fservers\u002Fget) — опрос готовности.\n","\n## Остановить сервер\n\n`POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fstop`\n\nШтатная остановка работающего сервера. Виртуальная машина останавливается у провайдера, статус меняется на `sleeping`, открытая биллинг-транзакция по рабочему периоду закрывается, открывается транзакция по сонному периоду (тариф sleep существенно ниже). Работает для любого режима — и BLACKHOLE, и OPEN. Сервер можно снова запустить через [`POST \u002Fstart`](.\u002Fstart.md) или разбудить автоматически обращением к субдомену.\n\n## Параметры\n\n| Параметр | В | Тип | Обяз. | Описание |\n|----------|---|-----|:-----:|----------|\n| `id` | path | string (UUID) | да | ID сервера |\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\u002Fstop\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\u002Fstop\n```\n\n### JavaScript — личный ключ\n\n```javascript\nawait fetch(\n  `https:\u002F\u002Fvibecode.bitrix24.tech\u002Fv1\u002Finfra\u002Fservers\u002F${serverId}\u002Fstop`,\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}\u002Fstop`,\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\n## Пример ответа\n\n```json\n{ \"success\": true }\n```\n\n## Пример ответа при ошибке\n\n422 — сервер существует, но не в статусе `running` (например, `sleeping`). В ответе — текущее состояние и доступные действия:\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SERVER_WRONG_STATE\",\n    \"message\": \"Server is SLEEPING; \u002Fstop requires RUNNING.\",\n    \"userMessage\": \"Server is currently SLEEPING. Stop only applies to a RUNNING server.\",\n    \"currentState\": { \"status\": \"SLEEPING\", \"blackholeStatus\": \"DISCONNECTED\", \"hasExternalId\": true },\n    \"availableActions\": [\"wake\", \"start\", \"repair\", \"delete\"]\n  }\n}\n```\n\n404 — сервера с таким `id` нет (удалён или принадлежит другому API-ключу):\n\n```json\n{\n  \"success\": false,\n  \"error\": {\n    \"code\": \"SERVER_NOT_FOUND\",\n    \"message\": \"Server not found\"\n  }\n}\n```\n\n## Ошибки\n\n| HTTP | Код | Описание |\n|------|-----|----------|\n| 401 | `MISSING_API_KEY` | Не передан заголовок `X-Api-Key` |\n| 401 | `INVALID_API_KEY` | Неверный или просроченный API-ключ |\n| 404 | `SERVER_NOT_FOUND` | Сервера с таким `id` нет — удалён или принадлежит другому API-ключу |\n| 422 | `SERVER_WRONG_STATE` | Сервер существует, но не в статусе `running`. В `error.currentState` — текущее состояние, в `error.availableActions` — что можно сделать сейчас |\n| 422 | `VM_MISSING` | У серверной записи нет облачной ВМ (создание не завершилось или ВМ удалена вручную) — удалите сервер и создайте заново |\n| 429 | `RATE_LIMITED` | Превышен общий лимит запросов платформы |\n| 502 | `PROVIDER_ERROR` | Облачный провайдер вернул ошибку при остановке |\n\nПолный список общих ошибок API — [Ошибки](\u002Fdocs\u002Ferrors).\n\n## Известные особенности\n\n- **Почему `sleeping`, а не `stopped`.** Это терминология Infrastructure API: остановленный сервер называется «спящим», потому что биллинг для него идёт по отдельному тарифу `sleepPriceMonthly` (см. [тарифы провайдера](\u002Fdocs\u002Finfra\u002Fproviders\u002Fplans)) — ниже, чем рабочий. Значение `stopped` в v1-ответах не встречается.\n- **`\u002Fstop` сбрасывает `preventWake`** (автоматический флаг, блокирующий пробуждение) — после остановки сервер снова можно пробудить автоматически обращением к субдомену или через [`\u002Fwake`](.\u002Fwake.md).\n- **Для BLACKHOLE есть альтернатива — [`\u002Fsleep-now`](.\u002Fsleep-now.md).** Функционально результат идентичный. `\u002Fsleep-now` используется из UI-кнопки «Усыпить» и явно помечен как BH-специфический. `\u002Fstop` — универсальный для любого режима.\n\n## Смотрите также\n\n- [Запустить сервер](.\u002Fstart.md) — `POST \u002Fv1\u002Finfra\u002Fservers\u002F:id\u002Fstart`.\n- [Немедленно усыпить](.\u002Fsleep-now.md) — синоним для BLACKHOLE.\n- [Настроить авто-сон](.\u002Fsleep.md) — чтобы сервер засыпал сам через N минут простоя.\n- [Удалить сервер](\u002Fdocs\u002Finfra\u002Fservers\u002Fdelete) — полное удаление виртуальной машины.\n"]