Leaderboards
The leaderboard surface mirrors the game's true model: season → period → sheet (ladder) → content_type → class → entries. The bot discovers all of these from the live game — there is no static catalog to maintain.
Endpoints
GET /v2/leaderboards/seasons list active and historical seasons
GET /v2/leaderboards/seasons/{season} season metadata (state, begin/end/wipe/reward, periods, sheets)
GET /v2/leaderboards/seasons/{season}/sheets sheets (ladders) in a season
GET /v2/leaderboards/seasons/{season}/sheets/{sheet} sheet metadata
GET /v2/leaderboards/seasons/{season}/sheets/{sheet}/periods periods in a sheet
GET /v2/leaderboards/seasons/{season}/sheets/{sheet}/entries paginated ranked entries
GET /v2/leaderboards/seasons/{season}/sheets/{sheet}/characters/{name}/history rank trajectory for a character
Query parameters
class— filter entries by character class (e.g.Fighter,Rogue)period— period index, integer; defaults to the current periodpage— 1-indexed, default1page_size— default100, max1000
Example
curl 'https://api.darkerdb.com/v2/leaderboards/seasons/EA7_HOF/sheets/TreasureCollector_Solo/entries?class=Fighter&period=0&page_size=5'
{
"entries": [
{
"season_id": "EA7_HOF",
"sheet_id": "TreasureCollector_Solo",
"period_index": 0,
"character_class": "Fighter",
"character": "ExamplePlayer",
"rank": 1,
"previous_rank": 2,
"score": "1450000",
"karma": 42,
"rank_tier": "Diamond",
"rank_tier_level": "I"
}
],
"page": 1,
"page_size": 5,
"total": 127
}
Legacy ID shim
Pre-v2 leaderboards used flat IDs like EA7_HOF_SHR_B. Those endpoints still respond:
GET /v2/leaderboards legacy summary, returns pointer + season list
GET /v2/leaderboards/{legacy_id} legacy lookup, best-effort resolved to (season, sheet)
The legacy shim translates the prefix (e.g. EA7_HOF) to the new season key and returns the best-matching sheet's entries. It exists only to keep existing frontends rendering during their own migration — new integrations should target the structured /seasons/... paths above.