Для 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 — личный ключ

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

Terminal
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 — личный ключ

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

javascript
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

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

JSON
{
  "success": true,
  "data": {
    "backupId": "9e4d2c1b-6a3f-4b8e-a7d5-0c1f2e3d4b5a",
    "status": "QUEUED"
  }
}

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

409 — повторный запрос сразу после создания копии, предыдущая копия этого приложения ещё не завершена:

JSON
{
  "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 он говорит о записи в базу, даже когда базу занимает незавершённая копия. Вместо частых повторов дождитесь завершения копии по списку копий.

Где хранятся копии, сколько они живут и как оплачиваются — Копии и их хранение.

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