Lumilio-Photos API (1.0)

Download OpenAPI specification:

Media management system API with asset upload, processing, and organization features

Queue

List jobs with filters

Get a paginated list of jobs with optional state, queue, kind, and time range filters

query Parameters
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)

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get job by ID

Get detailed information about a specific job

path Parameters
id
required
integer

Job ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

List all queues

Get a list of all active queues with their metadata

query Parameters
limit
integer

Number of queues to return (default: 100)

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get job statistics

Get aggregated statistics about jobs by state

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

albums

List albums

Retrieve a paginated list of albums for the authenticated user

Authorizations:
BearerAuth
query Parameters
limit
integer
Default: 20

Maximum number of results (max 100)

offset
integer
Default: 0

Number of results to skip for pagination

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Create a new album

Create a new album for the authenticated user

Authorizations:
BearerAuth
Request Body schema: application/json
required

Album creation data

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Delete album

Delete an album by its ID

Authorizations:
BearerAuth
path Parameters
id
required
integer

Album ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get album by ID

Retrieve a specific album by its ID

Authorizations:
BearerAuth
path Parameters
id
required
integer

Album ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Update album

Update an existing album's information

Authorizations:
BearerAuth
path Parameters
id
required
integer

Album ID

Request Body schema: application/json
required

Album update data

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get assets in album

Retrieve all assets in a specific album

Authorizations:
BearerAuth
path Parameters
id
required
integer

Album ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Remove asset from album

Remove an asset from a specific album

Authorizations:
BearerAuth
path Parameters
id
required
integer

Album ID

assetId
required
string

Asset ID (UUID format)

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Add asset to album

Add an asset to a specific album

Authorizations:
BearerAuth
path Parameters
id
required
integer

Album ID

assetId
required
string

Asset ID (UUID format)

Request Body schema: application/json

Asset position in album

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Update asset position in album

Update the position of an asset within a specific album

Authorizations:
BearerAuth
path Parameters
id
required
integer

Album ID

assetId
required
string

Asset ID (UUID format)

Request Body schema: application/json
required

New position data

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get albums containing asset

Retrieve all albums that contain a specific asset

Authorizations:
BearerAuth
path Parameters
id
required
string

Asset ID (UUID format)

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

stats

Get available years

Get list of years that have photo data

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get camera lens combination stats

Get top N camera+lens combinations

query Parameters
limit
integer
Default: 20

Number of results to return

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get daily activity heatmap

Get daily shooting activity heatmap data for the past year

query Parameters
days
integer
Default: 365

Number of days to look back

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get focal length distribution

Get distribution of commonly used focal lengths

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get time distribution

Get shooting time distribution by hour or month

query Parameters
type
string
Default: "hourly"
Enum: "hourly" "monthly"

Distribution type: hourly or monthly

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

assets

List assets

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.

query Parameters
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

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Upload a single asset

Upload a single photo, video, audio file, or document to the system. The file is staged in a repository and queued for processing.

header Parameters
X-Content-Hash
string

Client-calculated BLAKE3 hash of the file

Request Body schema:

Asset file to upload | Repository UUID (uses default repository if not provided)

One of
file (file)

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Delete asset

Soft delete an asset by marking it as deleted. The physical file is not removed.

path Parameters
id
required
string
Example: "550e8400-e29b-41d4-a716-446655440000"

Asset ID (UUID format)

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get asset by ID

Retrieve detailed information about a specific asset. Optionally include thumbnails, tags, albums, species predictions, OCR results, face recognition, and AI descriptions.

path Parameters
id
required
string
Example: "550e8400-e29b-41d4-a716-446655440000"

Asset ID (UUID format)

query Parameters
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

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Update asset metadata

Update the specific metadata of an asset (e.g., photo EXIF data, video metadata).

path Parameters
id
required
string
Example: "550e8400-e29b-41d4-a716-446655440000"

Asset ID (UUID format)

Request Body schema: application/json
required

Asset metadata

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Add asset to album

Associate an asset with a specific album by asset ID and album ID.

path Parameters
id
required
string
Example: "550e8400-e29b-41d4-a716-446655440000"

