Для AI-агентов: markdown этой страницы — /docs-content/infra/access/mode.md индекс документации — /llms.txt
Переключить режим
PATCH /v1/infra/servers/:id/mode
Возвращает сервер из открытого режима OPEN в защищённый режим BLACKHOLE: фаервол восстанавливается, SSH-пароль удаляется. Перевести сервер в OPEN через API нельзя, это делает человек в кабинете.
Запрос с mode: "OPEN" отклоняется до любых действий с сервером и его сетью. Пока режим OPEN выключен на уровне платформы, приходит 403 OPEN_MODE_DISABLED, и перевести сервер в OPEN в это время не может никто, в том числе из кабинета. Когда режим на платформе включён, приходит 403 DIRECT_NETWORK_CHANGE_REQUIRES_HUMAN со ссылкой на карточку сервера в кабинете.
OPEN отключает защиту Black Hole. Сервер становится доступен из интернета по IP. Все Deploy API эндпоинты (
/exec,/upload,/logs,/deploy) работают только в BLACKHOLE-режиме — в OPEN они вернут ошибку.
Параметры
| Параметр | В | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
path | string (UUID) | да | ID сервера |
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
mode |
string | да | Целевой режим. Через API переключение работает только в BLACKHOLE. Значение OPEN проходит проверку формата, но запрос отклоняется с кодом 403 — разбор в таблице ошибок ниже |
Примеры
curl — личный ключ
curl -X PATCH https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/mode \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode": "BLACKHOLE"}'
curl — OAuth-приложение
curl -X PATCH https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID/mode \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "BLACKHOLE"}'
JavaScript — личный ключ
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}/mode`,
{
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({ mode: 'BLACKHOLE' }),
}
)
const { data } = await res.json()
console.log(`Режим сервера: ${data.mode}`)
JavaScript — OAuth-приложение
await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}/mode`,
{
method: 'PATCH',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({ mode: 'BLACKHOLE' }),
}
)
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data.mode |
string | Новый режим — BLACKHOLE |
data.ip |
string | null | IP сервера, при переключении не меняется |
data.sshPassword |
string | null | Через этот эндпоинт всегда null: SSH-пароль выдаётся только при переходе в OPEN, а этот переход через API недоступен |
Пример ответа
Переход OPEN → BLACKHOLE:
{
"success": true,
"data": {
"mode": "BLACKHOLE",
"ip": "178.154.230.106",
"sshPassword": null
}
}
Пример ответа при ошибке
403 — запрос на переход в OPEN, когда режим на платформе включён:
{
"success": false,
"error": {
"code": "DIRECT_NETWORK_CHANGE_REQUIRES_HUMAN",
"message": "Opening direct network access requires a current human cabinet session",
"details": {
"settingsUrl": "https://vibecode.bitrix24.tech/servers/3f2b9c1e-7a4d-4e8b-9c5f-1d2e3a4b5c6d"
}
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 400 | INVALID_MODE |
mode не равен OPEN или BLACKHOLE |
| 400 | SAME_MODE |
Сервер уже в режиме BLACKHOLE |
| 400 | NO_SUBDOMAIN |
У сервера нет субдомена, а переключение идёт командами по его туннелю. Состояние постоянное — повтор не поможет |
| 400 | MODE_SWITCH_STANDALONE_ONLY |
Переключение режима поддержано только у отдельных виртуальных машин. Приложению в галактике режим не переключают |
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 401 | INVALID_API_KEY |
Ключ не опознан: такой строки на платформе нет |
| 402 | ACCOUNT_FROZEN |
Баланс аккаунта исчерпан. Отказ приходит раньше проверки значения mode и раньше поиска сервера, поэтому на замороженном аккаунте ручка не отвечает ни 400, ни 404 |
| 403 | OPEN_MODE_DISABLED |
Запрос с mode: "OPEN", пока режим OPEN выключен на уровне платформы. Перевести сервер в OPEN в это время не может никто, в том числе из кабинета. Ответ несёт error.userMessage — готовый текст на языке владельца ключа |
| 403 | DIRECT_NETWORK_CHANGE_REQUIRES_HUMAN |
Запрос с mode: "OPEN", когда режим на платформе включён. Через API сервер в OPEN не переводится: переключение выполняет человек в кабинете — раздел «Серверы Black Hole», на карточке сервера ссылка «Деплой», в блоке SSH ссылка «Переключить в OPEN». Адрес из error.details.settingsUrl открывает карточку сервера сразу на вкладке «Деплой». Повтор запроса вернёт тот же отказ |
| 403 | AUDIENCE_APPROVAL_FORBIDDEN |
Текущий ключ, его владелец или привязка к порталу больше не допускают действие |
| 403 | WRITE_BLOCKED_READONLY_KEY |
Ключ в режиме «только чтение» — переключение режима ему закрыто |
| 403 | INFRA_FORBIDDEN_FOR_COWORK_KEY |
Вызов сделан ключом Cowork/Code — такой ключ работает только с данными, изменяющие операции ему закрыты. Что делать — Проектный ключ для деплоя |
| 403 | SERVER_ROLE_FORBIDDEN |
Вы состоите в команде разработки этого сервера с ролью «Разработчик», а операция открыта роли «Администратор». В error.hint придут ваша роль, требуемый порог и перечень открытых вам вызовов. Разбор ролей — Список серверов |
| 404 | NOT_FOUND |
Сервер не существует, удалён или привязан к другому API-ключу, и вы не состоите в его команде разработки |
| 409 | SERVER_NOT_RUNNING |
Сервер не в статусе RUNNING. Сначала запустите или разбудите его — сам повтор запроса состояние не меняет |
| 409 | AGENT_NOT_CONNECTED |
Агент Black Hole ещё не в статусе CONNECTED, а переключение идёт командами по его туннелю. Дождитесь связи и повторите |
| 409 | CONFLICT |
Две ветки одного кода: на сервере уже идёт другая операция и лок занят, либо режим изменил параллельный запрос, пока этот выполнялся. В обоих случаях помогает повтор после завершения соседней операции |
| 429 | RATE_LIMITED |
Превышен общий лимит запросов платформы |
| 502 | IPTABLES_FAILED |
Не удалось применить правила фаервола или задать SSH-пароль на самом сервере. Режим не меняется |
| 502 | PROVIDER_NOT_CONFIGURED |
У сервера не нашлось облачного доступа, которым переключается внешний слой сетевой политики. Режим не меняется, состояние постоянное — повтор не поможет |
| 502 | GATEWAY_UNREACHABLE |
Туннель до сервера не отвечает: платформа не смогла установить связь. Код несёт исходную причину после двоеточия. Режим не меняется, повтор имеет смысл |
| 502 | TUNNEL_NOT_FOUND |
Туннель до сервера не найден — агент Black Hole не на связи. Повторите после того, как агент подключится |
| 503 | GATEWAY_TIMEOUT |
Агент не ответил за отведённое время. Код начинается с GATEWAY_TIMEOUT и несёт срок ожидания. Переключение могло частично примениться — сверьтесь с состоянием сервера перед повтором |
| 503 | SECURITY_GROUP_ATTACH_FAILED |
Не удалось переключить сетевую политику на внешнем слое. Режим не меняется, повтор запроса имеет смысл |
Полный список общих ошибок API — Ошибки.
Известные особенности
- В кабинете перевод в OPEN проходит три проверки. Режим включён на уровне платформы, портал работает на коммерческом тарифе Битрикс24 и разрешает OPEN политикой
allowOpenMode. - Ссылка «Переключить в OPEN» видна не всегда. Она стоит в блоке SSH вкладки «Деплой», пока сервер в статусе
runningи агент Black Hole в статусеCONNECTED. Пока режим OPEN выключен на уровне платформы, ссылки нет — блок показывает пояснение вместо неё. - IP не меняется при переключении. Облачная виртуальная машина остаётся той же — меняются сетевая политика и SSH-конфигурация.
- Сетевую политику держат два слоя. Внутренний — правила iptables на самой машине, внешний стоит снаружи неё и не снимается изнутри. Переключение режима меняет оба, внешний слой первым. Там, где внешний слой для сервера не поддержан, работает только внутренний, и поведение ручки прежнее.
- Обрыв связи посреди переключения закрывает фаервол обратно. Если связь с сервером потерялась после смены внешнего слоя, платформа закрывает фаервол машины и возвращает внешний слой на прежнюю роль, и только потом отдаёт ошибку. Закрытие идёт по тому же каналу связи, который оборвался, поэтому на полностью недоступном сервере оно тоже не доедет.
- Сбой записи режима после закрытия сервера фаервол обратно не открывает. Машина остаётся закрытой на обоих слоях, а строка сервера продолжает показывать
OPEN. - Туннель (
blackholeStatus) сохраняется в OPEN-режиме. Агент Black Hole продолжает работать, HTTPS-субдомен остаётся рабочим, а фаервол больше не блокирует внешний трафик. Однако Deploy API всё равно откажет: он требует именно BLACKHOLE. accessPolicyне применяется в OPEN. В OPEN защита строится на SSH-ключах и iptables (который снят). Политика HTTPS-субдомена фактически не работает. При переключении значениеaccessPolicyсохраняется в базе — и снова начнёт действовать после возврата в BLACKHOLE.