API v1

Endpoint

GET /api/v1/servers/<ip>:<port>

Response

{
  "data": {
    "id": 1234,
    "name": "Example SCUM Server [PvE] Loot x2",
    "address": { "ip": "203.0.113.42", "port": 7779 },
    "status": "online",
    "players": { "current": 24, "max": 64 },
    "avg_players_72h": 18.4,
    "ranks": {
      "dach":  { "rank": 42,  "of": 2264 },
      "world": { "rank": 511, "of": 6421 }
    },
    "segment": "dach",
    "mode": "pve",
    "location": { "country": "DE", "region": "Europe" },
    "version": "1.3.2.1.135487",
    "build": 135487,
    "ingame_time": "07:41",
    "tps": 39.4,
    "uptime": { "7d": 0.9942, "30d": 0.9815 },
    "first_seen": "2026-02-14T09:03:12Z",
    "last_seen":  "2026-07-24T06:15:04Z"
  },
  "meta": {
    "collected_at":   "2026-07-24T06:15:04Z",
    "next_update_at": "2026-07-24T06:20:04Z",
    "api_version": "1.0"
  }
}

Fields

Field Meaning
id
name
address
status
players
avg_players_72h
ranks
segment
mode
location
version
build
ingame_time
tps
uptime
first_seen, last_seen

Conventions

Caching

curl -s -H 'If-None-Match: "2fae922aab1168d12cee"' \
     /api/v1/servers/203.0.113.42:7779
# HTTP/1.1 304 Not Modified

Rate limit

RateLimit-Limit: 120
RateLimit-Remaining: 118
RateLimit-Reset: 33

HTTP/1.1 429 Too Many Requests
Retry-After: 46

Errors

{ "error": { "code": "not_found", "message": "Kein Server unter 203.0.113.9:7777 bekannt." } }
Code HTTP When
not_found404
invalid_request400
rate_limited429
internal500

Examples

# curl
curl -s /api/v1/servers/203.0.113.42:7779
# Python
import json, urllib.request

url = "/api/v1/servers/203.0.113.42:7779"
with urllib.request.urlopen(url) as r:
    doc = json.load(r)

s = doc["data"]
print(s["name"], f'{s["players"]["current"]}/{s["players"]["max"]}')
if s["ranks"]["dach"]:
    print("Rank", s["ranks"]["dach"]["rank"], "of", s["ranks"]["dach"]["of"])
// JavaScript
const r = await fetch("/api/v1/servers/203.0.113.42:7779");
if (r.status === 404) return;
const { data, meta } = await r.json();
console.log(`${data.name}: ${data.players.current}/${data.players.max}`);
console.log(`Rank ${data.ranks.dach?.rank ?? "-"} / ${data.ranks.dach?.of ?? "-"}`);

Stability

What the API does not do