Для AI-агентов: markdown этой страницы — /docs-content/infra/lifecycle/wake.md индекс документации — /llms.txt
Разбудить сервер
POST /v1/infra/servers/:id/wake
Пробуждает сервер из sleeping или provisioning. В отличие от /start, /wake поддерживает блокирующий режим через ?wait=true — ответ возвращается только когда сервер полностью готов (виртуальная машина запущена и туннель подключился) или сработал таймаут. Пока платформа ждёт, она сама переспрашивает облако о состоянии машины и повторяет команду запуска, если та не доехала. Подключённый туннель считается доказательством готовности, даже если статус сервера ещё не успел обновиться. Используйте блокирующий режим, когда клиенту нужна готовность перед следующим шагом (cron-задача, триггерный вызов), и асинхронный — когда можно подождать на опросе.
Параметры
| Параметр | В | Тип | Обяз. | По умолч. | Описание |
|---|---|---|---|---|---|
id |
path | string (UUID) | да | — | ID сервера в статусе sleeping или provisioning |
wait |
query | string | нет | — | true — блокирующий режим: ответ вернётся только когда сервер готов (до 6.5 минут) или сработает таймаут. Любое другое значение — асинхронный режим, ответ сразу |
Тело запроса пустое.
Примеры
curl — личный ключ
# Асинхронный вызов — ответ сразу, готовность проверяйте опросом
curl -X POST -H "X-Api-Key: YOUR_API_KEY" \
https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/wake
# Блокирующий — ждёт готовности до ~6.5 минут
curl -X POST -H "X-Api-Key: YOUR_API_KEY" \
"https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/wake?wait=true"
curl — OAuth-приложение
curl -X POST -H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
"https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/wake?wait=true"
JavaScript — личный ключ
// Блокирующий вариант — проще всего для последующих шагов
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}/wake?wait=true`,
{ method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY' } }
)
const body = await res.json()
if (!body.success) {
// Rich-error: показать пользователю userMessage, предложить alternatives
console.error(body.error.userMessage ?? body.error.message)
if (body.error.alternatives) console.log('Варианты:', body.error.alternatives)
throw new Error(body.error.code)
}
console.log(`Сервер готов: ${body.data.appUrl}`)
JavaScript — OAuth-приложение
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}/wake?wait=true`,
{
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
}
)
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | true при успешном пробуждении |
data.id |
string (UUID) | ID сервера |
data.status |
string | Актуальный статус в нижнем регистре (running при wait=true успехе, provisioning в асинхронном режиме) |
data.blackholeStatus |
string | Состояние туннеля (CONNECTED в блокирующем при успехе) |
data.appUrl |
string | null | HTTPS-адрес приложения |
Пример ответа
Успешное пробуждение (?wait=true):
{
"success": true,
"data": {
"id": "e765edfc-ba0a-43de-b8ea-838dd872c522",
"status": "running",
"blackholeStatus": "CONNECTED",
"appUrl": "https://app-05b67cf7.vibecode.bitrix24.tech"
}
}
Пример ответа при ошибке
402 — коммерческий тариф обязателен (расширенный формат ошибки для AI-агентов):
{
"success": false,
"error": {
"code": "COMMERCIAL_PLAN_REQUIRED",
"message": "Waking this server requires a commercial Bitrix24 plan or an active trial",
"userMessage": "Для пробуждения сервера нужен коммерческий тариф Битрикс24 или активный trial. Оформите тариф на https://www.bitrix24.ru/prices/",
"alternatives": [
"Обновить тариф Битрикс24 и повторить",
"Перейти на AI Router с BYOK-ключами — он работает на любом тарифе"
],
"hint": "Не повторяйте автоматически — нужно действие пользователя"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 401 | INVALID_API_KEY |
Неверный или просроченный API-ключ |
| 402 | COMMERCIAL_PLAN_REQUIRED |
Бесплатный тариф и trial недоступен — обновите тариф Битрикс24 |
| 402 | TRIAL_EXPIRED |
Trial использован и завершился |
| 402 | BILLING_EXHAUSTED |
Баланс Вайбкод исчерпан — пополните |
| 402 | ACCOUNT_FROZEN |
Баланс заморожен |
| 403 | SERVER_WAKE_BLOCKED |
Пробуждение заблокировано не из-за биллинга (завершённый trial, административный блок, нарушения безопасности). У galaxy-приложения тем же кодом отвечает запрет пробуждения на хосте-галактике |
| 403 | INFRA_FORBIDDEN_FOR_COWORK_KEY |
Вызов сделан ключом Cowork/Code — такой ключ работает только с данными, изменяющие операции ему закрыты. Что делать — Проектный ключ для деплоя |
| 404 | NOT_FOUND |
Сервер не в статусе sleeping/provisioning, удалён или привязан к другому API-ключу, и вы не состоите в его команде разработки |
| 404 | GALAXY_HOST_NOT_FOUND |
Galaxy-приложение: хост-галактика, на которой оно размещено, не найдена |
| 422 | VM_MISSING |
У записи нет externalId — виртуальная машина не создана у провайдера. Удалите сервер и создайте новый |
| 422 | SERVER_WRONG_STATE |
Galaxy-приложение, код которого ни разу не загружали, либо приложение в статусе error: /wake не восстанавливает упавшую сборку. В error.message — вызов загрузки кода, которым это лечится |
| 422 | CREDENTIAL_MISSING |
Galaxy-приложение: у хоста-галактики нет привязанного доступа к облачному провайдеру — обратитесь в поддержку |
| 429 | RATE_LIMITED |
Превышен лимит запросов. В ответе приходит заголовок Retry-After с рекомендованной паузой |
| 502 | PROVIDER_ERROR |
Облачный провайдер вернул ошибку при запуске виртуальной машины |
| 503 | WAKE_TIMEOUT |
Блокирующий ?wait=true не дождался готовности (таймаут ~6.5 минуты): машина так и не поднялась или туннель не подключился. Сервер возвращается в sleeping — повторный вызов безопасен |
Полный список общих ошибок API — Ошибки.
Известные особенности
- Поведение при таймауте
?wait=true. Если за ~6.5 минуты виртуальная машина не поднялась, эндпоинт возвращает503 WAKE_TIMEOUTи пробует откатить сервер вsleeping— чтобы квота не висела на «вечно зависшем» сервере. Внутри этого окна платформа повторяет команду запуска, если облако её потеряло, поэтому таймаут означает, что машина действительно не поднялась, а не что команда не дошла. Поможет повторный/wakeили/repair. - Поля расширенной ошибки для AI-агентов. При 402/403 тело ошибки дополнительно содержит
userMessage(переведённая формулировка для пользователя),alternatives(список путей решения) иhint(совет AI-агенту, повторять автоматически или нет). Используйте эти поля в UI вместо гологоcode/message. - Пробуждение по обращению к субдомену срабатывает не на каждый запрос. Оно запускается в четырёх случаях: у сервера политика доступа
PUBLIC, посетитель авторизован, запрос пришёл с токеном доступа режимаapi-bearer, получатель открыл ссылку режимаshare-url. Сервер с запретом на пробуждение не поднимется и в этих случаях — см. пункт ниже. Запрос без авторизации к серверу с любой другой политикой, включаяOWNER_ONLYпо умолчанию, оставляет сервер в статусеsleeping: обычный запрос получает страницу входа со статусом200, а API-клиент — запрос с заголовкомAccept: application/json,Authorization: BearerилиX-Requested-With: XMLHttpRequest, а также любой запрос по пути/api/— получает401 BH_LOGIN_REQUIRED. На сервере с политикойPUBLICзапросыGETиHEADот поисковых роботов и автоматических клиентов — напримерcurl,wget,python-requests,go-http-client,java/, браузеры без интерфейса и запрос без заголовкаUser-Agent— машину не поднимают, чтобы обход роботом не держал её включённой. На таком сервере запросыPOST,PUT,PATCHиDELETEбудят её от любого клиента: это вызовы вебхуков и API, а не обход. Из скрипта и из консоли поднимайте сервер явным/wakeсwait=true— тогда ответ придёт, когда сервер уже принимает запросы. - Сервер с флагом
preventWakeвызов/wakeне поднимает — коды отказа в таблице выше. Запрет ставит платформа при заморозке баланса, окончании пробного периода и административной блокировке, а сервер агента или бота получает его при любой остановке — из карточки или вызовом/sleep-now. Отдельный сервер поднимает/start: он снимает запрет, но заморозку баланса не обходит. У galaxy-приложения запрет на хосте блокирует и/start— см. Galaxy-приложение. - Проверка доступности ДО вызова. Перед
/wakeвызывайтеGET /v1/meи смотритеcapabilities.servers.wake.available. Еслиfalse, пользователю нужно совершить действие (пополнить баланс, обновить тариф) до того, как пробуждение станет возможным. - Публичный адрес машины после пробуждения другой. Проснувшаяся машина получает адрес заново, поэтому поле
ipвGET /v1/infra/servers/:idпосле каждого цикла сна отдаёт новое значение. Это относится ко всем тарифам, включая невытесняемые. То, что обращается к серверу по адресу — запись DNS, внешний мониторинг, — переводите на HTTPS-субдомен из поляappUrl: пробуждение его не меняет. Обратное направление так не лечится: когда внешний сервис пускает только по списку разрешённых IP, подставить в этот список нечего — постоянного исходящего адреса платформа не даёт ни в одной модели размещения, подробности в разделе Исходящий IP. - Для
error-сервера/wakeне подходит — используйте/startили/repair.
Galaxy-приложения (`kind=GALAXY_APP`)
Параметр ?wait=true на galaxy-приложении ожидания готовности не даёт: ответ приходит сразу, кода WAKE_TIMEOUT здесь не бывает. После холодного старта хоста приложение какое-то время остаётся в статусе sleeping — отслеживайте готовность опросом GET /v1/infra/servers/:id.
Полная карта операций жизненного цикла приложения — Galaxy-приложение.