RENVUMI REST API · V0.13.74

REST API Renvumi

Внешний API предназначен для автоматизации медиатеки: альбомы, загрузка, анализ, очистка, корзина, поиск, коллекции, люди, лучшие кадры, публикации, импорт и экспорт.

Доступ по тарифу: внешний API доступен только на активных платных тарифах Personal и Pro. Free: до 1 000 анализов, 1 ГБ хранения, работа через веб-интерфейс без внешнего API.
Авторизация: Authorization: Bearer rnv_.... Ключ создаётся в «Личный кабинет → Ключи доступа» и показывается только один раз.
Область доступа: media-automation-v1. Долгоживущий API-ключ предназначен только для автоматизации медиатеки. Изменение пароля, управление сессиями и оплатой и удалением аккаунта выполняются только через обычную веб-сессию.
Приватность: оригиналы хранятся в AES-256-GCM; файловые методы API расшифровывают данные только в контексте владельца и требуют разблокированный ключ хранилища.
Интерактивная спецификация: Swagger UI · ReDoc · OpenAPI JSON. В публичной спецификации отображаются только поддерживаемые внешние методы.
Среда примеров: Python-примеры используют пакет requests (pip install requests). Примеры multipart-запросов в PowerShell используют -Form и рассчитаны на PowerShell 7+.
Глобальный режим: методы GET /api/assets, GET /api/results, GET /api/filename-conflicts и интеллектуальная очистка работают по всей медиатеке, если album_id не передан. Глобальный режим не запускает отдельный анализ: данные берутся из результатов анализа обычных альбомов. POST /api/analyze используйте только с идентификатором реального альбома. Для чтения единого списка «Лучшие в серии» укажите album_id=__global__. Это же значение используется в JSON массовой команды «Оставить 1 для всех». Запуск POST /api/best-shots/analyze разрешён только для конкретного реального альбома. Для чтения раздела «Люди» глобальный результат можно получить без album_id или с album_id=__global__. POST /api/people/scan принимает только ID реального альбома: глобальный режим людей агрегирует уже найденные результаты и не запускает отдельное распознавание.
Как читать справочник: для каждой функции ниже указаны назначение, возвращаемый результат, готовый пример вызова и пример ответа. Для примера запроса можно переключаться между cURL, Python и PowerShell; выбор применяется ко всему справочнику и запоминается в браузере. Любой код можно скопировать маленькой кнопкой справа. Замените rnv_YOUR_API_KEY и демонстрационные идентификаторы на свои.

Сервис и возможности

GET /api/capabilities

Функция

GET /api/capabilities

Описание

Версия API, возможности аккаунта, поддерживаемые форматы, тарифные лимиты и состояние дополнительных функций.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/capabilities" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "version": "0.13.74",
  "api_scope": "media-automation-v1",
  "external_api_routes": 81,
  "plan": {
    "id": "personal",
    "api_access": true
  },
  "formats": [
    ".jpg",
    ".jpeg",
    ".png",
    ".webp",
    ".gif",
    ".bmp",
    ".tif",
    ".tiff"
  ],
  "limits": {
    "bulk_assets": 5000,
    "analysis_remaining": 742
  },
  "features": {
    "duplicate_analysis": true,
    "auto_analyze_new": true,
    "filename_conflicts": true,
    "intelligent_cleanup": true,
    "best_shots": true,
    "text_search": true,
    "visual_search": true,
    "advanced_search": true,
    "collections": true,
    "people": true,
    "zip_import_export": true,
    "trash_restore": true
  }
}
GET /api/version

Функция

GET /api/version

Описание

Текущая версия Renvumi и профиль публичного HTTPS.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/version" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "version": "0.13.74",
  "ui_people": true,
  "people_engine": "local",
  "public_url": "https://renvumi.ru",
  "https_profile": "direct-caddy"
}
GET /api/system/clip

Функция

GET /api/system/clip

Описание

Готовность CLIP-подсистемы, используемой анализом и семантическим поиском.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/system/clip" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "ready": true,
  "status": "ready",
  "message": "CLIP готов"
}

Аккаунт и лимиты

GET /api/account

Функция

GET /api/account

Описание

Тариф, месячный лимит анализа, использование и остаток.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/account" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "plan": "personal",
  "plan_name": "Personal",
  "price_rub": 990,
  "limit": 10000,
  "used": 1258,
  "remaining": 8742,
  "hard_limit": true,
  "usage_percent": 12.6,
  "period": "2026-09",
  "storage_used_bytes": 5239476120,
  "storage_limit_bytes": 10737418240,
  "storage_remaining_bytes": 5497942120,
  "storage_percent": 48.8,
  "storage_limit_gb": 10,
  "storage_encryption": true,
  "storage_unlocked": true,
  "api_access": true,
  "api_access_plan": true
}
GET /api/account/plans

Функция

GET /api/account/plans

Описание

Доступные тарифы, лимиты, хранилище и доступность API.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/account/plans" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "plans": {
    "free": {
      "name": "Free",
      "limit": 1000,
      "price_rub": 0,
      "storage_gb": 1,
      "api_access": false
    },
    "personal": {
      "name": "Personal",
      "limit": 10000,
      "price_rub": 990,
      "storage_gb": 10,
      "api_access": true
    },
    "pro": {
      "name": "Pro",
      "limit": 50000,
      "price_rub": 2990,
      "storage_gb": 100,
      "api_access": true
    }
  }
}
GET /api/account/usage

Функция

GET /api/account/usage

Описание

Постраничный журнал списаний анализа. Параметры: period, limit и offset.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/account/usage?period=month&limit=20&offset=0" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "period": "month",
  "total": 2,
  "units_total": 248,
  "duration_total_ms": 41820,
  "items": [
    {
      "date": "2026-09-13",
      "units": 124,
      "duration_ms": 20710
    },
    {
      "date": "2026-09-12",
      "units": 124,
      "duration_ms": 21110
    }
  ],
  "limit": 20,
  "offset": 0
}
GET /api/account/usage.csv

Функция

GET /api/account/usage.csv

Описание

Экспорт журнала использования анализа в CSV.

Возвращаемый результат

CSV-файл с журналом использования анализа.

Пример использования

curl -sS -o renvumi-usage.csv "https://renvumi.ru/api/account/usage.csv?period=month" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

HTTP/1.1 200 OK
Content-Type: text/csv; charset=utf-8
Content-Disposition: attachment; filename="renvumi-usage.csv"

date,units,duration_ms,...
GET /api/account/storage

