Download OpenAPI specification:
Media management system API with asset upload, processing, and organization features
Get a paginated list of jobs with optional state, queue, kind, and time range filters
| state | string Job state filter (available,scheduled,running,retryable,completed,cancelled,discarded) |
| queue | string Queue name filter |
| kind | string Job kind filter |
| limit | integer Number of jobs to return (default: 50, max: 200) |
| cursor | string Pagination cursor for next page |
| time_range | string Time range filter (1h, 24h, 30d) - filters by created_at |
| include_count | boolean Include total count of matching jobs (may be slower) |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get detailed information about a specific job
| id required | integer Job ID |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get a list of all active queues with their metadata
| limit | integer Number of queues to return (default: 100) |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get aggregated statistics about jobs by state
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Retrieve a paginated list of albums for the authenticated user
| limit | integer Default: 20 Maximum number of results (max 100) |
| offset | integer Default: 0 Number of results to skip for pagination |
| repository_id | string Optional repository UUID filter |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Create a new album for the authenticated user
Album creation data
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Delete an album by its ID
| id required | integer Album ID |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Retrieve a specific album by its ID
| id required | integer Album ID |
| repository_id | string Optional repository UUID filter |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Update an existing album's information
| id required | integer Album ID |
Album update data
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Retrieve all assets in a specific album
| id required | integer Album ID |
| repository_id | string Optional repository UUID filter |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Remove an asset from a specific album
| id required | integer Album ID |
| assetId required | string Asset ID (UUID format) |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Add an asset to a specific album
| id required | integer Album ID |
| assetId required | string Asset ID (UUID format) |
Asset position in album
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Update the position of an asset within a specific album
| id required | integer Album ID |
| assetId required | string Asset ID (UUID format) |
New position data
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Retrieve all albums that contain a specific asset
| id required | string Asset ID (UUID format) |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Upload a single photo, video, audio file, or document to the system. The file is staged in a repository and queued for processing.
| X-Content-Hash | string Client-calculated BLAKE3 hash of the file |
Asset file to upload | Repository UUID (uses default repository if not provided)
{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Soft delete an asset by marking it as deleted. The physical file is not removed.
| id required | string Example: "550e8400-e29b-41d4-a716-446655440000" Asset ID (UUID format) |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Retrieve detailed information about a specific asset. Optionally include thumbnails, tags, albums, species predictions, OCR results, face recognition, and captions.
| id required | string Example: "550e8400-e29b-41d4-a716-446655440000" Asset ID (UUID format) |
| include_thumbnails | boolean Default: true Include thumbnails |
| include_tags | boolean Default: true Include tags |
| include_albums | boolean Default: true Include albums |
| include_species | boolean Default: true Include species predictions |
| include_ocr | boolean Default: false Include OCR results |
| include_faces | boolean Default: false Include face recognition |
| include_captions | boolean Default: false Include captions |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Update the specific metadata of an asset (e.g., photo EXIF data, video metadata).
| id required | string Example: "550e8400-e29b-41d4-a716-446655440000" Asset ID (UUID format) |
Asset metadata
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Associate an asset with a specific album by asset ID and album ID.
| id required | string Example: "550e8400-e29b-41d4-a716-446655440000" Asset ID (UUID format) |
| albumId required | integer Example: 123 Album ID |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Update the description metadata of an asset
| id required | string Asset ID |
Description data
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Update the like/favorite status of a specific asset
| id required | string Asset ID |
Like data
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Update the rating (0-5) of a specific asset
| id required | string Asset ID |
Rating data
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Update both the rating (0-5) and like/favorite status of a specific asset
| id required | string Asset ID |
Rating and like data
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Reprocess a failed or warning asset by resetting its status and re-enqueuing for processing
| id required | string Asset ID |
Reprocessing tasks (optional)
{ }{- "asset_id": "550e8400-e29b-41d4-a716-446655440000",
- "failed_tasks": [
- "thumbnail_small",
- "transcode_1080p"
], - "message": "Reprocessing job queued successfully",
- "retry_tasks": [
- "thumbnail_small",
- "transcode_1080p"
], - "status": "queued"
}Retrieve a specific thumbnail image for an asset by asset ID and size parameter. Returns the image file directly.
| id required | string Example: "550e8400-e29b-41d4-a716-446655440000" Asset ID (UUID format) |
| size | string Default: "medium" Enum: "small" "medium" "large" Thumbnail size |
Unified batch upload endpoint that supports both small files and chunked large files. Field names should follow format: single_{session_id} for single files or chunk_{session_id}{index}{total} for chunks.
Repository UUID (uses default repository if not provided) | Single file upload - use format: single_{session_id} | Chunked file upload - use format: chunk_{session_id}{index}{total}
{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get current upload configuration including chunk size and concurrency limits based on system memory
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get detailed progress information for upload sessions
| session_ids | string Comma-separated session IDs (optional) |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Select a small set of featured photos using deterministic weighted sampling (A-ES) with diversity constraints.
| count | integer Default: 8 Number of featured photos to return |
| candidate_limit | integer Default: 240 Max candidate photos considered before selection |
| days | integer Default: 3650 Only consider photos from the last N days (0 disables date cutoff) |
| seed | string Deterministic seed (default: current UTC date YYYY-MM-DD) |
| repository_id | string Optional repository UUID filter |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get available camera makes and lenses for filter dropdowns
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Queue a background batch that backfills AI indexing for existing photos.
Reindex request
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Return repositories that can be used to scope indexing stats and reindex requests.
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Return indexing coverage and queued job counts for photo AI tasks.
| repository_id | string Optional repository UUID filter |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get all assets that have been liked/favorited
| limit | integer Default: 20 Number of assets to return |
| offset | integer Default: 0 Number of assets to skip |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Unified endpoint for listing, filtering, and searching assets. Replaces separate /filter and /search endpoints.
Query parameters
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Return lightweight paginated photo records containing only map-related fields (asset ID, filename, times, GPS lat/lon).
| limit | integer Default: 1000 Page size (1-5000) |
| offset | integer Default: 0 Page offset |
| repository_id | string Optional repository UUID filter |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get assets with a specific rating (0-5)
| rating required | integer Rating (0-5) |
| limit | integer Default: 20 Number of assets to return |
| offset | integer Default: 0 Number of assets to skip |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Search assets with optional top results enhancement and filename fallback.
Search parameters
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Retrieve a list of all supported asset types in the system.
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Return whether Lumilio is still in first-user bootstrap mode and which role the next registration receives.
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Authenticate user with username and password. Returns an MFA challenge instead of session tokens when TOTP is enabled.
Login credentials
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Revoke the user's refresh token
Refresh token to revoke
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get information about the currently authenticated user
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Generate a short-lived media token for image/video/audio URL authorization in browser media elements.
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get the authenticated user's MFA status, including TOTP enablement and remaining recovery codes.
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}List the authenticated user's enrolled passkeys.
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Delete one enrolled passkey for the authenticated user.
| id required | integer Passkey ID |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Create WebAuthn registration options to add a new passkey to the authenticated account.
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Verify a passkey enrollment response and attach the new passkey to the authenticated account.
Passkey enrollment verification payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Generate a fresh set of recovery codes for the authenticated user.
Recovery code regeneration payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Disable TOTP MFA and invalidate recovery codes for the authenticated user.
Disable TOTP payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Verify a TOTP setup code and enable TOTP MFA for the authenticated user.
TOTP enable payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Generate a new TOTP secret and setup token for the authenticated user.
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Verify a pending MFA login challenge with a TOTP code or recovery code.
MFA verification payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Create WebAuthn login options for a username-first passkey login flow.
Username for passkey login
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Verify a passkey login assertion and issue session tokens.
Passkey login verification payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Create WebAuthn registration options for a staged registration session.
Registration session
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Verify a staged registration passkey response, create the user, and issue session tokens.
Passkey registration verification payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Generate a new access token using a valid refresh token
Refresh token
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Create a staged registration session with username and password before passkey or TOTP enrollment.
Registration data
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Verify the staged TOTP code, create the user account, and issue session tokens plus recovery codes.
TOTP verification payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Generate TOTP setup data for a staged registration session.
Registration session
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Return a de-sensitized view of backend ML and LLM runtime capabilities without exposing secrets.
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}List recognized people for the current repository scope.
| repository_id | string Optional repository UUID filter |
| limit | integer Default: 24 Maximum number of results (max 100) |
| offset | integer Default: 0 Number of results to skip |
{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get a single recognized person by cluster ID.
| id required | integer Person ID |
| repository_id | string Optional repository UUID filter |
{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Rename a recognized person. Successful updates mark the person as confirmed.
| id required | integer Person ID |
| repository_id | string Optional repository UUID filter |
Person update payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}List assets scoped to a specific person while reusing the unified asset query filters.
| id required | integer Person ID |
Asset query parameters
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Return persisted system settings without exposing secret values.
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Update persisted system settings. API keys are write-only and never returned.
System settings patch
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Validate the persisted LLM configuration by issuing a lightweight test request.
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get list of years that have photo data
| repository_id | string Optional repository UUID filter |
{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get top N camera+lens combinations
| limit | integer Default: 20 Number of results to return |
| repository_id | string Optional repository UUID filter |
{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get daily shooting activity heatmap data for a calendar year or custom date range.
| year | integer Calendar year (e.g. 2024) |
| start_date | string Start date in YYYY-MM-DD (must be used with end_date) |
| end_date | string End date in YYYY-MM-DD, inclusive (must be used with start_date) |
| days | integer Deprecated fallback: number of days to look back (used only when year/start_date/end_date are absent) |
| repository_id | string Optional repository UUID filter |
{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get distribution of commonly used focal lengths
| repository_id | string Optional repository UUID filter |
{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Get shooting time distribution by hour or month
| type | string Default: "hourly" Enum: "hourly" "monthly" Distribution type: hourly or monthly |
| repository_id | string Optional repository UUID filter |
{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}List users with ownership statistics for administrator management views.
| limit | integer Default: 20 Maximum number of results |
| offset | integer Default: 0 Number of results to skip |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Update user identity, role, status, and avatar fields as an administrator.
| id required | integer User ID |
User update payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Generate a temporary password and clear passkeys, TOTP, recovery codes, and refresh tokens for a user.
| id required | integer User ID |
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Verify the current password, set a new password, and revoke all refresh tokens for the current user.
Password change payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}Update the current user's profile fields such as display name and avatar URL.
Profile update payload
{ }{- "code": 0,
- "data": {
- "cleared_passkeys": true,
- "cleared_totp": true,
- "temporary_password": "string"
}, - "error": "error details",
- "message": "success"
}