Endpoints
GET/api/leaderboard?limit=50&cursor=...
Returns up to 50 public leaderboard rows, stable sorting metadata, and a cursor for the next page.Rate limit: 60/min/IP, 1000/day/IPParameters
limit(integer) — Number of rows, capped at 50cursor(string) — Opaque base64 cursor from previous page
Response fieldsversion, generatedAt, startingRank, nextCursor, data[]
GET/api/user/{login}
Looks up a connected GitHub login, returning rank, percentile data, and public profile fields when found.Rate limit: 20/min/IP, 200/day/IPParameters
login(string) — GitHub username, case-insensitive, leading @ ignored
Response fieldsversion, generatedAt, found, totalUsers, data
GET/api/rank/{n}
Returns the user currently occupying rank n using the canonical leaderboard ordering.Rate limit: 20/min/IP, 200/day/IPParameters
n(integer) — Positive integer rank
Response fieldsversion, generatedAt, found, data
GET/api/badge/{login}?theme=light
Returns an SVG badge showing the user's rank. Unregistered users get a prompt to join. Embed in READMEs or websites. Append .svg to the login for explicit file extension (optional).Rate limit: 20/min/IP, 200/day/IPParameters
login(string) — GitHub username, case-insensitive, leading @ ignored. .svg extension is optional.theme(string) — "light" (default) or "dark"
Response fieldsSVG image (Content-Type: image/svg+xml)
GET/api/user/{login}/history?days=30
Returns the commit count history for a user over a given time window. Useful for tracking growth and rank movement over time.Rate limit: 20/min/IP, 200/day/IPParameters
login(string) — GitHub username, case-insensitivedays(integer) — Number of days to look back (1–365, default 30)
Response fieldslogin, days, history[].allTimeCommits, history[].recordedAt
GET/api/leaderboard/time-based?days=90&limit=50
Returns a leaderboard ranked by commits gained within a time window, using score history snapshots.Rate limit: 60/min/IP, 1000/day/IPParameters
days(integer) — Number of days to look back (1–365, default 90)limit(integer) — Number of rows, capped at 50
Response fieldsdays, generatedAt, data[].commitsDelta, data[].rank, data[].login, data[].allTimeCommits
Example Response
GET /api/leaderboard?limit=2
{
"version": 8,
"generatedAt": "2026-03-02T14:00:00.000Z",
"startingRank": 1,
"nextCursor": "eyJjb21taXRzIjoxMjM0LCJnaXRodWJJZCI6NDJ9",
"data": [
{
"githubId": 12345,
"login": "octocat",
"name": "The Octocat",
"avatarUrl": "https://avatars.githubusercontent.com/u/12345",
"profileUrl": "https://github.com/octocat",
"githubCreatedAt": "2011-01-25T18:44:36Z",
"allTimeCommits": 15234,
"lastUpdatedAt": "2026-03-01T12:00:00.000Z"
}
]
}Notes
- The leaderboard is sorted by commits descending, then by numeric GitHub user ID ascending.
- Login lookups are case-insensitive and normalize away a leading @ symbol.
- Public GET routes return cache headers suitable for Cloudflare edge caching.
- OAuth and session routes are never cached.
- Profile pages are available at
/u/{login}for any connected user. - Source code is available from the repository link on the homepage.