QuakeHub API

Free, versioned JSON for live Quake server & player data — across every classic Quake game, with honest player counts (bots excluded).

Base URL

https://quakehub.net/api/v1

Notes

Free & open. Read-only, CORS-enabled (*), no key needed. A link back to quakehub.net is appreciated.
Honest counts. players is REAL humans only — bots are excluded and reported separately as bots. This is the whole point of QuakeHub.
Rate limit. 120 requests/min per IP (X-RateLimit-* headers; 429 when exceeded). Responses are cached ~15s, so poll gently.
Freshness. Data refreshes roughly every 90s. ping_ms is measured from our US-East host, not from you.

Endpoints

GET/api/v1/games

Every game with its live real-player count and populated-server count.

try it ↗
GET/api/v1/servers/{game}

All servers for a game. Add ?populated=true to return only servers with real players.

game is one of: ql, q3, q2, q1, nq, q4, etqw, bloodrun, qcde, cpma

try it ↗
GET/api/v1/server/{game}/{ip}/{port}

One server with its current roster (from the last poll) and live match state.

try it ↗
GET/api/v1/players?q={name}

Find players by (partial) name across every game. Minimum 2 characters.

try it ↗
GET/api/v1/live

Every populated server across all games, busiest (most real players) first.

try it ↗

Example — GET /api/v1/games

{
  "games": [
    { "id": "ql", "name": "Quake Live", "players": 203,
      "servers_populated": 44, "servers_total": 861, "updated_at": 1784060000000 },
    { "id": "q3", "name": "Quake III Arena", "players": 87,
      "servers_populated": 23, "servers_total": 480, "updated_at": 1784060000000 }
  ]
}
QuakeHub — Every Server. Every Quake. · quakehub.net
Data is best-effort with no SLA; endpoints under /api/v1 are stable and versioned.