Для AI-агентов: markdown этой страницы — /docs-content/infra/servers/get.md индекс документации — /llms.txt
Получить сервер
GET /v1/infra/servers/:id
Возвращает детали одного сервера по ID. Для полной владельческой карточки эндпоинт автоматически опрашивает облачного провайдера, когда сохранён статус provisioning или отсутствует IP, при условии, что у сервера есть внешний идентификатор. Удалённый сервер (status: "deleted") недоступен: возвращается 404.
Карточка бывает трёх форм. Управляющий ключ получает полный объект. Такую же форму без блока access получает ключ приложения для привязанного к нему сервера, кроме хоста GALAXY, даже если запись сервера закреплена за другим ключом приложения. Участник команды разработки получает 200 с укороченной карточкой. Если galaxyId живого galaxy-приложения текущего ключа указывает на живой общий хост того же портала, этот хост приходит как безопасная проекция для чтения с access.via: "galaxy-reference". Разбор форм и полей — Список серверов.
Параметры
| Параметр | В | Тип | Обяз. | Описание |
|---|---|---|---|---|
id |
path | string (UUID) | да | ID сервера либо galaxyId galaxy-приложения из ответа POST /v1/infra/servers или GET /v1/infra/servers |
Примеры
curl — личный ключ
curl -H "X-Api-Key: YOUR_API_KEY" \
https://vibecode.bitrix24.tech/v1/infra/servers/e765edfc-ba0a-43de-b8ea-838dd872c522
curl — OAuth-приложение
curl -H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID
JavaScript — личный ключ
// Опрос готовности сервера
async function waitReady(serverId) {
while (true) {
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}`,
{ headers: { 'X-Api-Key': 'YOUR_API_KEY' } }
)
const { data } = await res.json()
if (data.access?.via === 'galaxy-reference') {
throw new Error('Для ожидания готовности используйте ID galaxy-приложения, а не хоста')
}
if (data.status === 'running' && data.blackholeStatus === 'CONNECTED') {
return data
}
if (data.status === 'error') {
throw new Error(`Сервер в ошибке: ${data.id}`)
}
await new Promise(r => setTimeout(r, 10000))
}
}
JavaScript — OAuth-приложение
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${serverId}`,
{
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
}
)
const { data } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
success |
boolean | Всегда true при успехе |
data |
object | Полная владельческая карточка, укороченная карточка collaborator или проекция galaxy-reference. Проекция хоста содержит только id, status, kind, galaxyId, name, displayName, createdAt и access. Остальные поля таблицы у неё отсутствуют |
data.id |
string (UUID) | ID сервера |
data.status |
string | Последний сохранённый статус: provisioning | running | stopped | sleeping | error. Удалённый сервер возвращает 404 |
data.provider |
string | ID провайдера |
data.kind |
string | Тип ресурса: STANDALONE (отдельная виртуальная машина), GALAXY (галактика — хост-носитель galaxy-приложений) или GALAXY_APP (galaxy-приложение — контейнер на общем хосте). Определяет контракт деплоя — проверяйте его перед загрузкой кода |
data.galaxyId |
string (UUID) | null | Для GALAXY_APP — ID хоста, на котором размещено приложение. Для остальных типов null |
data.appCount |
number | null | Для GALAXY-хоста — число неудалённых приложений на нём. Для остальных типов null |
data.diskTotalMb |
number | null | Размер диска машины-галактики в мебибайтах. Для STANDALONE и GALAXY_APP — null |
data.diskFreeMb |
number | null | Свободное место на диске машины-галактики в мебибайтах. Для STANDALONE и GALAXY_APP — null |
data.diskState |
string | null | Оценка занятости диска: ok, warning, critical или unknown, если замера ещё не было. Пороги описаны в Галактика. Для STANDALONE и GALAXY_APP — null |
data.diskProbedAt |
string (ISO 8601) | null | Время замера диска. У спящей машины приходит последнее известное значение вместе с временем этого замера |
data.reachability |
object | null | Только для GALAXY_APP — может ли приложение ответить прямо сейчас: effectiveStatus, состояние галактики-носителя hostStatus и hostTunnel, живо снятые container и forwarder, состояние публичного адреса publicEntry, исход опроса probe и его время probedAt. Поле status выше — состояние учётной записи приложения, и во время пробуждения оно отстаёт от машины. Разбор значений — Сон и пробуждение Galaxy-приложения. Для остальных типов null |
data.name |
string | Системное имя сервера — технический идентификатор |
data.displayName |
string | null | Отображаемое имя для UI. Если при создании не передавалось — совпадает с name |
data.description |
string | null | Описание приложения для карточки каталога Битрикс24. null, если описание не задавали. Меняется через PATCH /v1/infra/servers/:id |
data.ip |
string | null | Публичный IP. null пока виртуальная машина не получит адрес |
data.ssh |
object | null | Для OPEN-сервера: { user, port, hasPassword }. Для BLACKHOLE может быть null или тот же блок без фактического доступа. Пароль и приватный ключ здесь не возвращаются — их отдаёт только POST /v1/infra/servers один раз при создании |
data.plan |
string | Тариф. Для galaxy-приложения (kind: "GALAXY_APP") возвращается тариф хоста-носителя, а не запрошенный при создании — приложения делят ресурсы хоста |
data.region |
string | Регион, в который сервер попал реально. Для galaxy-приложения возвращается регион хоста-носителя (платформа сама выбирает размещение), а не запрошенный |
data.image |
string | Образ ОС |
data.monthlyCost |
string | Каталожная месячная стоимость в Вайбах (Ꝟ) строкой (например "1200"). Фактическое списание может отличаться. Сравнивайте через Number(data.monthlyCost) |
data.mode |
string | BLACKHOLE или OPEN |
data.createdVia |
string | api — вызов через API Вайбкод, ui — действие в личном кабинете, galaxy — galaxy-приложение. У серверов агентов и ботов приходят собственные значения |
data.subdomain |
string | Субдомен для приложения |
data.blackholeStatus |
string | NONE | CONNECTED | DISCONNECTED. Для работающего BLACKHOLE-сервера сохранённый CONNECTED сверяется с текущим снимком шлюза только для ответа. Запись в базе и туннель этот GET не меняет |
data.accessPolicy |
string | OWNER_ONLY | NAMED_USERS | DEPARTMENT | PORTAL | AUTHENTICATED | PUBLIC |
data.runtimeId |
string | null | ID рантайма, установленного через POST /:id/deploy (создание сервера всегда даёт null). |
data.runtimeStatus |
string | null | Устаревшее поле, оставлено для совместимости. Для серверов, созданных после 2026-04-25, всегда возвращается null. Рантайм ставится на этапе POST /:id/deploy, а сигнал его готовности — успех шага runtime в ответе деплоя, а не значение этого поля |
data.startCommand |
string | null | Команда запуска последнего УСПЕШНОГО деплоя (start в POST /:id/deploy). null означает, что команда не требовалась или деплоя ещё не было; различайте эти случаи по deployPort |
data.installCommand |
string | null | Команда установки зависимостей того же деплоя. null — деплой прошёл без install, в том числе если было передано пустое значение |
data.deployPort |
number | null | Порт, объявленный в том же деплое (port в POST /:id/deploy). Не совпадает с localPort: PATCH /v1/infra/servers/:id/port меняет localPort независимо от деплоя. null — деплоя ещё не было |
data.appUrl |
string | null | HTTPS-адрес приложения |
data.localPort |
number | Настроенный порт (по умолчанию 3000). В автоопределении это предпочтительный fallback, а фактическую последнюю цель показывает detectedPort. Меняется через PATCH /v1/infra/servers/:id/port |
data.detectedPort |
number | null | Последний порт, который сообщил сканер подключённого агента. null — достоверного наблюдения ещё не сохранено; ответ агента без сканера не создаёт и не стирает наблюдение |
data.detectedPortObservedAt |
string (ISO 8601) | null | Когда платформа получила detectedPort. Поле обновляется асинхронно после подключения туннеля; этот GET не опрашивает агент |
data.portPinned |
boolean | Порт закреплён в настройках агента на машине, поэтому переживает сон, пробуждение и восстановление туннеля. false — агент определяет порт сам при каждом старте. Подробнее — Изменение порта |
data.sleepAfterMinutes |
number | null | Через сколько минут простоя сервер автоматически усыпляется. null — не усыплять автоматически |
data.idleSleepProtected |
boolean | true, если сон по простою недоступен: сервер должен оставаться на связи. Поле сообщает только решение и не раскрывает ботов или API-ключи |
data.runMode |
string | Режим работы: IDLE — засыпает по простою, SCHEDULE — работает по расписанию, ALWAYS — круглосуточно. Выводится из назначенного расписания, idleSleepProtected, createdVia и sleepAfterMinutes. Защищённый сервер без расписания имеет режим ALWAYS, даже если хранит числовой порог |
data.workSchedule |
object | null | Назначенное расписание или null. Поля: id, name (у готового расписания платформы пустое — опознавайте по presetKey), presetKey, timezone, windows. Каждое окно — {{ isoDay, start, end }}, где isoDay это 1…7 от понедельника, а start и end — местное время расписания в виде ЧЧ:ММ. Окна приходят СПИСКОМ: в одном дне их может быть два, например смена с перерывом |
data.provisionError |
string | null | Краткая причина последней ошибки провижининга/сборки. null, если ошибок не было |
data.provisionErrorCode |
string | null | Машиночитаемый код категории сбоя: PREEMPTIBLE_EVICTION / PROVISION_TIMEOUT / NO_CAPACITY / GUEST_NOT_BOOTING / AGENT_NEVER_CONNECTED / DISK_FULL / GENERIC. null, если ошибок не было. Значение GUEST_NOT_BOOTING терминальное. Разбор этого значения и DISK_FULL — в «Известных особенностях» |
data.provisionReason |
string | null | Структурный признак причины сбоя galaxy-приложения: oom — не хватило памяти контейнера, или crash. null у обычных серверов и когда сбоя не было. Значение oom — сигнал перенести приложение на выделенный сервер, порядок описан в Создать сервер |
data.buildLog |
string | null | Хвост лога docker-сборки (≤8 КБ) для упавшей сборки galaxy-приложения. null для обычных серверов и при успешной сборке |
data.nextScheduledWakeAt |
string (ISO 8601) | null | Время ближайшего запланированного пробуждения (с учётом опережающего запаса). null, если у сервера нет включённых окон пробуждения. Настраивается через Пробуждение по расписанию |
data.wakeScheduleCapable |
boolean | Доступна ли серверу настройка окон пробуждения по расписанию — зависит от типа сервера и включённости фичи на портале |
data.buildHint |
string | null | Локализованная рекомендация при сбое сборки galaxy-приложения или занятом пути загрузки. Поле приходит всегда. Заполнено для известной причины в error, а также в provisioning при занятом пути загрузки (GALAXY_UPLOAD_BUSY), когда советует повторить тот же деплой. У зависшей фоновой попытки после таймаута статус становится error, а причина занятого пути и подсказка сохраняются. Иначе null, в том числе у обычных серверов |
data.b24CatalogSync |
object | Состояние карточки приложения в каталоге приложений Вайбкод на портале Битрикс24: { status, itemId, attempts, pendingOp, eligible }. Разбор полей — Опубликовать в каталоге |
data.createdAt |
string (ISO 8601) | Момент создания |
data.access |
object | У участника команды содержит via: "collaborator", role, allowedActions, allowedEndpoints и _note. У хоста по ссылке содержит via: "galaxy-reference", allowedActions: ["read"], только GET /v1/infra/servers и GET /v1/infra/servers/:id в allowedEndpoints и пояснение _note. Поля role нет. У управляющего ключа этого поля в детальной карточке нет — маркер via: "owner" отдаёт список серверов |
Пример полного ответа
{
"success": true,
"data": {
"id": "e765edfc-ba0a-43de-b8ea-838dd872c522",
"status": "running",
"provider": "bitrix-cloud",
"kind": "STANDALONE",
"galaxyId": null,
"appCount": null,
"diskTotalMb": null,
"diskFreeMb": null,
"diskState": null,
"diskProbedAt": null,
"name": "vibe-server-pd9l",
"displayName": "vibe-server-pd9l",
"description": null,
"ip": "111.88.251.211",
"ssh": {
"user": "ubuntu",
"port": 22,
"hasPassword": true
},
"plan": "bc-small",
"region": "ru-central1-a",
"image": "fd80bm0rh4rkepi5ksdi",
"monthlyCost": "1200",
"mode": "OPEN",
"createdVia": "ui",
"subdomain": "app-05b67cf7",
"blackholeStatus": "CONNECTED",
"accessPolicy": "OWNER_ONLY",
"runtimeId": null,
"runtimeStatus": null,
"startCommand": null,
"installCommand": null,
"deployPort": null,
"appUrl": "https://app-05b67cf7.vibecode.bitrix24.tech",
"localPort": 3000,
"detectedPort": 3000,
"detectedPortObservedAt": "2026-09-15T08:15:30.000Z",
"portPinned": false,
"sleepAfterMinutes": null,
"idleSleepProtected": false,
"runMode": "IDLE",
"workSchedule": null,
"provisionError": null,
"provisionErrorCode": null,
"provisionReason": null,
"b24CatalogSync": {
"status": "IDLE",
"itemId": null,
"attempts": 0,
"pendingOp": null,
"eligible": true
},
"buildLog": null,
"nextScheduledWakeAt": null,
"wakeScheduleCapable": true,
"buildHint": null,
"createdAt": "2026-04-03T13:30:25.819Z"
}
}
Пример хоста по `galaxyId`
{
"success": true,
"data": {
"id": "3f7a91c4-6e0b-42d8-8b55-19ad7c204e6f",
"status": "running",
"kind": "GALAXY",
"galaxyId": null,
"name": "vibe-galaxy-host-q7x2",
"displayName": "Общий хост Galaxy",
"createdAt": "2026-06-18T08:15:30.000Z",
"access": {
"via": "galaxy-reference",
"allowedActions": ["read"],
"allowedEndpoints": [
"GET /v1/infra/servers",
"GET /v1/infra/servers/:id"
],
"_note": "This host is readable only because one of your galaxy applications references it. Host management and application operations must target resources owned by your key, not this shared host."
}
}
}
Пример ответа при ошибке
404 — сервер не существует, удалён или у текущего ключа нет ни управляющего, ни командного, ни ссылочного доступа:
{
"success": false,
"error": {
"code": "NOT_FOUND",
"message": "Server not found"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| 401 | MISSING_API_KEY |
Не передан заголовок X-Api-Key |
| 401 | INVALID_API_KEY |
Ключ не опознан: такой строки на платформе нет |
| 403 | EXTERNAL_COLLABORATOR_KEY_SERVER_MISMATCH |
Вызов сделан ключом внешнего участника разработки, а в адресе указан не тот сервер, для которого ключ выпущен. Такой ключ действует ровно на одном сервере, и ответ не сообщает, существует ли запрошенный сервер. Для работы с другим сервером нужен ключ того внешнего членства |
| 403 | EXTERNAL_COLLABORATOR_NOT_A_MEMBER |
Ключ внешнего участника обращается к своему серверу, но доступа сейчас нет: членство снято, истёк его срок либо для аккаунта Битрикс24, которому принадлежит сервер, отключены внешние участники разработки. Код эти причины не различает и сведений о сервере не раскрывает. Членство перечитывается на каждом запросе, поэтому снятый доступ перестаёт работать сразу |
| 404 | NOT_FOUND |
Сервер не найден, удалён или недоступен текущему ключу ни через управление, ни через привязку приложения, ни через команду разработки. Чужой хост остаётся скрыт, если живое galaxy-приложение ключа не ссылается на него в том же портале |
| 429 | RATE_LIMITED |
Превышен общий лимит запросов платформы |
Полный список общих ошибок API — Ошибки.
Известные особенности
- Статус туннеля в карточке эффективный, но без побочных эффектов. Если работающий BLACKHOLE-сервер сохранён как
CONNECTED, а его субдомена нет в успешном непустом снимке шлюза, ответ показываетDISCONNECTED. Недоступный или пустой снимок оставляет сохранённое значение. Запрос не запускаетrepairи не пишет результат сверки в базу. Это не относится к проекцииgalaxy-reference, которая всегда остаётся сохранённым снимком. - Карточка участника команды разработки короче и не опрашивает провайдера. При
access.via: "collaborator"не приходятip,ssh,localPort,detectedPort,detectedPortObservedAt,portPinned,deletedAt,appCount, поля диска,wakeScheduleCapableиb24CatalogSync, аmonthlyCost,sleepAfterMinutesиnextScheduledWakeAtдобавляются только ролиADMIN. Диагностика приложения и параметры последнего деплоя при этом на месте:reachability,buildLog,buildHint,startCommand,installCommandиdeployPortприходят так же, как владельцу. Статус в этой ветке берётся из последнего замера платформы, а не сверяется с провайдером на месте, поэтому у только что созданного сервера он может отставать на один такт опроса — для цикла ожидания готовности используйте ключ, которым сервер создавали. - Проекция
galaxy-referenceещё короче и всегда берётся из сохранённого состояния. Она не обращается к провайдеру или шлюзу даже приstatus: "provisioning". Проекция существует только пока живое galaxy-приложение текущего ключа ссылается на живойGALAXY-хост того же портала. Она открывает только этотGETи список серверов./deploy,/exec,/upload,/logs,/sources,/ssh,/refresh, операции жизненного цикла,PATCHиDELETEдля хоста не открываются. - Для полной владельческой карточки запрос к провайдеру выполняется при
provisioningили отсутствующем IP. В обоих случаях у сервера должен быть внешний идентификатор. Если IP уже сохранён, дляrunning/stopped/sleeping/errorзапроса нет. Чтобы принудительно сверить состояние, используйтеPOST /v1/infra/servers/:id/refresh. - Критерий готовности — два поля. Для продолжения работы с Deploy API нужны одновременно
status: "running"иblackholeStatus: "CONNECTED". Если стоит толькоrunning— виртуальная машина уже жива, но агент туннеля ещё не подключился. Ждать бесконечно не нужно: у только что созданного отдельного сервера (kind: "STANDALONE"), который держитrunningприblackholeStatus: "NONE"дольше десяти минут, агент уже не поднимется — платформа переводит такой сервер вerrorс кодомAGENT_NEVER_CONNECTED(см. ниже). Готовность рантайма после деплоя определяется успехом шагаruntimeв ответеPOST /:id/deploy— полеruntimeStatusдля этого не используется, оно устаревшее и остаётсяnull. blackholeStatus: "DISCONNECTED"приrunning— туннель потерял связь у живого сервера. ПопробуйтеPOST /v1/infra/servers/:id/repair.AGENT_NEVER_CONNECTED— на новой машине не поднялся агент. Виртуальная машина запустилась штатно, но установка агента при старте не завершилась, поэтому туннеля нет и не будет: скрипт первой загрузки выполняется один раз. Отдельному серверу (kind: "STANDALONE") платформа выносит этот вердикт, только пока он только что создан и держитstatus: "running"приblackholeStatus: "NONE"дольше десяти минут: сервер переводится вerror, начисление за машину закрывается. Сначала попробуйтеPOST /v1/infra/servers/:id/repair— он ставит агента заново по SSH; если не помогло, пересоздайте сервер.POST /startна таком сервере отвечает422с этим же кодом: запуск ничего не чинит, а объяснение стирает. Вердикт выносится только серверам в режиме Black Hole — для сервера в открытом режимеrunningприblackholeStatus: "NONE"это нормальное состояние. Хост-галактика (kind: "GALAXY") получает тот же код по своему порогу — пятнадцать минут вrunningприblackholeStatus: "NONE"— и не только после создания: вердикт выносится всякий раз, когда хост снова дольше порога остаётся в этом состоянии. Уже существующие хосты-галактики, у которых до этого изменения сохранился старый текстprovisionError, сохраняютprovisionErrorCode: nullв ответах GET, но/startиavailableActionsраспознают это точное legacy-описание и предлагают только восстановление. Остальное совпадает: начисление закрывается,POST /startотвечает422с этим кодом, лечится ремонтом. Если агент подключится сам, сервер вернётся вrunning, аprovisionErrorиprovisionErrorCodeочистятся.DISK_FULL— ремонт не смог поставить агента: на диске сервера нет места. Код записывает ремонт, завершившийся неудачей. Повтор ремонта поможет только после того, как на диске освободится место. Успешный ремонт снимает код. Сервер при этом не переходит вerror. Если ремонт будил спящий сервер, после неудачи машина остаётся запущенной до авто-сна, а при выключенном авто-сне — пока её не остановят.- Подводный камень
monthlyCost: поле возвращается строкой. Сравнение двух таких строк идёт посимвольно:"24" > "1000"вернётtrue, а.sort()выстроит значения не по величине. Приводите к числу черезNumber(data.monthlyCost). - Если потеряли SSH-креды из ответа создания — восстановить нельзя. Пересоздайте SSH-ключ вручную через
POST /v1/infra/servers/:id/exec(для BLACKHOLE) или пересоздайте сервер. GUEST_NOT_BOOTING— терминальное состояние, повтор не поможет. Гостевая операционная система машины не загружается.POST /repairиPOST /startотвечают422с этим кодом, вavailableActionsостаётся толькоdelete, начисление за машину закрыто. Удаление приложения требует подтверждённого удаления контейнера:DELETE /v1/infra/servers/:idвозвращает502 GALAXY_HOST_UNREACHABLE, если teardown не подтверждён, сохраняя приложение и его привязку. Восстановите доступ к хосту и повторите запрос либо обратитесь в поддержку платформы для подтверждения уничтожения облачной машины и завершения уборки. Клиент по расписанию должен пересоздать такую машину вместо повторных запусков и ремонта.