Для AI-агентов: markdown этой страницы — /docs-content/infra/database/snapshot.md индекс документации — /llms.txt
Создать копию базы
POST /v1/infra/servers/:id/db/backups
Ставит в очередь ручную копию SQLite-файла приложения. Копия создаётся в фоновом режиме, приложение во время копирования продолжает работать.
Параметры
| Параметр | Тип | Обяз. | Описание |
|---|---|---|---|
Параметрid (path) |
Типstring (UUID) | Обяз.да | ОписаниеID приложения с kind равным GALAXY_APP. Список: GET /v1/infra/servers |
Поля запроса (body)
| Поле | Тип | Обяз. | Описание |
|---|---|---|---|
Полеfile |
Типstring | Обяз.нет | ОписаниеПуть к файлу базы относительно тома /data, до 1024 байт в UTF-8. Без поля копируется файл из переменной VIBE_DB_PATH контейнера приложения, а если она не задана — app.db. Абсолютный путь, сегменты . и .., пустые сегменты и управляющие символы отклоняются. Список файлов базы: GET /db |
Тело необязательно: без тела и с пустым объектом {} копируется файл по умолчанию. С заголовком Content-Type: application/json тело не может быть пустым — передайте {}. Других полей тело не принимает, размер тела — до 4 КиБ.
Примеры
curl — личный ключ
curl -X POST "https://vibecode.bitrix24.tech/v1/infra/servers/APP_ID/db/backups" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
curl — OAuth-приложение
curl -X POST "https://vibecode.bitrix24.tech/v1/infra/servers/APP_ID/db/backups" \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Authorization: Bearer USER_SESSION_TOKEN" \
-H "Content-Type: application/json" \
-d '{}'
JavaScript — личный ключ
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${appId}/db/backups`,
{
method: 'POST',
headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json' },
body: JSON.stringify({}),
}
)
const { success, data, error } = await res.json()
if (!success) throw new Error(`${error.code}: ${error.message}`)
console.log('Копия в очереди:', data.backupId)
JavaScript — OAuth-приложение
const res = await fetch(
`https://vibecode.bitrix24.tech/v1/infra/servers/${appId}/db/backups`,
{
method: 'POST',
headers: {
'X-Api-Key': 'YOUR_APP_KEY',
'Authorization': 'Bearer USER_SESSION_TOKEN',
'Content-Type': 'application/json',
},
body: JSON.stringify({}),
}
)
const { success, data, error } = await res.json()
if (!success) throw new Error(`${error.code}: ${error.message}`)
Поля ответа
HTTP-статус успешного ответа — 202 Accepted: копия принята в очередь, но ещё не создана.
| Поле | Тип | Описание |
|---|---|---|
Полеsuccess |
Типboolean | Описаниеtrue, когда копия поставлена в очередь |
Полеdata.backupId |
Типstring | ОписаниеID копии. Под этим id копия появляется в GET /db/backups |
Полеdata.status |
Типstring | ОписаниеВсегда QUEUED |
Пример ответа
{
"success": true,
"data": {
"backupId": "9e4d2c1b-6a3f-4b8e-a7d5-0c1f2e3d4b5a",
"status": "QUEUED"
}
}
Пример ответа при ошибке
409 — повторный запрос сразу после создания копии, предыдущая копия этого приложения ещё не завершена:
{
"success": false,
"error": {
"code": "APP_DB_BUSY",
"message": "The database is busy with a live write, retry shortly",
"details": {
"source": "sqlite",
"retryable": true,
"retryAfterSeconds": 1
}
}
}
Ошибки
| HTTP | Код | Описание |
|---|---|---|
| HTTP400 | КодVALIDATION_ERROR |
ОписаниеТело содержит неизвестное поле или file нарушает правила пути |
| HTTP400 | КодFST_ERR_CTP_EMPTY_JSON_BODY |
ОписаниеПередан заголовок Content-Type: application/json без тела. Передайте {} или уберите заголовок |
| HTTP400 | КодAPP_DB_INVALID_FILE |
ОписаниеПоле file не передано, а значение VIBE_DB_PATH контейнера не указывает на допустимый путь внутри /data |
| HTTP400 | КодAPP_DB_UNSUPPORTED_PLACEMENT |
ОписаниеПриложение размещено не в Галактике |
| HTTP401 | КодMISSING_API_KEY |
ОписаниеНе передан заголовок X-Api-Key |
| HTTP401 | КодINVALID_API_KEY |
ОписаниеКлюч не опознан |
| HTTP402 | КодBILLING_FROZEN |
ОписаниеБаланс портала заморожен, копия не поставлена в очередь |
| HTTP402 | КодBILLING_INSUFFICIENT |
ОписаниеБаланс портала исчерпан, хранилище приостановлено. Копия не поставлена в очередь |
| HTTP403 | КодINFRA_SCOPE_REQUIRED |
ОписаниеУ ключа нет скоупа vibe:infra |
| HTTP403 | КодAPP_DB_READONLY_KEY |
ОписаниеКлюч выпущен только для чтения |
| HTTP403 | КодAPP_DB_DISABLED |
ОписаниеРабота с базой приложения не включена для портала |
| HTTP403 | КодSERVER_WAKE_BLOCKED |
ОписаниеХост спит, и для него запрещено пробуждение |
| HTTP404 | КодNOT_FOUND |
ОписаниеПриложения с таким id нет на портале, оно удалено или у ключа нет к нему доступа |
| HTTP404 | КодAPP_DB_NOT_FOUND |
ОписаниеУ приложения нет тома с данными |
| HTTP409 | КодAPP_DB_BUSY |
ОписаниеПриложение занято: предыдущая копия ещё в статусе QUEUED или RUNNING, идёт восстановление базы, деплой или переезд приложения. С details.source равным host — на хосте восстанавливается база другого приложения, хост занят другой операцией или не вышел на связь. Повторите через details.retryAfterSeconds секунд |
| HTTP413 | КодPAYLOAD_TOO_LARGE |
ОписаниеТело больше 4 КиБ |
| HTTP429 | КодRATE_LIMITED |
ОписаниеПревышен лимит запросов на запись для портала — Лимиты. Пауза — в заголовке Retry-After |
| HTTP503 | КодAPP_DB_TOOL_UNAVAILABLE |
ОписаниеХост не подготовлен к работе с базой или платформа временно не может к нему обратиться. Готовность хоста — GET /app-db/prepare |
| HTTP503 | Кодuser_self_deletion_pending |
ОписаниеВладелец ключа запросил удаление своего аккаунта на портале. Доступ вернётся после отмены удаления |
Полный список общих ошибок API — Ошибки.
Известные особенности
Готовность копии. Ответ 202 не означает, что копия создана. Опрашивайте GET /db/backups и ищите элемент с id, равным backupId: копия готова при status равном COMPLETED, а при FAILED причину называет errorCode. На тестовом приложении с копией размером 937 байт копия дошла от QUEUED до COMPLETED за 1 мин 40 с.
Одна копия за раз. Пока предыдущая копия приложения не завершена, повторы запроса через details.retryAfterSeconds получают тот же 409 APP_DB_BUSY. Текст message причину не называет: при details.source равном sqlite он говорит о записи в базу, даже когда базу занимает незавершённая копия. Вместо частых повторов дождитесь завершения копии по списку копий.
Где хранятся копии, сколько они живут и как оплачиваются — Копии и их хранение.