Функция

GET /api/account/storage

Описание

Сводка по хранилищу аккаунта и доступности файлов.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/account/storage" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "total_assets": 1248,
  "used_bytes": 5239476120,
  "limit_bytes": 10737418240,
  "remaining_bytes": 5497942120,
  "percent": 48.8,
  "status": "ok",
  "message": "Все файлы доступны"
}
GET /api/account/storage-usage

Функция

GET /api/account/storage-usage

Описание

Краткое использование хранилища: занято, лимит, остаток и процент.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/account/storage-usage" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "used_bytes": 5239476120,
  "limit_bytes": 10737418240,
  "remaining_bytes": 5497942120,
  "percent": 48.8,
  "limit_gb": 10
}
GET /api/account/analysis-summary

Функция

GET /api/account/analysis-summary

Описание

Сводная статистика последних анализов аккаунта.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/account/analysis-summary" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "available": true,
  "jobs_total": 12,
  "images_processed": 3480,
  "success_count": 3468,
  "error_count": 12,
  "average_duration_ms": 182
}
PATCH /api/account/search-settings

Функция

PATCH /api/account/search-settings

Описание

Сохранить пороги текстового и визуального поиска по умолчанию.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X PATCH "https://renvumi.ru/api/account/search-settings" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"text_search_threshold\":88,\"visual_search_threshold\":92}"

Пример возвращаемого результата

{
  "success": true,
  "text_search_threshold": 88,
  "visual_search_threshold": 92
}

Альбомы, импорт и экспорт

GET /api/albums

Функция

GET /api/albums

Описание

Список альбомов с количеством фото, объёмом и краткой статистикой анализа.

Возвращаемый результат

JSON-массив с результатами операции.

Пример использования

curl -sS "https://renvumi.ru/api/albums" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

[
  {
    "id": "alb_demo123",
    "name": "Отпуск 2026",
    "created_at": "2026-09-01T10:15:00",
    "count": 248,
    "size_bytes": 1938475612,
    "last_analyzed_at": "2026-09-13T05:15:22",
    "exact_duplicate_count": 12,
    "best_shot_series_count": 18,
    "pending_analysis_count": 12
  },
  {
    "id": "alb_demo456",
    "name": "Семья",
    "created_at": "2026-09-01T10:15:00",
    "count": 531,
    "size_bytes": 1938475612,
    "last_analyzed_at": "2026-09-13T05:15:22",
    "exact_duplicate_count": 12,
    "best_shot_series_count": 18,
    "pending_analysis_count": 12
  }
]
POST /api/albums

Функция

POST /api/albums

Описание

Создать альбом. Поле формы: name.

Возвращаемый результат

JSON-массив с результатами операции.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/albums" -H "Authorization: Bearer rnv_YOUR_API_KEY" -F "name=Отпуск 2026"

Пример возвращаемого результата

[
  {
    "id": "alb_demo123",
    "name": "Отпуск 2026",
    "created_at": "2026-09-01T10:15:00",
    "count": 248,
    "size_bytes": 1938475612,
    "last_analyzed_at": "2026-09-13T05:15:22",
    "exact_duplicate_count": 12,
    "best_shot_series_count": 18,
    "pending_analysis_count": 12
  },
  {
    "id": "alb_demo456",
    "name": "Семья",
    "created_at": "2026-09-01T10:15:00",
    "count": 531,
    "size_bytes": 1938475612,
    "last_analyzed_at": "2026-09-13T05:15:22",
    "exact_duplicate_count": 12,
    "best_shot_series_count": 18,
    "pending_analysis_count": 12
  }
]
GET /api/albums/{album_id}

Функция

GET /api/albums/{album_id}

Описание

Получить один альбом и его статистику.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/albums/alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "alb_demo123",
  "name": "Отпуск 2026",
  "created_at": "2026-09-01T10:15:00",
  "count": 248,
  "size_bytes": 1938475612,
  "last_analyzed_at": "2026-09-13T05:15:22",
  "exact_duplicate_count": 12,
  "best_shot_series_count": 18,
  "pending_analysis_count": 12
}
PATCH /api/albums/{album_id}

Функция

PATCH /api/albums/{album_id}

Описание

Переименовать альбом. JSON: {"name":"..."}.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X PATCH "https://renvumi.ru/api/albums/alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"name\":\"Отпуск 2026\"}"

Пример возвращаемого результата

{
  "id": "alb_demo123",
  "name": "Отпуск 2026",
  "created_at": "2026-09-01T10:15:00",
  "count": 248,
  "size_bytes": 1938475612,
  "last_analyzed_at": "2026-09-13T05:15:22",
  "exact_duplicate_count": 12,
  "best_shot_series_count": 18,
  "pending_analysis_count": 12
}
DELETE /api/albums/{album_id}

Функция

DELETE /api/albums/{album_id}

Описание

Удалить альбом; активные изображения предварительно перемещаются в корзину.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X DELETE "https://renvumi.ru/api/albums/alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "success": true,
  "album_id": "alb_demo123",
  "moved_to_trash": 248,
  "missing_files": 0,
  "images": 248,
  "size_bytes": 1938475612
}
GET /api/albums/{album_id}/download

Функция

GET /api/albums/{album_id}/download

Описание

Скачать все активные оригиналы альбома ZIP-архивом.

Возвращаемый результат

ZIP-архив с активными оригиналами альбома.

Пример использования

curl -sS -o renvumi-export.zip "https://renvumi.ru/api/albums/alb_demo123/download" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="album.zip"

<binary ZIP data>
GET /api/albums/{album_id}/export

Функция

GET /api/albums/{album_id}/export

Описание

Экспорт ZIP. Параметр mode=all или mode=unique (без полных дублей).

Возвращаемый результат

ZIP-архив выбранного режима экспорта.

Пример использования

curl -sS -o renvumi-export.zip "https://renvumi.ru/api/albums/alb_demo123/export?mode=unique" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

HTTP/1.1 200 OK
Content-Type: application/zip
Content-Disposition: attachment; filename="album-export.zip"

<binary ZIP data>
POST /api/import/zip

Функция

POST /api/import/zip

Описание

Поставить безопасный импорт ZIP в очередь. Поля multipart/form-data: album_id и archive.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/import/zip" -H "Authorization: Bearer rnv_YOUR_API_KEY" -F "album_id=alb_demo123" -F "archive=@photos.zip"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "queued",
  "total": 84
}
GET /api/import/jobs/{job_id}

Функция

