Skip to Content

Leaderboard

GET /api/v1/leaderboard

Ranks users by ENS name holdings, club membership, listings, sales, and volume. Optionally filter to users who hold names in specific clubs.

Authentication: None

Cache: 12h

Query Parameters

ParameterTypeDefaultDescription
pagenumber1Page number
limitnumber20Results per page (1–100)
sortBystringnames_ownedSort field (see below)
sortOrderstringdescasc or desc
clubs[]string[]Filter to users holding names in these clubs (repeatable)

Sort Fields

names_owned, names_in_clubs, expired_names, names_listed, names_sold, sales_volume

Sample Request

curl "https://api.grails.app/api/v1/leaderboard?sortBy=names_owned&limit=10"
# Filter to 999 Club holders curl "https://api.grails.app/api/v1/leaderboard?clubs[]=999&sortBy=sales_volume"

Response

// 200 OK { "success": true, "data": { "users": [ { "address": "0x1234...", "names_owned": 150, "names_in_clubs": 42, "expired_names": 5, "names_listed": 12, "names_sold": 25, "sales_volume": "15000000000000000000", "clubs": ["999", "10k", "100k"] } ] }, "pagination": { "page": 1, "limit": 10, "total": 5000, "pages": 500 }, "meta": { "timestamp": "2026-04-08T00:00:00.000Z", "version": "1.0.0", "sort": { "by": "names_owned", "order": "desc" } } }

Response Fields

FieldTypeDescription
addressstringOwner’s Ethereum address
names_ownednumberActive names (not past grace period)
names_in_clubsnumberActive names that are in at least one club
expired_namesnumberNames past grace period
names_listednumberCurrently listed for sale
names_soldnumberTotal names sold (ETH/WETH sales only)
sales_volumestringTotal sales volume in wei (ETH/WETH only)
clubsstring[]Distinct clubs the user holds names in

Error Responses

StatusDescription
500Failed to fetch leaderboard
Last updated on