Public

GET /api/gallery

Query params:

  • cursor (number, default 0)
  • limit (number, default 24, max 50)
  • tag (string, lowercase)
  • sort: taken_date|uploaded|added|size
  • order: asc|desc

Returns { items, next_cursor, available_tags } for published items.

GET /api/gallery/:id

Returns a single published item or 404.

GET|HEAD /media/

  • Supports variant=original|thumb|display
  • Optional: w=<number> and format=webp|jpeg|png
  • Only originals/ and thumbs/ keys are allowed

Admin (edge-protected)

POST /api/admin/media

Multipart upload (files field). Enforces 10MB max and image-only types.

GET /api/admin/media

Query params:

  • status (optional)
  • tag (optional)
  • q (caption search)
  • cursor, limit (default 30, max 200)

GET /api/admin/media/:id

Fetches a single record (any status).

PATCH /api/admin/media/:id

Body supports caption, event_date, tags, status.

DELETE /api/admin/media/:id

Deletes KV record, indexes, and R2 objects.

POST /api/admin/repair/ids

Repairs specific IDs (index fixes).

POST /api/admin/repair/orphans

Deletes orphaned R2 objects and KV records, then rebuilds indexes.