GET /api/import/jobs/{job_id}

Описание

Статус и счётчики фонового импорта ZIP.

Возвращаемый результат

JSON с состоянием фоновой задачи, прогрессом и итоговыми счётчиками.

Пример использования

curl -sS "https://renvumi.ru/api/import/jobs/job_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "album_id": "alb_demo123",
  "status": "done",
  "total": 84,
  "processed": 84,
  "imported": 82,
  "skipped": 2,
  "errors": 0,
  "message": "Импорт завершён"
}

Изображения

POST /api/upload

Функция

POST /api/upload

Описание

Загрузить изображения. Поля multipart/form-data: album_id, files и необязательный relative_paths. При включённой настройке автоматического анализа новые изображения сами ставятся в очередь анализа; уже проанализированные фото повторно не обрабатываются.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/upload" -H "Authorization: Bearer rnv_YOUR_API_KEY" -F "album_id=alb_demo123" -F "files=@photo.jpg" -F "relative_paths=[\"2026/photo.jpg\"]"

Пример возвращаемого результата

{
  "files": [
    {
      "id": "img_demo123",
      "name": "IMG_0001.jpg",
      "url": "/api/assets/img_demo123/thumb",
      "original_url": "/api/assets/img_demo123/file",
      "file_available": true,
      "status": "analyzed",
      "size": 2847312,
      "width": 4032,
      "height": 3024,
      "album_id": "alb_demo123",
      "album_name": "Отпуск 2026",
      "captured_at": "2026-08-14T12:31:04",
      "location_name": "Камчатский край",
      "search_tags": [
        "family",
        "outdoor",
        "mountain"
      ]
    }
  ],
  "count": 1,
  "skipped_duplicates": [],
  "storage_used_bytes": 5242323432,
  "storage_limit_bytes": 10737418240,
  "encrypted": true,
  "auto_analysis_scheduled": true
}
GET /api/assets

Функция

GET /api/assets

Описание

Список активных изображений. Поддерживаются фильтр album_id и сортировка sort. Если album_id не указан, возвращаются изображения из всех альбомов (глобальный режим).

Возвращаемый результат

JSON-массив с результатами операции.

Пример использования

curl -sS "https://renvumi.ru/api/assets?album_id=alb_demo123&sort=date_desc" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

[
  {
    "id": "img_demo123",
    "name": "IMG_0001.jpg",
    "url": "/api/assets/img_demo123/thumb",
    "original_url": "/api/assets/img_demo123/file",
    "file_available": true,
    "status": "analyzed",
    "size": 2847312,
    "width": 4032,
    "height": 3024,
    "album_id": "alb_demo123",
    "album_name": "Отпуск 2026",
    "captured_at": "2026-08-14T12:31:04",
    "location_name": "Камчатский край",
    "search_tags": [
      "family",
      "outdoor",
      "mountain"
    ]
  },
  {
    "id": "img_demo456",
    "name": "IMG_0002.jpg",
    "url": "/api/assets/img_demo456/thumb",
    "original_url": "/api/assets/img_demo456/file",
    "file_available": true,
    "status": "analyzed",
    "size": 2847312,
    "width": 4032,
    "height": 3024,
    "album_id": "alb_demo123",
    "album_name": "Отпуск 2026",
    "captured_at": "2026-08-14T12:31:04",
    "location_name": "Камчатский край",
    "search_tags": [
      "family",
      "outdoor",
      "mountain"
    ]
  }
]
GET /api/assets/{asset_id}

Функция

GET /api/assets/{asset_id}

Описание

Метаданные одного изображения.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/assets/img_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "img_demo123",
  "name": "IMG_0001.jpg",
  "url": "/api/assets/img_demo123/thumb",
  "original_url": "/api/assets/img_demo123/file",
  "file_available": true,
  "status": "analyzed",
  "size": 2847312,
  "width": 4032,
  "height": 3024,
  "album_id": "alb_demo123",
  "album_name": "Отпуск 2026",
  "captured_at": "2026-08-14T12:31:04",
  "location_name": "Камчатский край",
  "search_tags": [
    "family",
    "outdoor",
    "mountain"
  ]
}
GET /api/assets/{asset_id}/file

Функция

GET /api/assets/{asset_id}/file

Описание

Получить оригинал с прозрачной расшифровкой для владельца.

Возвращаемый результат

Оригинальный файл изображения после прозрачной расшифровки.

Пример использования

curl -sS -o photo.jpg "https://renvumi.ru/api/assets/img_demo123/file" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

HTTP/1.1 200 OK
Content-Type: image/jpeg
Content-Disposition: inline; filename="photo.jpg"

<binary image data>
GET /api/assets/{asset_id}/thumb

Функция

GET /api/assets/{asset_id}/thumb

Описание

Получить приватное JPEG-превью.

Возвращаемый результат

JPEG-превью изображения.

Пример использования

curl -sS -o preview.jpg "https://renvumi.ru/api/assets/img_demo123/thumb" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

HTTP/1.1 200 OK
Content-Type: image/jpeg

<binary JPEG data>
POST /api/assets/move-to-album

Функция

POST /api/assets/move-to-album

Описание

Массово переместить до 5 000 изображений. JSON: ids и album_id.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/assets/move-to-album" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"ids\":[\"img_demo123\",\"img_demo456\"],\"album_id\":\"alb_demo456\"}"

Пример возвращаемого результата

{
  "success": true,
  "album_id": "alb_demo456",
  "album_name": "Семья",
  "moved": 2,
  "unchanged": 0,
  "not_found": 0,
  "search_index_synced": true,
  "search_index_error": ""
}

Анализ и результаты

POST /api/analyze

Функция

POST /api/analyze

Описание

Вручную запустить анализ только новых, ещё не проанализированных изображений конкретного альбома. Если месячного остатка не хватает на все новые фото, Renvumi запускает доступную часть, а остальные оставляет в ожидании. Уже проанализированные фотографии повторно не включаются.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/analyze?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "queued",
  "album_id": "alb_demo123",
  "total": 248,
  "processed": 248,
  "progress": 100,
  "message": "Новые изображения поставлены в очередь анализа",
  "success_count": 248,
  "error_count": 0
}
GET /api/analyze/pending

Функция

GET /api/analyze/pending

Описание

