⚙️ ⚙️
v1 — public read-only

EloShowdown API

Per-player ELO, season stats, ranks, achievements, DNA, head-to-heads, and community leaderboards — exposed as JSON for Discord bots, partner integrations, and community researchers.

Interactive reference → Request a key

What's in v1

Player data

GET /playersList + filter by community / country / season; min-3-char display-name search.
GET /players/{id}Identity: display_name, riftbound_id, primary community, country.
GET /players/{id}/statsPer-season match counts, win rate, ELO range.
GET /players/{id}/rankTier + rank-in-community for a season.
GET /players/{id}/achievementsEarned achievements with rarity, category, icon path.
GET /players/{id}/elo-historyPer-match ELO timeline; supports ?season=all.
GET /players/{id}/formRecent W/L pattern + current streak + longest streak in window.
GET /players/{id}/top-opponentsMost-played opponents with H2H and current ELO.
GET /players/{id}/h2h/{opp_id}Detailed head-to-head: total, W/L/D, ELO swing, last + first meeting.
GET /players/{id}/dnaSix DNA dimensions (dominance, consistency, composure, sweep_power, event_mastery, clutch_closer).

Leaderboards + search

GET /leaderboardStandings by current ELO (filter by community/country).
GET /leaderboard/arenaInternational/arena pool — separate ELO bucket.
GET /leaderboard/peakSorted by season peak ELO (not current).
GET /leaderboard/risingBiggest ELO gain over the last ?days=N window.
GET /searchSlim autocomplete payload (id + name + community).
GET /lookupResolve ?riftbound_id= → full player.

Stats + reference data

GET /stats/globalSite-wide totals + last data update timestamp.
GET /stats/elo-distributionELO histogram across active season players.
GET /stats/recent-matchesGlobal feed; cached 60s — closest thing to live in v1.
GET /communitiesActive communities + per-community detail.
GET /countriesAggregated counts; ISO alpha-2 codes included.
GET /seasonsSeason registry + /seasons/current shortcut.
GET /achievementsDefinitions + holders for each achievement.
GET /metaVersion, current season slug, and your tier's quota.

Full schemas, parameters, and a "Try it out" button live on the interactive reference.

Quick start

Most experimentation needs no key — anonymous traffic is allowed at 60 requests/hour per IP. Add an API key for ~17× more headroom.

# Anonymous (60/h per IP)
curl https://eloshowdown.com/api/v1/meta

# With a key (1000/h per key)
curl -H "Authorization: Bearer esd_yourkey" \
  https://eloshowdown.com/api/v1/players/?community=madrid&limit=10
import requests

BASE = "https://eloshowdown.com/api/v1"
session = requests.Session()
session.headers.update({"Authorization": "Bearer esd_yourkey"})

# What season are we in, and how much quota do I have?
print(session.get(f"{BASE}/meta").json())

# Top 10 players in Madrid this season
r = session.get(f"{BASE}/leaderboard",
                params={"season": "season-2-spiritforge",
                        "community": "madrid", "limit": 10})
for row in r.json():
    print(row["rank"], row["display_name"], row["current_elo"])
const BASE = 'https://eloshowdown.com/api/v1';
const headers = { 'Authorization': 'Bearer esd_yourkey' };

const meta = await fetch(`${BASE}/meta`, { headers }).then(r => r.json());
console.log(meta);

// Resolve a Riftbound platform ID to an EloShowdown player
const lookup = await fetch(
  `${BASE}/lookup?riftbound_id=137979`, { headers },
).then(r => r.json());
console.log(lookup.display_name, lookup.lifetime_total_matches);

Authentication + rate limits

Pass an API key as Authorization: Bearer esd_…. Anonymous access works for kicking the tires; production consumers should ask for a key.

TierAuthRate limitFor
anonymous 60 req/hour per IP Manual curl, hobby experiments
keyed Bearer token 1 000 req/hour per key Discord bots, partner integrations
On 429: a Retry-After header tells you when the bucket resets. Cache responses on your side — most endpoints only change once a day when the cron runs.

Request a key

Keys are issued manually — one email gets you a key with a one-line description of what you're building. Email eloquest.ink@gmail.com or DM on X (Twitter) with:

  • Project name (e.g. "my-discord-bot-prod")
  • What you're building, in one sentence
  • Roughly how many requests/hour you expect to make

Expect a reply within 24 hours. The raw key is sent over the secure channel you reached out on, shown once, and never stored on our end as cleartext.

License + redistribution

Free for any use, attribution requested. Anything from "Powered by eloshowdown.com" in the footer of your tool to a link from your README is plenty.

If possible, don't redistribute the data as your own dataset — the data is public on the website anyway; the API just saves you the scraping.

HTTPS only. http:// requests redirect, but the bearer token would have already been transmitted in the clear by the time the redirect lands — always use https://eloshowdown.com.