API Reference
REST API. Base URL: https://api.dbsend.ru/v1
Аутентификация
Все запросы требуют заголовок Authorization:
Authorization: Bearer <token>| Тип токена | Формат | Использование |
|---|---|---|
| JWT | eyJhbGci... | Веб-дашборд, краткосрочные сессии |
| API Key | sqv_pk_47a5... | SDK, CI/CD, скрипты (постоянный) |
Auth
/auth/registerРегистрация нового пользователя
/auth/loginВход по email и паролю
/auth/forgot-passwordЗапрос сброса пароля (письмо на email)
/auth/reset-passwordУстановка нового пароля по токену из письма
/auth/refreshОбновление JWT токена
POST /auth/register
// Request
{
"email": "user@example.com",
"password": "securepassword123"
}
// Response 201
{
"token": "eyJhbGci...",
"userId": "uuid",
"workspaceId": "uuid"
}POST /auth/login
// Request
{ "email": "user@example.com", "password": "securepassword123" }
// Response 200
{ "token": "eyJhbGci...", "userId": "uuid", "workspaceId": "uuid" }API Keys
/api-keysСписок API ключей workspace
/api-keysСоздать новый ключ (plainKey отдаётся только здесь)
/api-keys/:idОтозвать ключ
// 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
/databasesСписок баз данных в workspace
/databasesСоздать базу данных
/databases/:idДетали базы данных
/databases/:id/pauseПриостановить приём бэкапов
/databases/:id/resumeВозобновить приём бэкапов
// 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
/backups/uploadЗагрузка файла до 2 GB (multipart/form-data)
/backups/uploads/initИнициализация chunked загрузки
/backups/uploads/:id/chunks/:nЗагрузка чанка (raw binary)
/backups/uploads/:id/completeЗавершение chunked загрузки
/databases/:id/snapshotsИстория версий базы данных (max 50)
/backups/snapshots/:id/downloadСкачать бэкап (presigned URL или proxy)
POST /backups/upload — поля формы
| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
| file | File | ✅ | Файл БД (gzip-сжатый SDK, raw — через браузер) |
| databaseId | string | ✅ | UUID базы данных |
| originalSize | number | ✅ | Размер оригинала в байтах |
| checksumSha256 | string | — | SHA-256 оригинала (рекомендуется) |
| engine | string | — | Тип БД (sqlite по умолчанию) |
| label | string | — | Метка версии |
| metadata | JSON string | — | Произвольные метаданные |
Restore
/backups/:id/restoreСоздать задание на восстановление
/restore-jobsСписок restore-заданий workspace
/restore-jobs/:jobIdСтатус конкретного задания
// POST /backups/:id/restore
{ "targetType": "download" }
// Response 200
{
"data": {
"jobId": "uuid",
"status": "completed",
"downloadUrl": "https://...",
"expiresInSeconds": 900,
"filename": "data.db",
"version": 3
}
}Коды ошибок
// Формат ошибки
{
"error": {
"code": "QUOTA_EXCEEDED",
"message": "Превышен лимит хранилища...",
"requestId": "uuid"
}
}| Код | HTTP | Описание |
|---|---|---|
| UNAUTHORIZED | 401 | Невалидный/просроченный/отозванный токен |
| FORBIDDEN | 403 | Нет прав на операцию |
| NOT_FOUND | 404 | Ресурс не найден |
| CONFLICT | 409 | Дублирование (email и т.д.) |
| QUOTA_EXCEEDED | 429 | Превышен лимит тарифа |
| VALIDATION_ERROR | 422 | Невалидные входные данные |
| INTERNAL_ERROR | 500 | Внутренняя ошибка сервера |
Rate Limits
| Scope | Лимит | Окно |
|---|---|---|
| IP (auth маршруты) | 20 запросов | 60 секунд |
| Workspace (все маршруты) | 120 запросов | 60 секунд |