Показать состояние анализа конкретного альбома: pending, analyzed, errors, активную задачу, остаток месячного лимита и включён ли автоматический анализ.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/analyze/pending?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "album_id": "alb_demo123",
  "pending": 12,
  "analyzed": 236,
  "errors": 0,
  "active": false,
  "active_job_id": null,
  "active_album_id": null,
  "auto_analyze_new": true,
  "analysis_remaining": 742,
  "analysis_limit": 10000
}
GET /api/analyze/active

Функция

GET /api/analyze/active

Описание

Текущий активный анализ пользователя, если он есть.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/analyze/active" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "running",
  "album_id": "alb_demo123",
  "total": 248,
  "processed": 164,
  "progress": 66,
  "message": "Анализ изображений",
  "success_count": 164,
  "error_count": 0,
  "active": true,
  "source": "postgres"
}
GET /api/analyze/latest

Функция

GET /api/analyze/latest

Описание

Последняя задача анализа; необязательный album_id фильтрует историю по конкретному альбому.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/analyze/latest?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "done",
  "album_id": "alb_demo123",
  "total": 248,
  "processed": 248,
  "progress": 100,
  "message": "Готово",
  "success_count": 248,
  "error_count": 0,
  "exists": true,
  "source": "postgres"
}
GET /api/jobs

Функция

GET /api/jobs

Описание

История задач анализа. Необязательные параметры: album_id и limit.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/jobs?album_id=alb_demo123&limit=20" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "items": [
    {
      "id": "job_demo123",
      "status": "done",
      "album_id": "alb_demo123",
      "total": 248,
      "processed": 248,
      "progress": 100,
      "message": "Готово",
      "success_count": 248,
      "error_count": 0
    },
    {
      "id": "job_demo456",
      "status": "running",
      "album_id": "alb_demo123",
      "total": 248,
      "processed": 164,
      "progress": 66,
      "message": "Анализ изображений",
      "success_count": 164,
      "error_count": 0
    }
  ]
}
GET /api/jobs/{jid}

Функция

GET /api/jobs/{jid}

Описание

Подробный статус и прогресс задачи анализа.

Возвращаемый результат

JSON с состоянием фоновой задачи, прогрессом и итоговыми счётчиками.

Пример использования

curl -sS "https://renvumi.ru/api/jobs/job_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "running",
  "album_id": "alb_demo123",
  "total": 248,
  "processed": 164,
  "progress": 66,
  "message": "Анализ изображений",
  "success_count": 164,
  "error_count": 0
}
GET /api/jobs/{jid}/summary

Функция

GET /api/jobs/{jid}/summary

Описание

Итоговые счётчики, ошибки и производительность завершённого анализа.

Возвращаемый результат

JSON с состоянием фоновой задачи, прогрессом и итоговыми счётчиками.

Пример использования

curl -sS "https://renvumi.ru/api/jobs/job_demo123/summary" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "done",
  "total": 248,
  "processed": 248,
  "success_count": 246,
  "error_count": 2,
  "exact_groups": 6,
  "similar_groups": 21,
  "elapsed_ms": 41820
}
POST /api/jobs/{jid}/cancel

Функция

POST /api/jobs/{jid}/cancel

Описание

Запросить безопасную отмену незавершённой задачи.

Возвращаемый результат

JSON с состоянием фоновой задачи, прогрессом и итоговыми счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/jobs/job_demo123/cancel" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "canceled",
  "album_id": "alb_demo123",
  "total": 248,
  "processed": 248,
  "progress": 100,
  "message": "Готово",
  "success_count": 248,
  "error_count": 0,
  "cancel_requested": true
}
POST /api/jobs/{jid}/retry-failed

Функция

POST /api/jobs/{jid}/retry-failed

Описание

Создать повторную задачу только для изображений с ошибками.

Возвращаемый результат

JSON с состоянием фоновой задачи, прогрессом и итоговыми счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/jobs/job_demo123/retry-failed" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_retry123",
  "status": "queued",
  "album_id": "alb_demo123",
  "total": 248,
  "processed": 248,
  "progress": 100,
  "message": "Готово",
  "success_count": 248,
  "error_count": 0,
  "source_job_id": "job_demo123"
}
GET /api/results

Функция

GET /api/results

Описание

Группы exact/name_conflicts/near/similar/unique и счётчики очистки. name_conflicts содержит одинаковые имена файлов только при разных SHA-256. Если album_id не указан, результат строится по всем альбомам (глобальный режим).

Возвращаемый результат

JSON с группами полных дублей, одинаковых имён при разном содержимом, почти одинаковых, похожих и уникальных фотографий.

Пример использования

curl -sS "https://renvumi.ru/api/results?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "album_id": "alb_demo123",
  "exact": [
    [
      {
        "id": "img_demo123",
        "name": "IMG_0001.jpg",
        "url": "/api/assets/img_demo123/thumb",
        "original_url": "/api/assets/img_demo123/file",
        "file_available": true,
        "status": "analyzed",
        "size": 2847312,
        "width": 4032,
        "height": 3024,
        "album_id": "alb_demo123",
        "album_name": "Отпуск 2026",
        "captured_at": "2026-08-14T12:31:04",
        "location_name": "Камчатский край",
        "search_tags": [
          "family",
          "outdoor",
          "mountain"
        ]
      },
      {
        "id": "img_demo456",
        "name": "IMG_0001-copy.jpg",
        "url": "/api/assets/img_demo456/thumb",
        "original_url": "/api/assets/img_demo456/file",
        "file_available": true,
        "status": "analyzed",
        "size": 2847312,
        "width": 4032,
        "height": 3024,
        "album_id": "alb_demo123",
        "album_name": "Отпуск 2026",
        "captured_at": "2026-08-14T12:31:04",
        "location_name": "Камчатский край",
        "search_tags": [
          "family",
          "outdoor",
          "mountain"
        ]
      }
    ]
  ],
  "name_conflicts": [
    {
      "name": "IMG_0007.jpg",
      "files_count": 2,
      "content_variants": 2,
      "assets": [
        {
          "id": "img_name1",
          "name": "IMG_0007.jpg",
          "url": "/api/assets/img_name1/thumb",
          "original_url": "/api/assets/img_name1/file",
          "file_available": true,
          "status": "analyzed",
          "size": 2847312,
          "width": 4032,
          "height": 3024,
          "album_id": "alb_demo123",
          "album_name": "Отпуск 2026",
          "captured_at": "2026-08-14T12:31:04",
          "location_name": "Камчатский край",
          "search_tags": [
            "family",
            "outdoor",
            "mountain"
          ]
        },
        {
          "id": "img_name2",
          "name": "IMG_0007.jpg",
          "url": "/api/assets/img_name2/thumb",
          "original_url": "/api/assets/img_name2/file",
          "file_available": true,
          "status": "analyzed",
          "size": 2847312,
          "width": 4032,
          "height": 3024,
          "album_id": "alb_demo123",
          "album_name": "Отпуск 2026",
          "captured_at": "2026-08-14T12:31:04",
          "location_name": "Камчатский край",
          "search_tags": [
            "family",
            "outdoor",
            "mountain"
          ]
        }
      ]
    }
  ],
  "near": [],
  "similar": [],
  "unique": [
    {
      "id": "img_demo789",
      "name": "IMG_0003.jpg",
      "url": "/api/assets/img_demo789/thumb",
      "original_url": "/api/assets/img_demo789/file",
      "file_available": true,
      "status": "analyzed",
      "size": 2847312,
      "width": 4032,
      "height": 3024,
      "album_id": "alb_demo123",
      "album_name": "Отпуск 2026",
      "captured_at": "2026-08-14T12:31:04",
      "location_name": "Камчатский край",
      "search_tags": [
        "family",
        "outdoor",
        "mountain"
      ]
    }
  ],
  "unclassified_count": 0,
  "counts": {
    "exact": 1,
    "name_conflicts": 1,
    "near": 0,
    "similar": 0,
    "unique": 1,
    "unclassified": 0
  }
}
GET /api/filename-conflicts