Asset ID (UUID format)

albumId
required
integer
Example: 123

Album ID

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get web-optimized audio

Serve the web-optimized MP3 audio version for an asset by asset ID.

path Parameters
id
required
string
Example: "550e8400-e29b-41d4-a716-446655440000"

Asset ID (UUID format)

Responses

Update asset description

Update the description metadata of an asset

path Parameters
id
required
string

Asset ID

Request Body schema: application/json
required

Description data

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Update asset like status

Update the like/favorite status of a specific asset

path Parameters
id
required
string

Asset ID

Request Body schema: application/json
required

Like data

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get original file

Serve the original file content for an asset by asset ID. Returns the file as an octet-stream.

path Parameters
id
required
string
Example: "550e8400-e29b-41d4-a716-446655440000"

Asset ID (UUID format)

Responses

Update asset rating

Update the rating (0-5) of a specific asset

path Parameters
id
required
string

Asset ID

Request Body schema: application/json
required

Rating data

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Update asset rating and like status

Update both the rating (0-5) and like/favorite status of a specific asset

path Parameters
id
required
string

Asset ID

Request Body schema: application/json
required

Rating and like data

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Reprocess asset

Reprocess a failed or warning asset by resetting its status and re-enqueuing for processing

path Parameters
id
required
string

Asset ID

Request Body schema: application/json

Reprocessing tasks (optional)

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "asset_id": "550e8400-e29b-41d4-a716-446655440000",
  • "failed_tasks": [
    ],
  • "message": "Reprocessing job queued successfully",
  • "retry_tasks": [
    ],
  • "status": "queued"
}

Get asset thumbnail

Retrieve a specific thumbnail image for an asset by asset ID and size parameter. Returns the image file directly.

path Parameters
id
required
string
Example: "550e8400-e29b-41d4-a716-446655440000"

Asset ID (UUID format)

query Parameters
size
string
Default: "medium"
Enum: "small" "medium" "large"

Thumbnail size

Responses

Get web-optimized video

Serve the web-optimized MP4 video version for an asset by asset ID.

path Parameters
id
required
string
Example: "550e8400-e29b-41d4-a716-446655440000"

Asset ID (UUID format)

Responses

Batch upload assets with chunk support

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.

Request Body schema:

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}

One of
string (repository_id)

Responses

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get upload configuration

Get current upload configuration including chunk size and concurrency limits based on system memory

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get upload progress

Get detailed progress information for upload sessions

query Parameters
session_ids
string

Comma-separated session IDs (optional)

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Filter assets

Filter assets using comprehensive filtering options including repository selection, RAW, rating, liked status, filename patterns, date ranges, camera make, and lens

Request Body schema: application/json
required

Filter criteria

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get filter options

Get available camera makes and lenses for filter dropdowns

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get liked assets

Get all assets that have been liked/favorited

query Parameters
limit
integer
Default: 20

Number of assets to return

offset
integer
Default: 0

Number of assets to skip

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get assets by rating

Get assets with a specific rating (0-5)

path Parameters
rating
required
integer

Rating (0-5)

query Parameters
limit
integer
Default: 20

Number of assets to return

offset
integer
Default: 0

Number of assets to skip

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Search assets

Search assets using either filename matching or semantic vector search. Can be combined with comprehensive filters including repository selection.

Request Body schema: application/json
required

Search criteria

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get supported asset types

Retrieve a list of all supported asset types in the system.

Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

auth

Login user

Authenticate user with username and password

Request Body schema: application/json
required

Login credentials

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Logout user

Revoke the user's refresh token

Request Body schema: application/json
required

Refresh token to revoke

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Get current user

Get information about the currently authenticated user

Authorizations:
BearerAuth
Request Body schema: application/json
object

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Refresh access token

Generate a new access token using a valid refresh token

Request Body schema: application/json
required

Refresh token

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}

Register a new user

Create a new user account with username, email, and password

Request Body schema: application/json
required

Registration data

One of
object

Responses

Request samples

Content type
application/json
Example
{ }

Response samples

Content type
application/json
{
  • "code": 0,
  • "data": {
    },
  • "error": "error details",
  • "message": "success"
}