Для AI-агентов: markdown этой страницы — /docs-content/infra/lifecycle/run-mode.md индекс документации — /llms.txt

Сменить режим работы сервера

PATCH /v1/infra/servers/:id/run-mode

Переводит BLACKHOLE-сервер в один из трёх режимов работы: засыпает, когда нет запросов, работает по расписанию или работает круглосуточно. Режим определяет счёт за сервер, поэтому запрос либо выполняется целиком, либо отклоняется, ничего не изменив.

Если режимы работы не подключены для портала, запрос отклоняется с 400 RUN_MODE_UNAVAILABLE. Текущий режим при этом читается всегда — поля runMode и workSchedule в GET /v1/infra/servers/:id.

Параметры

Параметр Тип Обяз. Описание
Параметрid (path) Типstring Обяз.да ОписаниеID сервера в режиме BLACKHOLE. Источник — список серверов

Поля запроса (body)

Тело — одна из трёх форм, выбранная полем mode. Поле, которое выбранная форма не принимает, отклоняется с VALIDATION_ERROR, а не отбрасывается.

Поле Тип Обяз. Описание
Полеmode Типstring Обяз.да ОписаниеIDLE — засыпает, когда нет запросов. SCHEDULE — работает в окна расписания и спит вне их. ALWAYS — работает круглосуточно
ПолеidleMinutes Типnumber Обяз.при IDLE ОписаниеМинут без запросов до засыпания: 15, 30, 60 или 240
ПолеscheduleId Типstring Обяз.при SCHEDULE ОписаниеID расписания того же портала. Источник — библиотека расписаний

Примеры

curl — личный ключ

Terminal
curl -X PATCH https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/run-mode \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"mode": "SCHEDULE", "scheduleId": "WORK_SCHEDULE_ID"}'

curl — OAuth-приложение

Terminal
curl -X PATCH https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/run-mode \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode": "SCHEDULE", "scheduleId": "WORK_SCHEDULE_ID"}'

JavaScript — личный ключ

javascript
const res = await fetch(
  `https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}/run-mode`,
  {
    method: 'PATCH',
    headers: {
      'X-Api-Key': 'YOUR_API_KEY',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ mode: 'SCHEDULE', scheduleId: workScheduleId }),
  }
)
const { data } = await res.json()
console.log(`Режим: ${data.runMode}, ближайшее пробуждение: ${data.nextScheduledWakeAt}`)

JavaScript — OAuth-приложение

javascript
const res = await fetch(
  `https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}/run-mode`,
  {
    method: 'PATCH',
    headers: {
      'X-Api-Key': 'YOUR_APP_KEY',
      'Authorization': 'Bearer USER_SESSION_TOKEN',
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ mode: 'SCHEDULE', scheduleId: workScheduleId }),
  }
)
const { data } = await res.json()

Поля ответа

Ответ — поля режима, прочитанные после записи. Та же форма приходит в GET /v1/infra/servers/:id.

Поле Тип Описание
Полеsuccess Типboolean ОписаниеВсегда true при успехе
Полеdata.runMode Типstring ОписаниеРежим после записи: IDLE, SCHEDULE или ALWAYS
Полеdata.idleSleepProtected Типboolean Описаниеtrue, если сон по простою недоступен: сервер должен оставаться на связи. Поле сообщает только решение и не раскрывает ботов или API-ключи
Полеdata.sleepAfterMinutes Типnumber | null ОписаниеСохранённый порог простоя в минутах. В режиме SCHEDULE это запомненное значение: оно не действует, пока назначено расписание, и не стирается им
Полеdata.workSchedule Типobject | null ОписаниеНазначенное расписание или null
Полеdata.workSchedule.id Типstring ОписаниеID расписания
Полеdata.workSchedule.name Типstring | null ОписаниеНазвание своего расписания. У готового расписания платформы null — оно опознаётся по presetKey
Полеdata.workSchedule.presetKey Типstring | null ОписаниеКлюч готового расписания: weekdays-9-18, weekdays-9-19, weekdays-9-20, weekdays-8-19, weekdays-8-20, daily-9-21. У своего — null
Полеdata.workSchedule.timezone Типstring ОписаниеЧасовой пояс IANA, в котором читаются окна
Полеdata.workSchedule.windows Типarray ОписаниеОкна по дням недели: isoDay от 1 (понедельник) до 7, start и end — местное время ЧЧ:ММ. В одном дне бывает два окна
Полеdata.nextScheduledWakeAt Типstring (ISO 8601) | null ОписаниеБлижайшее запланированное пробуждение с учётом опережения. null, если пробуждений не запланировано

Пример ответа