Функция

GET /api/filename-conflicts

Описание

Файлы с одинаковым именем, но разным бинарным содержимым. Совпадения с одинаковым SHA-256 сюда не входят. Необязательный album_id ограничивает поиск конкретным альбомом; без него или при album_id=__global__ поиск выполняется по всей медиатеке.

Возвращаемый результат

JSON с группами одинаковых имён файлов, где SHA-256 содержимого различается.

Пример использования

curl -sS "https://renvumi.ru/api/filename-conflicts?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "album_id": "alb_demo123",
  "global": false,
  "groups": [
    {
      "name": "IMG_0007.jpg",
      "files_count": 2,
      "content_variants": 2,
      "assets": [
        {
          "id": "img_name1",
          "name": "IMG_0007.jpg",
          "url": "/api/assets/img_name1/thumb",
          "original_url": "/api/assets/img_name1/file",
          "file_available": true,
          "status": "analyzed",
          "size": 2847312,
          "width": 4032,
          "height": 3024,
          "album_id": "alb_demo123",
          "album_name": "Отпуск 2026",
          "captured_at": "2026-08-14T12:31:04",
          "location_name": "Камчатский край",
          "search_tags": [
            "family",
            "outdoor",
            "mountain"
          ]
        },
        {
          "id": "img_name2",
          "name": "IMG_0007.jpg",
          "url": "/api/assets/img_name2/thumb",
          "original_url": "/api/assets/img_name2/file",
          "file_available": true,
          "status": "analyzed",
          "size": 2847312,
          "width": 4032,
          "height": 3024,
          "album_id": "alb_demo123",
          "album_name": "Отпуск 2026",
          "captured_at": "2026-08-14T12:31:04",
          "location_name": "Камчатский край",
          "search_tags": [
            "family",
            "outdoor",
            "mountain"
          ]
        }
      ]
    }
  ],
  "group_count": 1,
  "asset_count": 2
}

Корзина и интеллектуальная очистка

GET /api/trash

Функция

GET /api/trash

Описание

Список изображений в корзине.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/trash" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "count": 1,
  "items": [
    {
      "id": "img_demo123",
      "name": "IMG_0001.jpg",
      "url": "/api/assets/img_demo123/thumb",
      "original_url": "/api/assets/img_demo123/file",
      "file_available": true,
      "status": "trashed",
      "size": 2847312,
      "width": 4032,
      "height": 3024,
      "album_id": "alb_demo123",
      "album_name": "Отпуск 2026",
      "captured_at": "2026-08-14T12:31:04",
      "location_name": "Камчатский край",
      "search_tags": [
        "family",
        "outdoor",
        "mountain"
      ]
    }
  ],
  "missing_files": 0
}
GET /api/trash/{asset_id}/file

Функция

GET /api/trash/{asset_id}/file

Описание

Оригинал изображения из корзины.

Возвращаемый результат

Оригинальный файл изображения из корзины.

Пример использования

curl -sS -o photo.jpg "https://renvumi.ru/api/trash/img_demo123/file" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

HTTP/1.1 200 OK
Content-Type: image/jpeg

<binary image data>
GET /api/trash/{asset_id}/thumb

Функция

GET /api/trash/{asset_id}/thumb

Описание

Превью изображения из корзины.

Возвращаемый результат

JPEG-превью изображения из корзины.

Пример использования

curl -sS -o preview.jpg "https://renvumi.ru/api/trash/img_demo123/thumb" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

HTTP/1.1 200 OK
Content-Type: image/jpeg

<binary JPEG data>
POST /api/trash/{asset_id}

Функция

POST /api/trash/{asset_id}

Описание

Переместить одно активное изображение в корзину.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/trash/img_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "success": true,
  "moved": 1,
  "moved_ids": [
    "img_demo123"
  ]
}
POST /api/trash-selected

Функция

POST /api/trash-selected

Описание

Переместить выбранные изображения в корзину. JSON: ids.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/trash-selected" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"ids\":[\"img_demo123\",\"img_demo456\"]}"

Пример возвращаемого результата

{
  "success": true,
  "moved": 1,
  "moved_ids": [
    "img_demo123"
  ]
}
POST /api/trash/restore

Функция

POST /api/trash/restore

Описание

Восстановить выбранные изображения; при необходимости создаётся альбом «Восстановленные».

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/trash/restore" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"ids\":[\"img_demo123\"]}"

Пример возвращаемого результата

{
  "success": true,
  "restored": 1,
  "not_restored": [],
  "reanalyze_required": true,
  "reassigned_to_recovered": 0,
  "recovered_album": null
}
POST /api/trash/purge

Функция

POST /api/trash/purge

Описание

Физически удалить выбранные изображения из корзины.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/trash/purge" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"ids\":[\"img_demo123\"]}"

Пример возвращаемого результата

{
  "success": true,
  "purged": 1,
  "purged_ids": [
    "img_demo123"
  ],
  "already_missing_files": 0
}
POST /api/trash-exact

Функция

POST /api/trash-exact

Описание

