API Reference

REST API. Base URL: https://api.dbsend.ru/v1

Аутентификация

Все запросы требуют заголовок Authorization:

http
Authorization: Bearer <token>
Тип токенаФорматИспользование
JWTeyJhbGci...Веб-дашборд, краткосрочные сессии
API Keysqv_pk_47a5...SDK, CI/CD, скрипты (постоянный)

Auth

POST
/auth/register

Регистрация нового пользователя

POST
/auth/login

Вход по email и паролю

POST
/auth/forgot-password

Запрос сброса пароля (письмо на email)

POST
/auth/reset-password

Установка нового пароля по токену из письма

POST
/auth/refresh

Обновление JWT токена

POST /auth/register

json
// Request
{
  "email": "user@example.com",
  "password": "securepassword123"
}

// Response 201
{
  "token": "eyJhbGci...",
  "userId": "uuid",
  "workspaceId": "uuid"
}

POST /auth/login

json
// Request
{ "email": "user@example.com", "password": "securepassword123" }

// Response 200
{ "token": "eyJhbGci...", "userId": "uuid", "workspaceId": "uuid" }

API Keys

GET
/api-keys

Список API ключей workspace

POST
/api-keys

Создать новый ключ (plainKey отдаётся только здесь)

DELETE
/api-keys/:id

Отозвать ключ

json
// POST /api-keys response
{
  "data": {
    "id": "uuid",
    "name": "production-key",
    "keyPrefix": "sqv_pk_47a5",
    "plainKey": "sqv_pk_47a5383b4f7e057975cafb...",  // только при создании!
    "createdAt": "2026-01-01T00:00:00.000Z"
  }
}
⚠️

plainKey возвращается только при создании. Сохраните его сразу — повторно получить невозможно.

Databases

GET
/databases

Список баз данных в workspace

POST
/databases

Создать базу данных

GET
/databases/:id

Детали базы данных

POST
/databases/:id/pause

Приостановить приём бэкапов

POST
/databases/:id/resume

Возобновить приём бэкапов

json
// POST /databases
{
  "projectId": "uuid",
  "name": "production-db",
  "engineType": "sqlite"   // sqlite | duckdb | postgresql_dump | mysql_dump | generic_file
}

// Response 201
{
  "data": {
    "id": "uuid",
    "name": "production-db",
    "engineType": "sqlite",
    "status": "active",
    "createdAt": "2026-01-01T00:00:00Z"
  }
}

Backups

POST
/backups/upload

Загрузка файла до 2 GB (multipart/form-data)

POST
/backups/uploads/init

Инициализация chunked загрузки

PUT
/backups/uploads/:id/chunks/:n

Загрузка чанка (raw binary)

POST
/backups/uploads/:id/complete

Завершение chunked загрузки

GET
/databases/:id/snapshots

История версий базы данных (max 50)

GET
/backups/snapshots/:id/download

Скачать бэкап (presigned URL или proxy)

POST /backups/upload — поля формы

ПолеТипОбязательноОписание
fileFileФайл БД (gzip-сжатый SDK, raw — через браузер)
databaseIdstringUUID базы данных
originalSizenumberРазмер оригинала в байтах
checksumSha256stringSHA-256 оригинала (рекомендуется)
enginestringТип БД (sqlite по умолчанию)
labelstringМетка версии
metadataJSON stringПроизвольные метаданные

Restore

POST
/backups/:id/restore

Создать задание на восстановление

GET
/restore-jobs

Список restore-заданий workspace

GET
/restore-jobs/:jobId

Статус конкретного задания

json
// POST /backups/:id/restore
{ "targetType": "download" }

// Response 200
{
  "data": {
    "jobId": "uuid",
    "status": "completed",
    "downloadUrl": "https://...",
    "expiresInSeconds": 900,
    "filename": "data.db",
    "version": 3
  }
}

Коды ошибок

json
// Формат ошибки
{
  "error": {
    "code": "QUOTA_EXCEEDED",
    "message": "Превышен лимит хранилища...",
    "requestId": "uuid"
  }
}
КодHTTPОписание
UNAUTHORIZED401Невалидный/просроченный/отозванный токен
FORBIDDEN403Нет прав на операцию
NOT_FOUND404Ресурс не найден
CONFLICT409Дублирование (email и т.д.)
QUOTA_EXCEEDED429Превышен лимит тарифа
VALIDATION_ERROR422Невалидные входные данные
INTERNAL_ERROR500Внутренняя ошибка сервера

Rate Limits

ScopeЛимитОкно
IP (auth маршруты)20 запросов60 секунд
Workspace (все маршруты)120 запросов60 секунд