Для 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 — личный ключ
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-приложение
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 — личный ключ
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-приложение
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, если пробуждений не запланировано |
Пример ответа
{
"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 — сон по простою запрошен для сервера, который должен оставаться на связи:
{
"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, и назначенное расписание в обоих случаях снимается.