В группах полных дублей оставить по одному экземпляру. Без album_id операция применяется ко всей медиатеке; перед вызовом глобального режима проверьте результаты через GET /api/results.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/trash-exact?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "success": true,
  "moved": 1,
  "moved_ids": [
    "img_demo123"
  ]
}
POST /api/trash-except/{asset_id}

Функция

POST /api/trash-except/{asset_id}

Описание

В реальном альбоме удалить остальные полные дубли выбранного изображения, сохранив указанный asset_id. Маршрут намеренно не затрагивает копии из других альбомов; для глобальной очистки используйте POST /api/trash-exact.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/trash-except/img_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "success": true,
  "moved": 1,
  "moved_ids": [
    "img_demo123"
  ]
}
POST /api/intelligent-delete/suggestions

Функция

POST /api/intelligent-delete/suggestions

Описание

Получить синхронный план интеллектуальной очистки без удаления. Без album_id план строится по всей медиатеке.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/intelligent-delete/suggestions?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "suggestions": [
    {
      "asset_id": "img_demo456",
      "keep_asset_id": "img_demo123",
      "reason": "Похожий кадр ниже по качеству",
      "similarity_percent": 98.7
    }
  ],
  "cached": false,
  "count": 1,
  "plan_token": "plan_demo123",
  "cleanup_clip_threshold": 98,
  "safe_mode": true
}
POST /api/intelligent-delete/jobs

Функция

POST /api/intelligent-delete/jobs

Описание

Запустить подготовку плана очистки в фоне. Без album_id план строится по всей медиатеке.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/intelligent-delete/jobs?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "queued",
  "album_id": "alb_demo123",
  "message": "План очистки поставлен в очередь"
}
GET /api/intelligent-delete/jobs/{job_id}

Функция

GET /api/intelligent-delete/jobs/{job_id}

Описание

Проверить готовность фонового плана очистки.

Возвращаемый результат

JSON с состоянием фоновой задачи, прогрессом и итоговыми счётчиками.

Пример использования

curl -sS "https://renvumi.ru/api/intelligent-delete/jobs/job_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "done",
  "album_id": "alb_demo123",
  "count": 37,
  "plan_token": "plan_demo123",
  "message": "План готов"
}
POST /api/trash-intelligent

Функция

POST /api/trash-intelligent

Описание

Применить подтверждённый план интеллектуальной очистки.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/trash-intelligent" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"album_id\":\"alb_demo123\",\"plan_token\":\"plan_demo123\",\"ids\":[\"img_demo456\"]}"

Пример возвращаемого результата

{
  "success": true,
  "moved": 1,
  "moved_ids": [
    "img_demo456"
  ],
  "plan_token": "plan_demo123",
  "validated": true,
  "used_cached_plan": true
}

Лучшие в серии

POST /api/best-shots/analyze

Функция

POST /api/best-shots/analyze

Описание

Найти серии снимков и запустить ранжирование кадров в конкретном альбоме. В JSON должен быть указан реальный album_id. В глобальном режиме отображаются уже рассчитанные результаты обычных альбомов.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/best-shots/analyze" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"album_id\":\"alb_demo123\"}"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "done",
  "total": 248,
  "processed": 248,
  "series_found": 18,
  "message": "Готово"
}
GET /api/best-shots/jobs/{job_id}

Функция

GET /api/best-shots/jobs/{job_id}

Описание

Статус фонового анализа серий.

Возвращаемый результат

JSON с состоянием фоновой задачи, прогрессом и итоговыми счётчиками.

Пример использования

curl -sS "https://renvumi.ru/api/best-shots/jobs/job_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "done",
  "total": 248,
  "processed": 248,
  "series_found": 18,
  "message": "Готово"
}
GET /api/best-shots

Функция

GET /api/best-shots

Описание

Список серий, ранги, оценки и выбранные лучшие кадры. album_id принимает идентификатор альбома или __global__ для единого списка по всем альбомам.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/best-shots?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "album_id": "alb_demo123",
  "series": [
    {
      "id": "series_demo123",
      "confidence": 0.94,
      "selected_asset_id": "img_demo123",
      "selection_source": "auto",
      "members": [
        {
          "id": "img_demo123",
          "name": "IMG_0001.jpg",
          "url": "/api/assets/img_demo123/thumb",
          "original_url": "/api/assets/img_demo123/file",
          "file_available": true,
          "status": "analyzed",
          "size": 2847312,
          "width": 4032,
          "height": 3024,
          "album_id": "alb_demo123",
          "album_name": "Отпуск 2026",
          "captured_at": "2026-08-14T12:31:04",
          "location_name": "Камчатский край",
          "search_tags": [
            "family",
            "outdoor",
            "mountain"
          ],
          "rank": 1,
          "score": 91.4,
          "selected": true,
          "protected_from_cleanup": true
        }
      ]
    }
  ],
  "series_count": 1,
  "frames_count": 5,
  "manual_choices": 0,
  "algorithm_version": "current",
  "local_only": true
}
POST /api/best-shots/series/{series_id}/select

Функция

POST /api/best-shots/series/{series_id}/select

Описание

Вручную выбрать лучший кадр серии и защитить его от очистки.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/best-shots/series/series_demo123/select" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"asset_id\":\"img_demo123\"}"

Пример возвращаемого результата

{
  "ok": true,
  "series_id": "series_demo123",
  "selected_asset_id": "img_demo123",
  "protected_from_cleanup": true
}
POST /api/best-shots/series/{series_id}/keep-top

Функция

POST /api/best-shots/series/{series_id}/keep-top

Описание

Оставить несколько лучших кадров серии, остальные отправить в корзину.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/best-shots/series/series_demo123/keep-top" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"count\":2}"

Пример возвращаемого результата

{
  "success": true,
  "moved": 3,
  "moved_ids": [
    "img_demo789",
    "img_demo790",
    "img_demo791"
  ],
  "kept": 2
}
POST /api/best-shots/keep-one-all

Функция

POST /api/best-shots/keep-one-all

Описание

Оставить по одному лучшему кадру во всех сериях. В JSON поле album_id принимает идентификатор альбома или __global__ для всей медиатеки; операция перемещает остальные кадры в корзину.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/best-shots/keep-one-all" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"album_id\":\"__global__\"}"

Пример возвращаемого результата

{
  "success": true,
  "series": 18,
  "kept": 18,
  "moved": 64
}

Коллекции

GET /api/collections

Функция

GET /api/collections

Описание

Список автоматических и ручных коллекций.

Возвращаемый результат

JSON-массив с результатами операции.

Пример использования

