Для AI-агентов: markdown этой страницы — /docs-content/infra/database/prepare-status.md индекс документации — /llms.txt
Получить статус подготовки хоста
GET /v1/infra/servers/:id/app-db/prepare
Возвращает состояние подготовки хоста галактики для работы с базой приложения: каких компонентов не хватает и на каком шаге идёт установка. Запрос только читает состояние и подготовку не запускает.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
Параметрid (path) |
Типstring (UUID) | Обяз.да | ОписаниеID приложения с kind равным GALAXY_APP. Список: GET /v1/infra/servers |
Параметры строки запроса не принимаются: любой отклоняется с 400 VALIDATION_ERROR.
Примеры
curl — личный ключ
curl "https://vibecode.bitrix24.tech/v1/infra/servers/APP_ID/app-db/prepare" \
-H "X-Api-Key: YOUR_API_KEY"
curl — OAuth-приложение
curl "https://vibecode.bitrix24.tech/v1/infra/servers/APP_ID/app-db/prepare" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN"
JavaScript — личный ключ
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${appId}/app-db/prepare`,
{ headers: { 'X-Api-Key': 'YOUR_API_KEY' } }
)
const { success, data, error } = await res.json()
if (!success) throw new Error(error.code)
console.log(data.state, data.missing)
JavaScript — OAuth-приложение
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${appId}/app-db/prepare`,
{
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
},
}
)
const { success, data, error } = await res.json()
Поля ответа
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | Описаниеtrue при успешном чтении состояния |
Полеdata.state |
Типstring | Описаниеnot_prepared — компонентов не хватает, подготовка не идёт. preparing — подготовка идёт. ready — все компоненты на месте. failed — последняя подготовка завершилась ошибкой, причина в data.errorCode |
Полеdata.steps |
Типarray | ОписаниеСемь шагов в фиксированном порядке: disk, python3, zstd, age, curl, image, verify |
Полеdata.steps[].id |
Типstring | ОписаниеШаг: disk — проверка свободного места и пакетного менеджера, python3, zstd, age, curl — установка пакета, image — загрузка служебного образа для чтения базы, verify — итоговая проверка |
Полеdata.steps[].state |
Типstring | Описаниеpending — шаг не начат, running — выполняется, done — выполнен, present — компонент уже был на хосте, failed — шаг завершился ошибкой |
Полеdata.missing |
Типstring[] | ОписаниеКомпоненты, которых сейчас нет на хосте: python3, zstd, age, curl, image. При ready массив пуст |
Полеdata.errorCode |
Типstring | ОписаниеТолько при failed: LOW_DISK, DPKG_BROKEN, APT_PLAN_UNSAFE, APT_FAILED, PULL_FAILED, VERIFY_FAILED или UNSUPPORTED_HOST. Что делать с каждым кодом — в разделе «Известные особенности» |
Полеdata.freeBytes |
Типinteger | ОписаниеМеньшее из свободного места на корневом разделе и на разделе образов Docker, в байтах. Приходит при preparing и failed, если замер был |
Пример ответа
Подготовка не запускалась, на хосте не хватает только служебного образа:
{
"success": true,
"data": {
"state": "not_prepared",
"steps": [
{ "id": "disk", "state": "pending" },
{ "id": "python3", "state": "present" },
{ "id": "zstd", "state": "present" },
{ "id": "age", "state": "present" },
{ "id": "curl", "state": "present" },
{ "id": "image", "state": "pending" },
{ "id": "verify", "state": "pending" }
],
"missing": ["image"]
}
}
Хост подготовлен:
{
"success": true,
"data": {
"state": "ready",
"steps": [
{ "id": "disk", "state": "done" },
{ "id": "python3", "state": "present" },
{ "id": "zstd", "state": "present" },
{ "id": "age", "state": "present" },
{ "id": "curl", "state": "present" },
{ "id": "image", "state": "present" },
{ "id": "verify", "state": "done" }
],
"missing": []
}
}
Пример ответа при ошибке
400 — в запросе передан параметр строки запроса, а эндпоинт параметров не принимает:
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid preparation parameters"
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодVALIDATION_ERROR |
ОписаниеПередан параметр строки запроса |
| HTTP400 | КодAPP_DB_UNSUPPORTED_PLACEMENT |
ОписаниеПриложение размещено не в Галактике |
| HTTP401 | КодMISSING_API_KEY |
ОписаниеНе передан заголовок X-Api-Key |
| HTTP401 | КодINVALID_API_KEY |
ОписаниеКлюч не опознан |
| HTTP402 | КодBILLING_FROZEN |
ОписаниеХост галактики спит, а счёт портала заморожен: разбудить хост нельзя |
| HTTP403 | КодINFRA_SCOPE_REQUIRED |
ОписаниеУ ключа нет скоупа vibe:infra |
| HTTP403 | КодAPP_DB_DISABLED |
ОписаниеРабота с базой приложения не включена для портала |
| HTTP403 | КодSERVER_WAKE_BLOCKED |
ОписаниеХост галактики спит, а его пробуждение запрещено |
| HTTP404 | КодNOT_FOUND |
ОписаниеПриложение или его хост не найдены, удалены или недоступны этому ключу |
| HTTP409 | КодAPP_DB_BUSY |
ОписаниеХост не успел проснуться за 10 секунд или занят другой операцией. Повторите после паузы из Retry-After |
| HTTP429 | КодRATE_LIMITED |
ОписаниеПревышен лимит запросов на чтение для портала — Лимиты. Пауза — в заголовке Retry-After |
| HTTP503 | КодAPP_DB_TOOL_UNAVAILABLE |
ОписаниеСлужебный канал к хосту недоступен, или хост вернул некорректное состояние. Повторите после паузы из Retry-After |
| HTTP503 | Кодuser_self_deletion_pending |
ОписаниеВладелец ключа удаляет свой аккаунт на портале |
Полный список общих ошибок API — Ошибки.
Известные особенности
Запуск — отдельным вызовом. При not_prepared и failed подготовку запускает POST /app-db/prepare по тому же адресу.
Опрос будит спящий хост — см. Когда база доступна.
Как опрашивать. После запуска подготовки опрашивайте этот адрес раз в 3 секунды, а при 409, 429 и 503 выдерживайте паузу из Retry-After, если она длиннее. При ready перечитайте базу, при failed остановите опрос и покажите причину из data.errorCode. not_prepared во время опроса означает, что подготовка не идёт: остановите опрос и запустите её снова. В интерфейсе приостанавливайте опрос, пока вкладка скрыта, а при смене приложения или закрытии экрана отменяйте запросы.
Что делать при failed. Повторный запуск пропускает уже установленные компоненты.
LOW_DISK— на корневом разделе или разделе образов Docker меньше 6 ГиБ свободного места. Освободите место в данных приложений или обратитесь в поддержку.DPKG_BROKEN— пакетный менеджер хоста в неисправном состоянии. Обратитесь в поддержку.APT_PLAN_UNSAFE— установка потребовала бы обновить или удалить уже установленные пакеты, и платформа её остановила. Обратитесь в поддержку.UNSUPPORTED_HOST— на хосте не Ubuntu 24.04 или нет нужных системных утилит. Обратитесь в поддержку.APT_FAILED,PULL_FAILED,VERIFY_FAILED— не удалось установить пакет, загрузить служебный образ или пройти итоговую проверку. ПовторитеPOST /app-db/prepare.
Цикл ожидания готовности (готовый пример):
async function waitForPreparation(url, headers, signal) {
while (!signal.aborted) {
const response = await fetch(url, { headers, signal })
const retry = Number(response.headers.get('Retry-After'))
const waitMs = Math.max(3000, Number.isFinite(retry) ? retry * 1000 : 0)
if (response.ok) {
const { data } = await response.json()
// ready, failed и not_prepared — конечные для опроса состояния
if (data.state !== 'preparing') return data
} else if (![409, 429, 503].includes(response.status)) {
throw new Error(`HTTP ${response.status}`)
}
await new Promise((resolve, reject) => {
const cancel = () => {
clearTimeout(timer)
reject(signal.reason)
}
const timer = setTimeout(() => {
signal.removeEventListener('abort', cancel)
resolve()
}, waitMs)
signal.addEventListener('abort', cancel, { once: true })
})
}
throw signal.reason
}