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": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Get detailed information about a specific job
| id required | integer Job ID |
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Get aggregated statistics about jobs by state
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "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 |
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Create a new album for the authenticated user
Album creation data
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Delete an album by its ID
| id required | integer Album ID |
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Retrieve a specific album by its ID
| id required | integer Album ID |
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Update an existing album's information
| id required | integer Album ID |
Album update data
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Retrieve all assets in a specific album
| id required | integer Album ID |
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Retrieve all albums that contain a specific asset
| id required | string Asset ID (UUID format) |
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "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 |
{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Retrieve a paginated list of assets. Filter by type(s) or owner. Assets are sorted by taken_time (photo capture time or video record time). At least one filter parameter is required.
| type | string Enum: "PHOTO" "VIDEO" "AUDIO" "DOCUMENT" Example: type="PHOTO" Single asset type filter |
| types | string Example: types="PHOTO,VIDEO" Multiple asset types filter (comma-separated) |
| owner_id | integer Example: owner_id=123 Filter by owner ID |
| limit | integer Default: 20 Example: limit=20 Maximum number of results (max 100) |
| offset | integer Default: 0 Number of results to skip for pagination |
| sort_order | string Default: "\"desc\"" Enum: "asc" "desc" Example: sort_order="desc" Sort order by taken_time |
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Retrieve detailed information about a specific asset. Optionally include thumbnails, tags, albums, species predictions, OCR results, face recognition, and AI descriptions.
| 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_ai_descriptions | boolean Default: false Include AI descriptions |
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Update the description metadata of an asset
| id required | string Asset ID |
Description data
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Update the like/favorite status of a specific asset
| id required | string Asset ID |
Like data
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Update the rating (0-5) of a specific asset
| id required | string Asset ID |
Rating data
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Get current upload configuration including chunk size and concurrency limits based on system memory
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Get detailed progress information for upload sessions
| session_ids | string Comma-separated session IDs (optional) |
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Filter assets using comprehensive filtering options including repository selection, RAW, rating, liked status, filename patterns, date ranges, camera make, and lens
Filter criteria
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Get available camera makes and lenses for filter dropdowns
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "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": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Search assets using either filename matching or semantic vector search. Can be combined with comprehensive filters including repository selection.
Search criteria
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Retrieve a list of all supported asset types in the system.
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Authenticate user with username and password
Login credentials
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Revoke the user's refresh token
Refresh token to revoke
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Get information about the currently authenticated user
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Generate a new access token using a valid refresh token
Refresh token
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}Create a new user account with username, email, and password
Registration data
{ }{- "code": 0,
- "data": {
- "years": [
- 0
]
}, - "error": "error details",
- "message": "success"
}