curl -sS "https://renvumi.ru/api/collections" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

[
  {
    "id": "col_demo123",
    "name": "Лучшие поездки",
    "query": {
      "q": "море"
    },
    "has_auto_rule": true,
    "count": 42
  }
]
POST /api/collections

Функция

POST /api/collections

Описание

Создать коллекцию с сохранёнными условиями поиска или без них.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/collections" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"name\":\"Лучшие поездки\",\"query\":{\"q\":\"море\",\"orientation\":\"landscape\"}}"

Пример возвращаемого результата

{
  "id": "col_demo123",
  "name": "Лучшие поездки",
  "query": {
    "q": "море",
    "orientation": "landscape"
  },
  "has_auto_rule": true,
  "manual_additions": 0,
  "manual_exclusions": 0
}
PATCH /api/collections/{collection_id}

Функция

PATCH /api/collections/{collection_id}

Описание

Переименовать коллекцию или изменить её сохранённые условия.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X PATCH "https://renvumi.ru/api/collections/col_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"name\":\"Море и путешествия\",\"query\":{\"q\":\"море\"}}"

Пример возвращаемого результата

{
  "id": "col_demo123",
  "name": "Море и путешествия",
  "query": {
    "q": "море"
  },
  "has_auto_rule": true
}
DELETE /api/collections/{collection_id}

Функция

DELETE /api/collections/{collection_id}

Описание

Удалить коллекцию без удаления оригинальных фотографий.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X DELETE "https://renvumi.ru/api/collections/col_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "success": true
}
POST /api/collections/{collection_id}/assets

Функция

POST /api/collections/{collection_id}/assets

Описание

Добавить до 5 000 фотографий вручную.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/collections/col_demo123/assets" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"ids\":[\"img_demo123\",\"img_demo456\"]}"

Пример возвращаемого результата

{
  "success": true,
  "collection_id": "col_demo123",
  "name": "Лучшие поездки",
  "added": 2,
  "already_present": 0,
  "not_found": []
}
DELETE /api/collections/{collection_id}/assets

Функция

DELETE /api/collections/{collection_id}/assets

Описание

Убрать фотографии из коллекции. Для автоматически подобранных фотографий создаётся исключение.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X DELETE "https://renvumi.ru/api/collections/col_demo123/assets" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"ids\":[\"img_demo456\"]}"

Пример возвращаемого результата

{
  "success": true,
  "removed": 1,
  "excluded_from_rule": 1
}
GET /api/collections/{collection_id}/results

Функция

GET /api/collections/{collection_id}/results

Описание

Итог коллекции: автоматические результаты и ручные включения за вычетом исключений.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/collections/col_demo123/results" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "collection": {
    "id": "col_demo123",
    "name": "Лучшие поездки"
  },
  "results": [
    {
      "id": "img_demo123",
      "name": "IMG_0001.jpg",
      "url": "/api/assets/img_demo123/thumb",
      "original_url": "/api/assets/img_demo123/file",
      "file_available": true,
      "status": "analyzed",
      "size": 2847312,
      "width": 4032,
      "height": 3024,
      "album_id": "alb_demo123",
      "album_name": "Отпуск 2026",
      "captured_at": "2026-08-14T12:31:04",
      "location_name": "Камчатский край",
      "search_tags": [
        "family",
        "outdoor",
        "mountain"
      ]
    }
  ],
  "count": 1,
  "semantic": true,
  "threshold_percent": 90,
  "reason": "ok"
}

Опубликованные фото

GET /api/publications

Функция

GET /api/publications

Описание

Список публикаций пользователя: состояние ссылки, срок, просмотры и настройка скачивания.

Возвращаемый результат

JSON-массив с результатами операции.

Пример использования

curl -sS "https://renvumi.ru/api/publications" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

[
  {
    "id": "pub_demo123",
    "asset_id": "img_demo123",
    "name": "IMG_0001.jpg",
    "active": true,
    "allow_download": false,
    "views": 12,
    "created_at": "2026-09-15T03:00:00",
    "expires_at": "2026-09-22T03:00:00"
  }
]
POST /api/publications

Функция

POST /api/publications

Описание

Создать секретную публичную ссылку на фотографию. Требует явного подтверждения прав на публикацию; публичная JPEG-копия создаётся без EXIF и GPS.

Возвращаемый результат

JSON-массив с результатами операции.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/publications" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"asset_id\":\"img_demo123\",\"expires_in\":\"7d\",\"allow_download\":false,\"rights_confirmed\":true}"

Пример возвращаемого результата

[
  {
    "id": "pub_demo123",
    "asset_id": "img_demo123",
    "name": "IMG_0001.jpg",
    "active": true,
    "allow_download": false,
    "views": 12,
    "created_at": "2026-09-15T03:00:00",
    "expires_at": "2026-09-22T03:00:00"
  }
]
GET /api/publications/{publication_id}

Функция

GET /api/publications/{publication_id}

Описание

Получить состояние конкретной публикации.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/publications/pub_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "pub_demo123",
  "asset_id": "img_demo123",
  "name": "IMG_0001.jpg",
  "active": true,
  "allow_download": false,
  "views": 12,
  "created_at": "2026-09-15T03:00:00",
  "expires_at": "2026-09-22T03:00:00"
}
DELETE /api/publications/{publication_id}

Функция

DELETE /api/publications/{publication_id}

Описание

Немедленно отключить публичный доступ и удалить публичную копию фотографии.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X DELETE "https://renvumi.ru/api/publications/pub_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "pub_demo123",
  "asset_id": "img_demo123",
  "name": "IMG_0001.jpg",
  "active": true,
  "allow_download": false,
  "views": 12,
  "created_at": "2026-09-15T03:00:00",
  "expires_at": "2026-09-22T03:00:00"
}

Люди

GET /api/people/settings

Функция

GET /api/people/settings

Описание

Включено ли локальное распознавание людей для аккаунта.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/people/settings" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "enabled": true,
  "local_only": true,
  "cluster_threshold": 0.62,
  "recognition_engine": "SFace"
}
POST /api/people/settings

Функция

POST /api/people/settings

Описание

Включить или отключить распознавание людей.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/people/settings" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"enabled\":true}"

Пример возвращаемого результата

{
  "enabled": true,
  "local_only": true
}
DELETE /api/people/data

Функция

DELETE /api/people/data

Описание

Удалить сохранённые лица и группы распознавания без удаления фотографий.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X DELETE "https://renvumi.ru/api/people/data" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "ok": true,
  "enabled": false
}
POST /api/people/scan

