{"openapi":"3.1.0","info":{"title":"Chess Puzzles API","version":"1.0.0","description":"Serve chess tactics puzzles on demand: a random puzzle (optionally constrained by theme and rating), a single puzzle by id, full search and filtering by tactic theme and difficulty rating, and the complete list of available themes. Every puzzle includes the starting position as FEN, the full solution as UCI moves, the side to move, the difficulty rating, popularity and play count, theme and opening tags and a direct link to train it on Lichess. Built on a curated 20,000-puzzle sample of the open Lichess puzzle database (CC0) spanning 73 themes and ratings from roughly 400 to 3100. Every endpoint accepts input via the query string or the request body and returns lean JSON. Pure server-side data (no third-party upstream), so responses are instant and always available. Ideal for chess apps, training tools, \"puzzle of the day\" features and games.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/chesspuzzles-api","description":"oanor gateway"}],"tags":[{"name":"Chess"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/puzzle":{"get":{"operationId":"get_v1_puzzle","tags":["Chess"],"summary":"Single puzzle by id","description":"","parameters":[{"name":"id","in":"query","required":true,"description":"Puzzle id","schema":{"type":"string"},"example":"00008"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/random":{"get":{"operationId":"get_v1_random","tags":["Chess"],"summary":"Random puzzle by theme/rating","description":"","parameters":[{"name":"theme","in":"query","required":false,"description":"Tactic theme","schema":{"type":"string"},"example":"mateIn2"},{"name":"min_rating","in":"query","required":false,"description":"Minimum rating","schema":{"type":"string"},"example":"1200"},{"name":"max_rating","in":"query","required":false,"description":"Maximum rating","schema":{"type":"string"},"example":"1800"},{"name":"size","in":"query","required":false,"description":"1..10 (default 1)","schema":{"type":"string"},"example":"1"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/search":{"get":{"operationId":"get_v1_search","tags":["Chess"],"summary":"Search & filter puzzles","description":"","parameters":[{"name":"theme","in":"query","required":false,"description":"Tactic theme","schema":{"type":"string"},"example":"fork"},{"name":"min_rating","in":"query","required":false,"description":"Minimum rating","schema":{"type":"string"},"example":"1000"},{"name":"max_rating","in":"query","required":false,"description":"Maximum rating","schema":{"type":"string"},"example":"2000"},{"name":"sort","in":"query","required":false,"description":"rating|popularity|plays","schema":{"type":"string"},"example":"popularity"},{"name":"limit","in":"query","required":false,"description":"1..100 (default 20)","schema":{"type":"string"},"example":"20"},{"name":"offset","in":"query","required":false,"description":"Offset","schema":{"type":"string"},"example":"0"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/themes":{"get":{"operationId":"get_v1_themes","tags":["Chess"],"summary":"All tactic themes with counts","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK"},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":18000,"rps_limit":3,"hard_limit":true},{"slug":"basic","name":"Basic","price_cents_month":350,"monthly_call_quota":220000,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1100,"monthly_call_quota":1800000,"rps_limit":25,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":3100,"monthly_call_quota":9000000,"rps_limit":60,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/chesspuzzles-api"}