#Разбудить сервер
POST /v1/infra/servers/:id/wake
Пробуждает сервер из sleeping или provisioning. В отличие от `/start`, /wake поддерживает блокирующий режим через ?wait=true — ответ возвращается только когда сервер полностью готов (виртуальная машина запущена и туннель подключился) или сработал таймаут. Используйте блокирующий режим, когда клиенту нужна готовность перед следующим шагом (cron-задача, триггерный вызов), и асинхронный — когда можно подождать на опросе.
#Параметры
| Параметр | В | Тип | Обяз. | По умолч. | Описание |
|---|---|---|---|---|---|
id |
path | string (UUID) | да | — | ID сервера в статусе sleeping или provisioning |
wait |
query | string | нет | — | true — блокирующий режим: ответ вернётся только когда сервер готов (до 4.5 минут) или сработает таймаут. Любое другое значение — асинхронный режим, ответ сразу |
Тело запроса пустое.
#Примеры
#curl — личный ключ
# Асинхронный вызов — ответ сразу, готовность проверяйте опросом
curl -X POST -H "X-Api-Key: YOUR_API_KEY" \
https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/wake
# Блокирующий — ждёт готовности до ~4.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: showпользователю 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, административный блок, нарушения безопасности) |
| 404 | NOT_FOUND |
Сервер не в статусе sleeping/provisioning, удалён или принадлежит другому API-ключу |
| 422 | VM_MISSING |
У записи нет externalId — виртуальная машина не создана у провайдера. Удалите сервер и создайте новый |
| 429 | RATE_LIMIT_EXCEEDED |
Превышен общий лимит запросов платформы |
| 502 | PROVIDER_ERROR |
Облачный провайдер вернул ошибку при запуске виртуальной машины |
| 504 | WAKE_TIMEOUT |
Блокирующий ?wait=true не дождался готовности (таймаут ~4.5 минуты). Сервер возвращается в sleeping — попробуйте снова |
Полный список общих ошибок API — Ошибки.
#Известные особенности
- Поведение при таймауте
?wait=true. Если за ~4.5 минуты виртуальная машина не поднялась, эндпоинт возвращает504 WAKE_TIMEOUTи пробует откатить сервер вsleeping— чтобы квота не висела на «вечно зависшем» сервере. Поможет повторный/wakeили `/repair`. - Rich-error поля для AI-агентов. При 402/403 тело ошибки дополнительно содержит
userMessage(переведённая формулировка для пользователя),alternatives(список путей решения) иhint(совет AI-агенту, повторять автоматически или нет). Используйте эти поля в UI вместо гологоcode/message. /wakeредко нужен явно. Любое обращение к HTTPS-субдомену сервера само инициирует пробуждение BLACKHOLE-сервера. Явный/wakeнужен, когда:- Клиенту нужен программный gate «сначала разбуди, потом делай» — через
wait=true. - Сервер помечен
preventWake=true(биллинговая блокировка, требует ручного действия).
- Клиенту нужен программный gate «сначала разбуди, потом делай» — через
- Проверка доступности ДО вызова. Перед
/wakeвызывайте `GET /v1/me` и смотритеcapabilities.servers.wake.available. Еслиfalse, пользователю нужно совершить действие (пополнить баланс, обновить тариф) до того, как пробуждение станет возможным. - Для
error-сервера/wakeне подходит — используйте `/start` или `/repair`.
#Смотрите также
- Запустить сервер —
POST /v1/infra/servers/:id/start— ручной старт без блокировки. - Усыпить сейчас — обратная операция.
- Восстановить туннель — если сервер проснулся, но туннель не подключается.
- Тариф и trial — контекст для 402-ошибок.