Wardog Servers API
Data, na kterých tento web stojí, jsou k dispozici jako bezplatné JSON API jen pro čtení: všechny servery WARDOGS, které ukazuje prohlížeč ve hře, aktualizované zhruba jednou za minutu, a k tomu historie hráčů pro grafy a historie jednotlivých serverů podle kódu pro připojení.
Přehled
Základní URL je https://api.wardogservers.com. Každá odpověď je v JSON a čtení nevyžaduje API klíč.
Kompletní kontrakt je zveřejněný jako dokument OpenAPI 3.1 na https://api.wardogservers.com/openapi.json ↗. Rozhodující je tento dokument; tahle stránka je jeho čitelné shrnutí.
- Sběrač dat se zhruba jednou za minutu dotazuje prohlížeče serverů ve hře ve všech regionech. Aktuální interval uvádí každá odpověď v poli meta.refreshSeconds.
- Požadavky z prohlížeče se přijímají jen z wardogservers.com. Volej API ze svého serveru, bota nebo skriptu, ne z webové stránky na jiné doméně.
- Neznámé, duplicitní nebo chybně zapsané parametry dotazu se odmítnou s kódem 400, místo aby se ignorovaly, takže překlep skončí hlasitou chybou a nevrátí potichu všechno.
Rychlý start
Tři požadavky pokryjí většinu použití: aktuální souhrny, nejvytíženější servery podle filtru a jeden server podle ID instance.
# Aktuální souhrny
curl https://api.wardogservers.com/v1/stats
# Komunitní servery v západní Evropě s volnými sloty, nejvytíženější první
curl "https://api.wardogservers.com/v1/servers?region=eu-west&type=community&hideFull=true&limit=10"
# Jeden server podle ID instance
curl https://api.wardogservers.com/v1/servers/$ID Zkrácená odpověď z /v1/stats vypadá takto:
{
"data": {
"serverCount": 3544,
"playerCount": 252109,
"officialServerCount": 2765,
"communityServerCount": 779
},
"meta": {
"fetchedAt": "2026-09-13T12:54:57.302Z",
"snapshotId": "95635cb938811a34…",
"refreshSeconds": 60,
"stale": false,
"requestedRegions": ["asia-east", "asia-southeast", "…"],
"observedRegions": ["asia-east", "asia-west", "…"]
}
} Endpointy
Každý endpoint pro čtení přijímá GET a HEAD, respektuje If-None-Match a používá obálku odpovědi popsanou níže.
| Endpoint | Vrací |
|---|---|
GET /v1/servers | Seznam serverů s filtry, řazením a stránkováním. |
GET /v1/servers/{id} | Jeden server s doplňujícími poli: surové atributy, build, limity úrovní a peněz. |
GET /v1/snapshot | Všechny servery v aktuálním snapshotu, seřazené podle ID instance, bez filtrů a stránkování. Pro klienty, kteří drží celý seznam a filtrují lokálně. |
GET /v1/regions | Počty serverů a hráčů v jednotlivých regionech a informace, jestli byl každý region při posledním dotazu vyžádán a zaznamenán. |
GET /v1/stats | Souhrny: servery a hráči online, rozdělení na oficiální a komunitní. |
GET /v1/history/players | Časové řady hráčů a serverů pro grafy. |
GET /v1/history/heatmap | Průměr metriky podle dne v týdnu a hodiny v UTC za posledních 28 dní. |
GET /v1/history/peaks | Historická a denní maxima hráčů, celkově i podle typu serveru. |
GET /v1/history/servers | Servery, které sběrač zaznamenal, podle kódu pro připojení, naposledy viděné první. Najde i server, který je právě offline. |
GET /v1/history/servers/ranking | Servery seřazené podle doby online krát počet hráčů: průměrný počet hráčů za poslední den, týden nebo měsíc, přičemž čas offline se počítá jako nula. |
GET /v1/history/servers/{serverId} | Hráči, maximum, kapacita, podíl doby online a mapa za každý interval jednoho serveru, podle kódu pro připojení. |
GET /v1/history/servers/{serverId}/events | Log změn jednoho serveru, nejnovější první: online, offline, restart a změny buildu, mapy, modifikátorů a limitů. |
GET /readyz | 200, dokud je k dispozici čerstvý snapshot, 503, když chybí nebo je zastaralý. |
GET /openapi.json | Dokument OpenAPI 3.1. |
Filtrování seznamu serverů
Všechny parametry /v1/servers jsou nepovinné. Hodnoty rozlišují velká a malá písmena, kromě q.
| Parametr | Hodnoty | Význam |
|---|---|---|
q | text, až 200 znaků | Vyhledávání bez ohledu na velikost písmen v ID instance, kódu pro připojení, názvu, regionu, čísle serveru, mapě a režimu. |
region | eu-west,eu-central | Jedno nebo víc ID regionů oddělených čárkou. Aktuální seznam vrací /v1/regions. |
type | all · official · community, výchozí all | Oficiální servery, komunitní servery, nebo obojí. |
hideEmpty | true · false | Vynechá servery s nulou hráčů. |
hideFull | true · false | Vynechá plné servery, včetně 0/0. |
passwordProtected | true · false | Jen zamčené, nebo jen otevřené servery. Pro obojí parametr vynech. |
sort | -players · players · name · region | -players znamená nejvytíženější první a je výchozí. |
limit | 1–500, výchozí 100 | Velikost stránky. |
offset | 0–100000, výchozí 0 | Posun od nuly ve vyfiltrovaném a seřazeném výsledku. |
Obálka odpovědi
Každá úspěšná odpověď obsahuje data a meta. Endpoint se seznamem přidává pagination; endpointy historie přidávají objekt history, který popisuje okno, skupinu, metriku a velikost intervalu.
Než čísla zobrazíš jako aktuální, zkontroluj meta.stale. Má hodnotu true, když se sběr dat zastavil nebo je snapshot starší než refreshSeconds plus 60 sekund. Zastaralé odpovědi se navíc posílají s Cache-Control: no-store a X-Data-Stale: true.
| Pole | Význam |
|---|---|
meta.fetchedAt | Kdy sběrač tento snapshot stáhl. |
meta.snapshotId | Identifikátor snapshotu; mění se pokaždé, když dorazí nová data. Posílá se i jako hlavička X-Snapshot-Id. |
meta.refreshSeconds | Jak často se sběrač dotazuje. Nedotazuj se častěji. |
meta.stale | True, když se data nemají zobrazovat jako živá. |
meta.requestedRegions | Regiony, na které se sběrač hry dotázal. |
meta.observedRegions | Regiony, které v tomto snapshotu vrátily aspoň jeden server. |
Objekt serveru
Toto je souhrnný tvar, který vrací /v1/servers a /v1/snapshot. /v1/servers/{id} vrací stejná pole a navíc attributes, build, level a cash.
{
"id": "001ab36e-9985-4a9c-8dff-9dc137826dfe",
"serverId": "756872",
"serverIdUpdatedAt": "2026-09-13T11:14:32.995Z",
"name": "Official #4",
"nativeName": "f14859cce268",
"type": "official",
"region": "eu-south",
"players": 100,
"maxPlayers": 100,
"reservedPlayers": 0,
"passwordProtected": false,
"serverNumber": 4,
"map": { "variant": "Bakurani", "base": "Europe" },
"mode": { "experience": "Bakurani_KOTH_01", "gameMode": "GM_Session_C", "modifiers": [] },
"rulesets": ["standard"]
} | Pole | Význam |
|---|---|
id | ID živé herní instance. Při restartu serveru se mění, takže ho nepoužívej jako trvalý klíč. |
serverId | Kód pro připojení ze hry jako řetězec: u oficiálních serverů desítkové číslo se zachovanými úvodními nulami, u komunitních serverů od herního patche 0.11 UUID. Null, dokud ještě nebyl zjištěn. |
serverIdUpdatedAt | Kdy byl kód pro připojení naposledy zjišťován. Null, kdykoli je serverId null. |
name | U oficiálních serverů Official #N, jinak dekódovaný název serveru. Může být prázdný. |
nativeName | Surový název serveru tak, jak ho hlásí hra. |
type | official nebo community. |
region | ID regionu, například eu-west. |
players · maxPlayers · reservedPlayers | Aktuální, maximální a rezervovaný počet hráčů. |
passwordProtected | Jestli je k připojení potřeba heslo. |
serverNumber | Číslo oficiálního serveru; u komunitních serverů 0. |
map | Varianta mapy a základní mapa. Kterákoli z nich může být null. |
mode | Názvy experience a herního režimu a k tomu surové modifikátory za znakem + z řetězce experience, v pořadí ze zdroje. |
rulesets | standard, hardcore nebo infantry-only, odvozené z modifikátorů. Přesně ["standard"], když se žádné nerozpozná. |
Historie
/v1/history/players vrací sloupcovou řadu: jedno pole časů začátku intervalů v unixových sekundách a jedno pole hodnot pro každý klíč skupiny, zarovnané podle indexu. Hodnota null je interval, ve kterém se nic nezaznamenalo, obvykle proto, že byl sběrač pozastavený. Zobraz mezeru, neinterpoluj.
Intervaly se zaznamenávají jednou za snapshot od chvíle, kdy se historie zapnula, bez zpětného doplnění. Minutové intervaly se uchovávají 7 dní, pětiminutové 90 dní a hodinové natrvalo.
| Parametr | Hodnoty | Význam |
|---|---|---|
window | 24h · 7d · 30d · 90d · 1y, výchozí 24h | Okno končící teď. Krok intervalu je 60 s pro 24h, 300 s pro 7d, 3600 s pro 30d a 90d a 21600 s pro 1y. |
group | total · type · region · regionType · map · ruleset, výchozí total | Jedna řada na klíč: total; official a community; region; region|type; varianta mapy; nebo hlavní ruleset. |
metric | players · servers · full · empty · capacity · free, výchozí players | players, servers, full (plná kapacita), empty, capacity (součet maxPlayers) nebo free (capacity minus players). Každá hodnota je průměr přes snapshoty v intervalu. |
GET /v1/history/players?window=24h&group=type
{
"data": {
"t": [1789217880, 1789217940, 1789218000, "…"],
"series": {
"official": [248112, 248390, null, "…"],
"community": [3902, 3911, null, "…"]
},
"peak": { "official": ["…"], "community": ["…"] }
},
"history": {
"window": "24h", "group": "type", "metric": "players",
"step": 60, "from": 1789217880, "to": 1789304280, "since": 1789257600
},
"meta": { "…": "…" }
} Pro metric=players nese odpověď i objekt peak s nejvyšším jednotlivým snapshotem v každém intervalu. Endpoint heatmapy průměruje metriku podle dne v týdnu a hodiny v UTC za posledních 28 celých dní, volitelně pro jeden region. Peaks vrací nejvyšší počet hráčů z jednoho snapshotu celkově i podle typu, za celou dobu i pro každý z posledních 30 dní v UTC.
Historie jednotlivých serverů
Historie jednotlivých serverů má jako klíč kód pro připojení, který na rozdíl od ID instance vydrží restarty i změny map. /v1/history/servers/{serverId} vrací zarovnaná pole: průměrný počet hráčů a nejvyšší jednotlivé měření, dokud byl server v seznamu, jeho limit hráčů, podíl měření v intervalu, ve kterých byl v seznamu (jeho doba online, 0 až 1), a mapu na konci intervalu, takže po sobě jdoucí hodnoty mapy dávají rotaci. Nahrávání začne, když se kód poprvé objeví, bez zpětného doplnění, a do té doby route odpovídá 404.
| Parametr | Hodnoty | Význam |
|---|---|---|
window | 24h · 7d · 30d · 90d, výchozí 24h | 24h a 7d používají pětiminutové intervaly uchovávané 7 dní; 30d a 90d používají hodinové intervaly uchovávané 90 dní. |
GET /v1/history/servers/756872?window=24h
{
"data": {
"server": {
"serverId": "756872",
"name": "Official #4",
"type": "official",
"region": "eu-south",
"instanceId": "001ab36e-9985-4a9c-8dff-9dc137826dfe",
"firstSeen": "2026-09-13T00:00:39.000Z",
"lastSeen": "2026-09-14T11:53:22.000Z",
"samples": 2132,
"live": true
},
"t": [1789300800, 1789301100, 1789301400, "…"],
"players": [100, 98, null, "…"],
"peak": [100, 100, null, "…"],
"capacity": [100, 100, null, "…"],
"online": [1, 0.8, null, "…"],
"map": ["Bakurani", "Bakurani", null, "…"]
},
"history": {
"window": "24h", "step": 300,
"from": 1789300800, "to": 1789387200, "since": 1789257600
},
"meta": { "…": "…" }
} /v1/history/servers/{serverId}/events odvozuje log změn z po sobě jdoucích měření, nejnovější první: tracking_started, online, offline, restart (instance se změnila bez mezery), build (changelist), map (varianta, svět nebo obloha), modifiers a limits (rozsahy úrovní a peněz, heslo a limit hráčů). Každá událost nese at, kind a objekty before a after, které obsahují jen pole definující daný druh, a null tam, kde neexistuje dřívější nebo pozdější stav. limit přijímá 1 až 500 a výchozí hodnota je 100.
GET /v1/history/servers/756872/events?limit=3
{
"data": {
"server": { "serverId": "756872", "name": "Official #4", "…": "…" },
"events": [
{
"at": "2026-09-14T12:40:30.000Z",
"kind": "map",
"before": { "map": "Madrid", "world": "Europe", "sky": "DayEarlyFog" },
"after": { "map": "Detroit", "world": "Europe", "sky": "DayLateGray" }
},
{
"at": "2026-09-14T09:12:04.000Z",
"kind": "restart",
"before": { "instanceId": "001ab36e-9985-4a9c-8dff-9dc137826dfe" },
"after": { "instanceId": "7c1e0b52-3d9a-4e1f-9b6e-2f4c8a9d0e11" }
},
{
"at": "2026-09-13T00:00:39.000Z",
"kind": "tracking_started",
"before": null,
"after": { "instanceId": "…", "changelist": "501228", "map": "Bakurani", "…": "…" }
}
]
},
"history": { "limit": 3, "since": 1789257600 },
"meta": { "…": "…" }
} /v1/history/servers vypisuje zaznamenané servery, naposledy viděné první. q odpovídá přesně kódu pro připojení, nebo bez ohledu na velikost písmen poslednímu známému názvu, takže najde i server, který je právě offline; živé servery už mají své serverId v /v1/servers.
| Parametr | Hodnoty | Význam |
|---|---|---|
q | text, až 200 znaků | Kód pro připojení (přesná shoda), nebo poslední známý název (bez ohledu na velikost písmen). |
type | all · official · community, výchozí all | Oficiální servery, komunitní servery, nebo obojí. |
limit | 1–100, výchozí 20 | Kolik serverů vrátit. |
Cachování a dotazování
Každá odpověď nese ETag. Pošli ho zpátky jako If-None-Match a nezměněný snapshot odpoví 304 bez těla, což nestojí skoro nic na žádné straně. Zamýšlený postup je dotaz jednou za minutu s If-None-Match.
const res = await fetch('https://api.wardogservers.com/v1/snapshot', {
headers: lastEtag ? { 'if-none-match': lastEtag } : {}
});
if (res.status === 304) return; // Od posledního dotazu se nic nezměnilo
lastEtag = res.headers.get('etag');
const { data, meta } = await res.json();
if (meta.stale) console.warn('stale'); // Sběrač je pozadu; dál zobrazuj poslední známá data Čerstvé odpovědi se na edge cachují 15 sekund, takže nápory stejných požadavků jsou levné. Pevný limit požadavků dnes neexistuje, ale dotazování častější než meta.refreshSeconds nemůže vrátit novější data a v budoucnu může být omezeno. Pokud potřebuješ celý seznam, stáhni jednou /v1/snapshot a filtruj lokálně, místo stránkování přes /v1/servers.
Chyby
Chyby jsou v JSON se stálým kódem a zprávou čitelnou pro lidi. Zpráva se může změnit; rozhoduj podle kódu.
{
"error": {
"code": "bad_request",
"message": "An unsupported query parameter was supplied."
}
} | Stav | Kdy |
|---|---|
400 | Neznámý, duplicitní nebo neplatný parametr dotazu, nebo ID, které není UUID. |
401 | Byl vyžadován API klíč a chyběl nebo byl špatný. Při zapnutém veřejném přístupu se pro čtení nevrací. |
404 | V aktuálním snapshotu není server s tímto ID, pro tento kód pro připojení neexistuje historie, nebo jde o neznámou route. |
405 | Jiná metoda než GET nebo HEAD. |
503 | Žádný použitelný snapshot. Zkus to znovu za minutu, nebo až /readyz vrátí 200. |
Podmínky použití
API je zdarma pro komunitní projekty: boty na Discord, overlaye, dashboardy, výzkum. Kde data veřejně zobrazuješ, uveď Wardog Servers s odkazem a nevydávej je za oficiální data studia BULKHEAD nebo Team17.
API pro čtení je verzované pod /v1. V rámci verze můžou přibýt nová pole, takže počítej s klíči, které neznáš. Nekompatibilní změny vyjdou jako nová verze a nejdřív je oznámíme na této stránce.
Otázky, projekt, kterým se chceš pochlubit, nebo pole, které potřebuješ: Discord @xcausxn.