A free, read-only HTTP API for the HGMServers Call of Duty network — live server state, player statistics, credits and the 24/7 demo stream. No key, no account, no rate limit worth worrying about.
/api/v1 is not supported and will break.
Every live game server, with player counts
The whole network in one call: server id (address and port), display name, which Call of Duty title it runs, and how full it is. This is the endpoint behind the site's own server browser.
{
"servers": [
{
"id": "51.222.244.179:5078",
"name": "[HGM] Zombies | Der Riese [US]",
"game": "WaW",
"players": 4,
"maxPlayers": 4
}
]
}Network totals: players online, slots, accounts tracked
Aggregates across every server. `totaltrackedclients` counts every account ever seen, not current players — it is a lifetime figure and grows monotonically.
{
"data": {
"totalconnectedclients": 19,
"totalclientslots": 1434,
"totaltrackedclients": 1624267,
"totalrecentclients_value": 2877,
"maxconcurrentclients_value": 147,
"maxconcurrentclients_alltime": 308
}
}Total kills recorded across the network
A single lifetime counter, summed over every tracked match on every server.
{ "kills": 144054820 }Total time played across the network
The same figure three ways: raw seconds, whole hours, and a human-readable string. Use `seconds` for arithmetic — `display` is formatted for people and its shape may change.
{
"seconds": 4910545433,
"hours": 1364040,
"display": "155y 260d"
}Credits leaderboard, or one player's rank
Paged, highest first. Pass `name` to get that player's row and rank instead of a page. `credits` is a PRE-FORMATTED STRING with dot separators, not a number — parse it if you need to do arithmetic.
| Parameter | Meaning | |
|---|---|---|
page | optional | 1-based page of the leaderboard. Defaults to the first. |
name | optional | A player name. Returns that player rather than a page. |
{
"data": [
{ "rank": 1, "name": "KalaSlave", "credits": "$3.561.465" },
{ "rank": 2, "name": "Rastaboy-115", "credits": "$3.311.654" }
]
}One player's credits and rank in every game
Needs `name` or `clientid`; without one it answers `{"error":"Missing name or clientid"}`. `clientid` is the IW4MAdmin client id and is the reliable key — names are not unique and players change them.
| Parameter | Meaning | |
|---|---|---|
name | optional | The player's name. Give this or clientid. |
clientid | optional | IW4MAdmin client id. Preferred: unique and stable. |
{ "error": "Missing name or clientid" }Casino totals: spent, earned and won
Lifetime aggregates for the whole network, in credits. These are the figures the front page shows.
{
"Spent": 19776399,
"Earned": 41990421,
"Won": 131651853
}Proxy and VPN detections on record
A lifetime count of connections flagged by the proxy check. Not a ban count and not a cheat count — a detection is a signal, not a verdict.
{ "total": 54280 }Members currently online in the Discord
Read from Discord on the site's behalf and cached, so it is safe to poll without a Discord token of your own.
{ "online": 507 }What the 24/7 demo stream is playing
Live state of the automated stream: the demo on screen, what plays next, and whether Twitch and YouTube are broadcasting. `online: false` means the streaming machine could not be reached, and every other field will be absent. PROGRESS IS SECONDS, NOT TIMESTAMPS: add the time elapsed since `readAtEpochMs` to `elapsedS` to interpolate a progress bar. `baseName` is the demo's own filename and can be downloaded from the demos page.
{
"online": true,
"nowPlaying": {
"mapLabel": "Hotel",
"gametype": "Domination",
"baseName": "dom_mp_hotel_4_30_2026_6_30",
"elapsedS": 782,
"plannedS": 780,
"readAtEpochMs": 1788249456325
},
"rotation": ["t6mp", "t6zm", "t5mp"],
"gameId": "t5mp",
"twitch": { "live": true, "viewers": 2 },
"youtube": { "live": true, "broadcastId": "MTmrlNKecc8" }
}