Для 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 — личный ключ

Terminal
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-приложение

Terminal
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 — личный ключ

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-приложение

javascript
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:

JSON
{
  "success": true,
  "data": {
    "mode": "BLACKHOLE",
    "ip": "178.154.230.106",
    "sshPassword": null
  }
}

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

403 — запрос на переход в OPEN, когда режим на платформе включён:

JSON
{
  "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.

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