{"openapi":"3.1.0","info":{"title":"AtCoder Rating & Contest API","version":"1.0.0","description":"Live competitive-programming rating data from AtCoder, the largest Japanese competitive-programming platform, over its public rating-history feed — no key, nothing stored. This is the contest-rating social view for a coder: their AtCoder rating, colour tier, contest record and performance over time, distinct from the other competitive-programming and developer platforms in the catalogue — AtCoder runs its own AGC/ABC contests, its own rating system and its own community. The user endpoint returns a profile snapshot: current rating, peak rating, the AtCoder colour tier (gray, brown, green, cyan, blue, yellow, orange, red), the number of rated contests, the best placing, the best performance and the latest contest. The history endpoint returns the full per-contest rating timeline — each contest with its date, old and new rating, the rating delta, placing, performance and whether it counted as rated. The stats endpoint aggregates a coder's record: rated versus unrated contests, average and best performance, contest wins, podium finishes, the rating range and per-year activity. Build coder leaderboards, rating cards, contest-tracking bots and recruiting signals on top of real AtCoder data. Lookup is by handle; the legendary handle \"tourist\" is always available.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/atcoder-api","description":"oanor gateway"}],"tags":[{"name":"User"},{"name":"History"},{"name":"Stats"},{"name":"Meta"}],"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/user":{"get":{"operationId":"get_v1_user","tags":["User"],"summary":"Profile snapshot — rating, tier, record","description":"","parameters":[{"name":"handle","in":"query","required":true,"description":"AtCoder handle","schema":{"type":"string"},"example":"tourist"}],"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/history":{"get":{"operationId":"get_v1_history","tags":["History"],"summary":"Full per-contest rating timeline","description":"","parameters":[{"name":"handle","in":"query","required":true,"description":"AtCoder handle","schema":{"type":"string"},"example":"tourist"},{"name":"limit","in":"query","required":false,"description":"Max contests (default 100, max 500)","schema":{"type":"string"},"example":"100"},{"name":"rated_only","in":"query","required":false,"description":"Only rated contests (true)","schema":{"type":"string"},"example":"true"}],"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/stats":{"get":{"operationId":"get_v1_stats","tags":["Stats"],"summary":"Aggregated record — averages, wins, podiums","description":"","parameters":[{"name":"handle","in":"query","required":true,"description":"AtCoder handle","schema":{"type":"string"},"example":"tourist"}],"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/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Service metadata","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":16000,"rps_limit":3,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":590,"monthly_call_quota":240000,"rps_limit":10,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1740,"monthly_call_quota":1150000,"rps_limit":25,"hard_limit":true},{"slug":"scale","name":"Scale","price_cents_month":3950,"monthly_call_quota":4100000,"rps_limit":55,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/atcoder-api"}