API
Build on osu! ascent
Read-only JSON, CORS-enabled, 120 requests/minute per IP. Other Discord bots and community projects are welcome.
GET /api/v1/player/{id} | Player snapshot (rank, pp, accuracy, peak…) |
GET /api/v1/player/{id}/history?days=90 | Rank/pp/accuracy snapshots over time |
GET /api/v1/player/{id}/top-plays | Top 100 plays |
GET /api/v1/player/{id}/recent | Recent plays |
GET /api/v1/player/{id}/events | Career events (top plays, milestones, peaks…) |
GET /api/v1/player/{id}/skills | Skill profile with derivations and limitations |
GET /api/v1/map/{id} | Beatmap + leaderboard of tracked players |
GET /api/v1/leaderboard?country=US&sort=gain7d | Rankings (sort: rank, pp, accuracy, playcount, gain7d, peak) |
GET /api/v1/tournament | All tournaments |
GET /api/v1/tournament/{slug} | Tournament, settings and entrants |
GET /api/v1/tournament/{slug}/bracket | Every match with links (for embeds/overlays) |
GET /api/v1/tournament/{slug}/standings | Round robin / swiss / group standings |
GET /api/v1/match/{id} | Match, maps and its ⭐ market |
GET /api/v1/markets[/{id}] | Open prediction markets with live odds |
GET /api/v1/stars | Star economy stats |
GET /api/v1/server/{id}[/highlights|/awards] | Public server dashboards only |
GET /api/v1/events?after=ID&types=NEW_TOP_PLAY&min=50 | The global event stream (poll, or use SSE below) |
GET /api/events/stream?after=ID | Server-Sent Events: the live feed |
GET /api/v1/bible[?q=streams] | Bible chapters (metadata) or search |
GET /api/v1/bible/{slug} | One chapter, including HTML and citations |
GET /api/v1/search?q= | Global search |
Responses are
{ data } or { error }. Rows from the sandbox carry is_demo: 1 — never present them as real osu! data. osu! data originates from the official osu! API; respect ppy's terms when you reuse it.