#Получить сервер

GET /v1/infra/servers/:id

Возвращает детали одного сервера по ID. Если сервер в статусе provisioning, эндпоинт автоматически опрашивает облачного провайдера на предмет актуального статуса и IP — это удобно использовать в цикле опроса после создания. Удалённый сервер (status: "deleted") не доступен: возвращается 404.

#Параметры

Параметр В Тип Обяз. Описание
id path string (UUID) да ID сервера из `POST /v1/infra/servers` или `GET /v1/infra/servers`

#Примеры

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

Terminal
curl -H "X-Api-Key: YOUR_API_KEY" \
  https://vibecode.bitrix24.tech/v1/infra/servers/e765edfc-ba0a-43de-b8ea-838dd872c522

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

Terminal
curl -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  https://vibecode.bitrix24.tech/v1/infra/servers/SERVER_ID

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

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

javascript
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.id string (UUID) ID сервера
data.status string provisioning | running | sleeping | error. Удалённый сервер возвращает 404
data.provider string ID провайдера
data.name string Имя сервера
data.ip string | null Публичный IP. null пока виртуальная машина не получит адрес
data.ssh object | null Для OPEN-сервера: { user, port, hasPassword }. Для BLACKHOLE может быть null или тот же блок без фактического доступа. Пароль и приватный ключ здесь не возвращаются — их отдаёт только `POST /v1/infra/servers` один раз при создании
data.plan string Тариф
data.region string Регион, в который сервер попал реально
data.image string Образ ОС
data.monthlyCost string Месячная стоимость строкой (например "1200"). Сравнивайте через Number(data.monthlyCost)
data.mode string BLACKHOLE или OPEN
data.createdVia string api или ui
data.subdomain string Субдомен для приложения
data.blackholeStatus string NONE | WAITING | CONNECTED | DISCONNECTED
data.accessPolicy string OWNER_ONLY | NAMED_USERS | DEPARTMENT | PORTAL | AUTHENTICATED | PUBLIC
data.runtimeId string | null ID рантайма установленного через POST /:id/deploy (создание сервера всегда даёт null).
data.runtimeStatus string | null Статус рантайма из последнего deploy: null (свежий сервер), installing, ready, или error. Создание сервера всегда даёт null — рантайм ставится через POST /:id/deploy.
data.appUrl string | null HTTPS-адрес приложения
data.createdAt string (ISO 8601) Момент создания

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

JSON
{
  "success": true,
  "data": {
    "id": "e765edfc-ba0a-43de-b8ea-838dd872c522",
    "status": "running",
    "provider": "bitrix-cloud",
    "name": "vibe-server-pd9l",
    "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,
    "appUrl": "https://app-05b67cf7.vibecode.bitrix24.tech",
    "createdAt": "2026-04-03T13:30:25.819Z"
  }
}

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

404 — сервер с таким ID не существует или принадлежит другому API-ключу:

JSON
{
  "success": false,
  "error": {
    "code": "NOT_FOUND",
    "message": "Server not found"
  }
}

#Ошибки

HTTP Код Описание
401 MISSING_API_KEY Не передан заголовок X-Api-Key
401 INVALID_API_KEY Неверный или просроченный API-ключ
404 NOT_FOUND Сервер не найден или принадлежит другому API-ключу
429 RATE_LIMIT_EXCEEDED Превышен общий лимит запросов платформы

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

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

  • Для running/sleeping/error запроса к провайдеру нет. Автоматический опрос провайдера срабатывает только при статусе provisioning. Если нужно сверить состояние других статусов — используйте `POST /v1/infra/servers/:id/refresh`.
  • Критерий готовности — два поля. Для продолжения работы с Deploy API нужны одновременно status: "running" и blackholeStatus: "CONNECTED". Если стоит только running — виртуальная машина уже жива, но агент туннеля ещё не подключился. Если использовался runtime при деплое — дополнительно дождитесь runtimeStatus: "ready".
  • blackholeStatus: "DISCONNECTED" при running — туннель потерял связь у живого сервера. Попробуйте `POST /v1/infra/servers/:id/repair`.
  • Подводный камень monthlyCost: поле возвращается строкой. data.monthlyCost > 1000 даст неверный результат — сравнивайте через Number(data.monthlyCost) > 1000.
  • Если потеряли SSH-креды из ответа создания — восстановить нельзя. Пересоздайте SSH-ключ вручную через `POST /v1/infra/servers/:id/exec` (для BLACKHOLE) или пересоздайте сервер.

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