{"service": "AH Monitor", "documentation_html": "https://ahmonitor.com/pro#api-reference", "notes": ["Responses use Content-Type: application/json; charset=utf-8 unless otherwise noted.", "Pass server_key (poller server key from /api/status) to scope snapshot data to a realm.", "GET /api/pro/analytics scans substantial snapshot history; frequent or parallel calls can exhaust upstream timeouts (502 from proxies).", "GET /api/pro/analytics is cached in-memory for about 90 seconds per server_key, q, and limit (per server process).", "GET /api/overview uses the latest snapshot plus bounded history strips (recent snapshots + top rows) so the dashboard stays responsive.", "Account endpoints require ACCOUNTS_DATABASE_URL (typically a second database on the same PostgreSQL instance as DATABASE_URL). Login and signup set HttpOnly cookie ah_session (send credentials from browsers)."], "endpoints": [{"method": "GET", "path": "/api", "query": [], "description": "This catalog as JSON."}, {"method": "GET", "path": "/api/auth/me", "query": [], "description": "Current signed-in user from session cookie, or user: null."}, {"method": "POST", "path": "/api/auth/signup", "query": [], "description": "JSON body username, password; creates account and sets session cookie."}, {"method": "POST", "path": "/api/auth/login", "query": [], "description": "JSON body username, password; sets session cookie."}, {"method": "POST", "path": "/api/auth/logout", "query": [], "description": "Clears server session and cookie."}, {"method": "POST", "path": "/api/auth/subscribe-demo", "query": [], "description": "JSON body days? (default 30); demo Pro extension for signed-in user."}, {"method": "GET", "path": "/api/status", "query": ["server_key?"], "description": "Poller status and latest snapshot summary; each server includes snapshot_pull (stored DB pulls)."}, {"method": "GET", "path": "/api/server-pull-history", "query": ["server_key (required)", "limit? (1-100, default 40)"], "description": "Recent stored auction snapshots for the realm (counts and aggregate row totals)."}, {"method": "GET", "path": "/api/servers", "query": [], "description": "Configured realm entries from the poller."}, {"method": "GET", "path": "/api/overview", "query": ["server_key?"], "description": "Latest AH snapshot rows with embedded price history strips."}, {"method": "GET", "path": "/api/fish-history", "query": ["server_key?"], "description": "Items with fish-related names and stored snapshot history."}, {"method": "GET", "path": "/api/good-deals", "query": ["server_key?"], "description": "Notable price drops versus the prior snapshot."}, {"method": "GET", "path": "/api/buy-guide", "query": ["server_key?"], "description": "Trend-based buy/hold/avoid style signals."}, {"method": "GET", "path": "/api/pro/analytics", "query": ["server_key?", "q?", "limit? (1-500, default 300)"], "description": "Ranked Pro scanner rows with analytics fields and history."}, {"method": "GET", "path": "/api/item-history", "query": ["item_id (required)", "server_key?"], "description": "Per-item aggregate snapshots (item_snapshots time series)."}, {"method": "GET", "path": "/api/items/search", "query": ["q?", "limit? (1-50)", "server_key?"], "description": "Search item_metadata and pet cage listings seen on the realm."}, {"method": "GET", "path": "/api/item-detail", "query": ["item_id (required)", "pet_species_id?", "server_key?"], "description": "Market snapshot history for an item or pet cage on the realm."}, {"method": "GET", "path": "/api/item-media", "query": ["item_id (required)", "pet_species_id?", "server_key?"], "description": "Blizzard static icon URL and tooltip fields (region follows selected realm)."}]}