Public
GET /api/gallery
Query params:
cursor(number, default 0)limit(number, default 24, max 50)tag(string, lowercase)sort:taken_date|uploaded|added|sizeorder: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>andformat=webp|jpeg|png - Only
originals/andthumbs/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.