#Получить сервер
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 — личный ключ
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.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.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) | Момент создания |
#Пример ответа
{
"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-ключу:
{
"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) или пересоздайте сервер.
#Смотрите также
- Создать сервер —
POST /v1/infra/servers. - Список серверов —
GET /v1/infra/servers. - Удалить сервер —
DELETE /v1/infra/servers/:id. - Обновить статус — принудительный опрос провайдера для любого статуса.
- Метрики туннеля — активность агента.