Esports standings: group tables and final placements
Valorant (vlr.gg event id): event name, circuit, dates, prize pool, location, logo, its stages, each round-robin group table (position, team, region, logo, wins, losses, maps won and lost, rounds won and lost, round difference, advanced) and the final placements with prize money once decided. Pass stage to read one stage only. League of Legends (league slug or id): the tournament's stages and sections, each with its table (position, team, code, image, wins, losses) and its matches (state, teams, game wins, outcome), plus the league's tournaments; tournament picks another split or season (default: the latest that has started).
Every response includes credits_used: the credits this call cost.
Parameters
| name | type | description |
|---|---|---|
gamerequired | valorant | lol | valorant or lol. Example: valorant |
idrequired | string | valorant: vlr.gg event id (2004 = Champions Tour 2024: Americas Stage 1, 2097 = Valorant Champions 2024). lol: league slug or id (lck, lec, lpl, lta-north, worlds, msi; see /esports/v1/leagues?game=lol). Example: 2004 |
stage | string | valorant only: one stage slug from the stages list (e.g. regular-season, group-stage, playoffs). Default: every stage. |
tournament | string | lol only: a tournament slug or id from the tournaments list (e.g. lck_split_2_2025). Default: the latest that has started. |
Every endpoint also takes fresh, raw, fields (see lean responses and caching).
Example
curl "https://api.api.sh/esports/v1/standings?game=valorant&id=2004" \
-H "x-api-key: $APISH_KEY" import os, requests
res = requests.get(
"https://api.api.sh/esports/v1/standings",
params={"game": "valorant", "id": "2004"},
headers={"x-api-key": os.environ["APISH_KEY"]},
timeout=120,
)
res.raise_for_status()
data = res.json() const url = new URL("https://api.api.sh/esports/v1/standings");
url.searchParams.set("game", "valorant");
url.searchParams.set("id", "2004");
const res = await fetch(url, { headers: { "x-api-key": process.env.APISH_KEY } });
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const data = await res.json(); Response
A JSON object with the fields described above, plus raw (the source's own data), cached, fetched_at and credits_used. Errors return {"success": false, "error": "…"} with the HTTP status (see errors). A lookup that ran but found nothing (404) costs the price above; refused calls and errors on our side are free (what's charged).