Функция

POST /api/people/scan

Описание

Запустить поиск лиц в конкретном реальном альбоме. Глобальный режим только агрегирует уже найденные результаты.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X POST "https://renvumi.ru/api/people/scan" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"album_id\":\"alb_demo123\"}"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "queued"
}
GET /api/people/jobs/{job_id}

Функция

GET /api/people/jobs/{job_id}

Описание

Прогресс поиска лиц и финальной группировки.

Возвращаемый результат

JSON с состоянием фоновой задачи, прогрессом и итоговыми счётчиками.

Пример использования

curl -sS "https://renvumi.ru/api/people/jobs/job_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "id": "job_demo123",
  "status": "done",
  "total": 248,
  "processed": 248,
  "faces_found": 137,
  "message": "Готово"
}
GET /api/people

Функция

GET /api/people

Описание

Список групп людей и число фотографий в каждой. Необязательный album_id ограничивает результат одним альбомом; без album_id или с album_id=__global__ возвращаются объединённые результаты всей медиатеки.

Возвращаемый результат

JSON с данными запрошенного ресурса и его текущим состоянием.

Пример использования

curl -sS "https://renvumi.ru/api/people?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "enabled": true,
  "people": [
    {
      "id": "person_demo123",
      "name": "Анна",
      "count": 31,
      "representative_asset_id": "img_demo123"
    }
  ],
  "faces_count": 137,
  "people_count": 12,
  "latest_job": {
    "id": "job_demo123",
    "status": "done",
    "total": 248,
    "processed": 248,
    "faces_found": 137,
    "message": "Готово"
  },
  "album_id": "alb_demo123"
}
PATCH /api/people/{cluster_id}

Функция

PATCH /api/people/{cluster_id}

Описание

Присвоить или изменить имя группы человека.

Возвращаемый результат

JSON с результатом операции, изменёнными идентификаторами и связанными счётчиками.

Пример использования

curl -sS -X PATCH "https://renvumi.ru/api/people/person_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY" -H "Content-Type: application/json" --data "{\"name\":\"Анна\"}"

Пример возвращаемого результата

{
  "id": "person_demo123",
  "name": "Анна"
}
GET /api/people/{cluster_id}/face-thumb

Функция

GET /api/people/{cluster_id}/face-thumb

Описание

Превью обложки группы человека.

Возвращаемый результат

JPEG-превью лица для выбранной группы человека.

Пример использования

curl -sS -o preview.jpg "https://renvumi.ru/api/people/person_demo123/face-thumb?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

HTTP/1.1 200 OK
Content-Type: image/jpeg

<binary JPEG data>
GET /api/people/{cluster_id}/assets

Функция

GET /api/people/{cluster_id}/assets

Описание

Фотографии, относящиеся к выбранной группе человека.

Возвращаемый результат

JSON с выбранным человеком и фотографиями, в которых он найден.

Пример использования

curl -sS "https://renvumi.ru/api/people/person_demo123/assets?album_id=alb_demo123" -H "Authorization: Bearer rnv_YOUR_API_KEY"

Пример возвращаемого результата

{
  "person": {
    "id": "person_demo123",
    "name": "Анна"
  },
  "results": [
    {
      "id": "img_demo123",
      "name": "IMG_0001.jpg",
      "url": "/api/assets/img_demo123/thumb",
      "original_url": "/api/assets/img_demo123/file",
      "file_available": true,
      "status": "analyzed",
      "size": 2847312,
      "width": 4032,
      "height": 3024,
      "album_id": "alb_demo123",
      "album_name": "Отпуск 2026",
      "captured_at": "2026-08-14T12:31:04",
      "location_name": "Камчатский край",
      "search_tags": [
        "family",
        "outdoor",
        "mountain"
      ]
    }
  ],
  "count": 31,
  "album_id": "alb_demo123"
}

Форматы запросов

multipart/form-data

Используется для загрузки фотографий, ZIP-импорта и создания альбома. POST /api/upload: album_id, одно или несколько полей files, необязательный relative_paths как JSON-массив строк.

application/json

Используется для массовых операций, поиска, коллекций и настроек. При ошибке проверки параметров FastAPI возвращает HTTP 422.

Параметры строки запроса

Фильтры вроде album_id, limit, period, threshold и mode передаются в URL согласно Swagger/OpenAPI.

Коды ответа

200 / 201

Операция выполнена или задача успешно создана.

400 / 404 / 409 / 422

Некорректные параметры, ресурс не существует/не принадлежит пользователю, конфликт состояния или ошибка схемы запроса.

401

API-ключ отсутствует или недействителен.

402

Для Bearer API требуется активный тариф Personal или Pro, либо исчерпан тарифный лимит конкретной операции.

403 api_key_scope_forbidden

Метод доступен только через веб-сессию и намеренно недоступен API-ключу длительного действия.

423

Зашифрованное хранилище заблокировано. Войдите через веб-интерфейс с паролем, чтобы разблокировать ключ данных.

503

Временная недоступность фонового сервиса, резервного копирования или модели, либо сервис находится в режиме только чтения или восстановления.

Примеры

curl -H "Authorization: Bearer rnv_YOUR_KEY" \
  "https://renvumi.ru/api/capabilities"

curl -H "Authorization: Bearer rnv_YOUR_KEY" \
  "https://renvumi.ru/api/albums"

curl -H "Authorization: Bearer rnv_YOUR_KEY" \
  "https://renvumi.ru/api/text-search?q=собака%20на%20пляже&limit=10"

# Глобальные результаты по всем альбомам
curl -H "Authorization: Bearer rnv_YOUR_KEY" \
  "https://renvumi.ru/api/results"

# Одинаковые имена файлов при разном содержимом по всей медиатеке
curl -H "Authorization: Bearer rnv_YOUR_KEY" \
  "https://renvumi.ru/api/filename-conflicts"

# Единый список «Лучшие в серии» по всем альбомам
curl -H "Authorization: Bearer rnv_YOUR_KEY" \
  "https://renvumi.ru/api/best-shots?album_id=__global__"

curl -X POST -H "Authorization: Bearer rnv_YOUR_KEY" \
  -F "album_id=ALBUM_ID" -F "files=@photo.jpg" \
  "https://renvumi.ru/api/upload"

Всего в поддерживаемой внешней области доступа: 81 методов. Если клиенту нужна автоматическая проверка совместимости, используйте /api/capabilities и /openapi.json, а не жёстко зашитую версию интерфейса.