Public API

JSON endpoints for the realm's public-facing data — current online roster, rated PvP leaderboards, character profiles. Open to any origin (CORS *), no auth, modestly cached. Build a Discord bot, a streamer overlay, an external tracker — all welcome.

Endpoints: /api/online · /api/leaderboards/<bracket> · /api/character/<name> · /api/search/chars
GET http://wow-legends.eu/api/online

Snapshot of all characters currently online. The top-level online_count is the realm-wide total (not the page); characters[] is capped by limit (default 100, max 500), highest level first.

Query parameters
limit — integer, 1..500, default 100
// example response { "online_count": 42, "alliance": 25, "horde": 17, "characters": [ { "name": "Tester", "level": 90, "race": 1, "class": 4, "gender": 0, "guild": "Frost" } ] }
GET http://wow-legends.eu/api/leaderboards/<bracket>

Top-N rated PvP ladder for the bracket, current season. Bots excluded. Returns the current season number in the response so you can attach it to your output.

Path
bracket2v2 · 3v3 · rbg
Query parameters
limit — integer, 1..100, default 20
// GET /api/leaderboards/3v3?limit=5 { "bracket": "3v3", "season": 14, "top": [ { "rank": 1, "name": "Tester", "level": 90, "race": 1, "class": 4, "gender": 0, "rating": 2400, "wins": 120 } ] }
GET http://wow-legends.eu/api/character/<name>

Single character profile by name. Returns 404 { "error": "not_found" } for unknown names.

Path
name — character name, 1..12 letters
// GET /api/character/Tester { "name": "Tester", "level": 90, "race": 1, "class": 4, "gender": 0, "online": false, "guild": "Frost", "zone": 5841, "honorable_kills": 1234, "total_playtime_seconds": 98765, "last_logout": 1716000000 }

ID reference

class: 1 Warrior · 2 Paladin · 3 Hunter · 4 Rogue · 5 Priest · 6 DK · 7 Shaman · 8 Mage · 9 Warlock · 10 Monk · 11 Druid

race: 1 Human · 2 Orc · 3 Dwarf · 4 Night Elf · 5 Undead · 6 Tauren · 7 Gnome · 8 Troll · 9 Goblin · 10 Blood Elf · 11 Draenei · 22 Worgen · 25 Pandaren (A) · 26 Pandaren (H)

gender: 0 male · 1 female

Policy

Read-only. No write endpoints. No game-economy mutations (AH, mail, gold) — that's a hard locked decision, never coming.

No auth, no rate limit, no API keys. Same data the public Armory / Leaderboards / Who's Online pages already render. CORS * so any origin can fetch.

Cached. Cache-Control max-age 20–60s on each endpoint. Don't pound it — your bot won't get faster data.

Best-effort, no SLA. Endpoints may return 503 when the characters DB is temporarily unavailable. Always check the HTTP status.

Quick examples

curl

curl -s http://wow-legends.eu/api/online | jq '.online_count'

JavaScript (Discord.js / browser)

const res = await fetch('http://wow-legends.eu/api/leaderboards/3v3?limit=5'); const data = await res.json(); data.top.forEach(p => console.log(`#${p.rank} ${p.name} (${p.rating})`));