{"name":"Blunders Chess API","version":"2.0.0","database":"PostgreSQL","endpoints":[{"path":"/health","method":"GET","description":"Health check"},{"path":"/stats","method":"GET","description":"Get database statistics"},{"path":"/themes","method":"GET","description":"List all puzzle themes with counts"},{"path":"/openings","method":"GET","description":"List all puzzle openings with counts"},{"path":"/puzzle/random","method":"GET","description":"Get a random puzzle"},{"path":"/puzzle/:id","method":"GET","description":"Get a specific puzzle by ID"},{"path":"/puzzles","method":"GET","description":"Get puzzles with filtering"},{"path":"/puzzles/batch","method":"GET","description":"Get random puzzles for training"},{"path":"/puzzles/count","method":"GET","description":"Get puzzle count"},{"path":"/openings/search","method":"GET","description":"Search openings by name/ECO"},{"path":"/openings/fen/:fen","method":"GET","description":"Get opening by FEN"},{"path":"/openings/eco/:eco","method":"GET","description":"Get openings by ECO code"},{"path":"/courses","method":"GET","description":"List all opening courses"},{"path":"/courses/:id","method":"GET","description":"Get course with variations"},{"path":"/courses/progress/user","method":"GET","description":"Get user progress"},{"path":"/courses/progress/:courseId","method":"POST","description":"Update progress"},{"path":"/seed/courses","method":"POST","description":"Seed opening courses from TSV files"},{"path":"/seed/courses/status","method":"GET","description":"Check seeded courses status"},{"path":"/skills/progress/:skillId","method":"GET","description":"Get skill progress"},{"path":"/skills/progress/:skillId/attempt","method":"POST","description":"Record skill puzzle attempt"},{"path":"/skills/progress/all","method":"GET","description":"Get all skill progress for user"},{"path":"/skills/puzzles","method":"GET","description":"Get puzzles for a skill with rating range"},{"path":"/onboarding/state","method":"GET","description":"Get user onboarding state"},{"path":"/onboarding/complete","method":"POST","description":"Complete onboarding"},{"path":"/onboarding/standalone-mode","method":"POST","description":"Set standalone mode with openings"},{"path":"/onboarding/skip-chesscom","method":"POST","description":"Skip chess.com sync"},{"path":"/onboarding/reset","method":"POST","description":"Reset onboarding (testing)"},{"path":"/billing/status","method":"GET","description":"Check subscription status"},{"path":"/billing/checkout","method":"POST","description":"Create Stripe checkout session"},{"path":"/billing/portal","method":"POST","description":"Create Stripe billing portal session"}]}