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/hardcore · /api/shop · /api/leaderboards/<bracket> · /api/character/<name> · /api/search/chars
GET http://tribeforge.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://tribeforge.eu/api/hardcore

The Hardcore Hall of Heroes — every Hardcore character, split into active (alive) and fallen (permadeath). Same data as the /hardcore page. Fallen entries carry the death_level, death_cause (or null), and death_time (unix epoch). Records are tied to the character — a deleted character drops off the list.

// example response { "active_count": 3, "fallen_count": 4, "active": [ { "name": "Tester", "level": 12, "race": 1, "class": 4, "gender": 0, "online": true } ], "fallen": [ { "name": "Braveheart", "level": 9, "race": 2, "class": 1, "gender": 0, "death_level": 9, "death_cause": "slain by Dire Mottled Boar", "death_time": 1780861263 } ] }
GET http://tribeforge.eu/api/shop

The public web-shop catalog — the same items shown on the /shop storefront, grouped by category in display order. Prices are in Battle Coins. faction: 0 both · 1 Alliance · 2 Horde. icon_url is a ready-to-use icon image. Returns shop_enabled: false with an empty list when the shop is turned off.

// example response { "shop_enabled": true, "currency": "Battle Coins", "category_count": 6, "item_count": 100, "categories": [ { "name": "Mounts", "items": [ { "item_id": 54811, "name": "Celestial Steed", "description": "A radiant celestial steed.", "price": 8000, "quantity": 1, "faction": 0, "icon": "ability_mount_celestialhorse", "icon_url": "https://wow.zamimg.com/images/wow/icons/large/ability_mount_celestialhorse.jpg" } ] } ] }
GET http://tribeforge.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://tribeforge.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 · 11 Druid

race: 1 Human · 2 Orc · 3 Dwarf · 4 Night Elf · 5 Undead · 6 Tauren · 7 Gnome · 8 Troll · 10 Blood Elf · 11 Draenei

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://tribeforge.eu/api/online | jq '.online_count'

JavaScript (Discord.js / browser)

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