JSON
{
  "success": true,
  "data": {
    "runMode": "SCHEDULE",
    "idleSleepProtected": false,
    "sleepAfterMinutes": 30,
    "workSchedule": {
      "id": "cmfp4r0q2000a1ocg7h2k9x3d",
      "name": "Смены склада",
      "presetKey": null,
      "timezone": "Europe/Moscow",
      "windows": [
        { "isoDay": 1, "start": "09:00", "end": "18:00" },
        { "isoDay": 2, "start": "09:00", "end": "13:00" },
        { "isoDay": 2, "start": "14:00", "end": "24:00" }
      ]
    },
    "nextScheduledWakeAt": "2026-09-21T05:51:00.000Z"
  }
}

Пример ответа при ошибке

400 — сон по простою запрошен для сервера, который должен оставаться на связи:

JSON
{
  "success": false,
  "error": {
    "code": "AGENT_IDLE_SLEEP_FORBIDDEN",
    "message": "idle sleep is not available while the server must stay reachable"
  }
}

Ошибки

HTTP Код Описание
HTTP400 КодVALIDATION_ERROR ОписаниеТело не подходит ни под одну из трёх форм: неизвестное поле, idleMinutes вне 15, 30, 60, 240, нет scheduleId
HTTP400 КодRUN_MODE_UNAVAILABLE ОписаниеРежимы работы не подключены для портала
HTTP400 КодBLACKHOLE_ONLY ОписаниеСервер не в режиме BLACKHOLE
HTTP400 КодGALAXY_NOT_SUPPORTED ОписаниеСервер — хост галактики. Своего режима у хоста нет: он работает, пока работает хоть одно его приложение, поэтому режим задаётся приложениям
HTTP400 КодAGENT_IDLE_SLEEP_FORBIDDEN ОписаниеЗапрошен IDLE для сервера с idleSleepProtected: true. Это сервер агента или бота либо обычное приложение с активным ботом, который получает события опросом. Доступны SCHEDULE и ALWAYS
HTTP400 КодWORK_SCHEDULE_EMPTY ОписаниеУ расписания нет ни одного окна
HTTP401 КодMISSING_API_KEY ОписаниеНе передан заголовок X-Api-Key
HTTP401 КодINVALID_API_KEY ОписаниеКлюч не опознан: такой строки на платформе нет
HTTP403 КодINFRA_SCOPE_REQUIRED ОписаниеУ ключа нет скоупа vibe:infra
HTTP403 КодINFRA_FORBIDDEN_FOR_COWORK_KEY ОписаниеВызов сделан ключом Cowork/Code — такой ключ работает только с данными, изменяющие операции ему закрыты. Что делать — Проектный ключ для деплоя
HTTP403 КодWRITE_BLOCKED_READONLY_KEY ОписаниеКлюч в режиме «только чтение» — запись режима ему закрыта
HTTP403 КодGALAXY_DISABLED ОписаниеСервер — приложение галактики, а галактики выключены для портала
HTTP403 КодSERVER_ROLE_FORBIDDEN ОписаниеВы состоите в команде разработки этого сервера с ролью «Разработчик», а операция открыта роли «Администратор». В error.hint придут ваша роль, требуемый порог и перечень открытых вам вызовов. Разбор ролей — Список серверов
HTTP404 КодNOT_FOUND ОписаниеСервер не существует, удалён или привязан к другому API-ключу, и вы не состоите в его команде разработки
HTTP404 КодWORK_SCHEDULE_NOT_FOUND ОписаниеРасписания с таким scheduleId нет в портале ключа. Расписание другого портала отвечает так же — ответ не подтверждает, что оно существует
HTTP429 КодRATE_LIMITED ОписаниеПревышен лимит 20 запросов в минуту на ключ. Действующее значение — в заголовке x-ratelimit-limit

Полный список общих ошибок API — Ошибки.

Известные особенности

  • Расписание сильнее порога простоя. Пока серверу назначено расписание, он работает в его окна и засыпает после них, а сохранённый sleepAfterMinutes не действует. При переходе в SCHEDULE порог не стирается. Если расписание потом удалят с согласием на перевод машин, обычное приложение вернётся в IDLE именно с этим числом, а защищённое останется в эффективном ALWAYS с тем же запомненным порогом — см. Удалить расписание.
  • Окна расписания превращаются в пробуждения сервера. Платформа поднимает сервер к началу каждого окна с опережением, а после конца окна сервер засыпает по платформенному таймауту простоя. Эти пробуждения не видны в списке окон пробуждения и не правятся через него — их меняет само расписание. Окна, заведённые вручную, режим не затрагивает.
  • Запрос вне окна тоже будит сервер. Обращение к HTTPS-субдомену будит спящий сервер и вне окон расписания — на условиях автоматического пробуждения. Время такой работы оплачивается по ставке работающей машины.
  • Приложение галактики получает режим, как отдельный сервер. Галактика засыпает, только когда спят все её приложения. Расписание одному агенту из двух ничего не экономит, пока второй работает круглосуточно: режим задаётся всем приложениям, которые не должны держать галактику включённой.
  • Запись через /sleep снимает расписание. Число в sleepAfterMinutes переводит сервер в IDLE, null — в ALWAYS, и назначенное расписание в обоих случаях снимается.

Смотрите также