{"name":"Buycycle Recategorization API","version":"1.0.0","endpoints":{"GET /health":"Health check","GET /api/verification/complete-flow":"Verification API documentation (serves v2)","POST /api/verification/complete-flow":"Verification with dynamic rules (requires JWT) — serves v2","GET /api/v1/verification/complete-flow":"V1 (legacy, hardcoded rules) API documentation","POST /api/v1/verification/complete-flow":"V1 (legacy, hardcoded rules) verification (requires JWT)","GET /api/v2/verification/complete-flow":"V2 (explicit alias) API documentation","POST /api/v2/verification/complete-flow":"V2 (explicit alias) verification (requires JWT)","GET /api/bike-verification/verify":"Bike verification API documentation","POST /api/bike-verification/verify":"Verify a single bike listing (requires JWT)","GET /api/bike-verification/bike/:bikeId":"Get raw bike data for debugging (requires JWT)","POST /api/bike-verification/batch":"Verify multiple bikes (max 20, requires JWT)","GET /api/compare/complete-flow":"OpenAI vs Gemini comparison API documentation","POST /api/compare/complete-flow":"Run components flow through OpenAI AND Gemini, side-by-side + diff (requires JWT)","GET /api/logs":"Query request logs (requires JWT)","GET /api/logs/stats":"Get log statistics (requires JWT)"},"versions":{"default":"/api/verification and /api/v2/verification both serve v2 (dynamic rules from config/verification-rules.md)","legacy":"/api/v1/verification serves v1 (hardcoded rules) — kept for emergency rollback"},"authentication":{"type":"JWT Bearer Token","header":"Authorization: Bearer <token>","generateToken":"npm run generate-token"},"logging":{"description":"All requests are logged to PostgreSQL for monitoring and debugging","queryParams":{"/api/logs":"productId, status, verificationStatus, apiVersion, errorCode, startDate, endDate, limit, offset","/api/logs/stats":"startDate, endDate"}}}