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_found | 404 | |
invalid_request | 400 | |
rate_limited | 429 | |
internal | 500 | |
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