{"service":"mtg-api","endpoints":{"GET /schema":"tables, views, columns, row counts","GET /query":"?sql=SELECT+...&fmt=rows|objects|tsv&limit=5000 (read-only)","POST /query":"{\"sql\":\"SELECT ...\",\"params\":[],\"fmt\":\"rows|objects|tsv\",\"limit\":5000}","POST /cards/add":"{\"owner\":\"matt\",\"list\":\"4 Lightning Bolt (2X2) 117\",\"dry_run\":false}","POST /cards/remove":"{\"owner\":\"matt\",\"list\":\"1 Sol Ring\",\"dry_run\":false}","POST /prices":"{\"ids\":[\"<scryfall id>\",...]} -> {\"prices\":{id:{usd,foil,etched,eur,tix,tcg}}}","POST /admin":"{\"password\":\"...\"} -> {\"token\":\"...\",\"expires_at\":<unix>}","GET /logs":"?min=info&q=&event=&status=error&since=24&limit=100 — admin only","GET /logs/stats":"counts, slowest routes, retention — admin only","GET /maintenance":"what the daily job did last","POST /maintenance":"run it now — needs admin; {\"only\":\"orphans\"} or {\"all\":true,\"wait\":true}"},"auth":"Reads are open. Writes need Authorization: Bearer <token> from POST /admin."}