Base https://serverstats.cc/api/v1. <org> is your organisation id, <server> a server id. All routes are GET and need Network.
Machine-readable: the token API is described as OpenAPI 3.1 at /api/v1/openapi.json, generated from the routes themselves. Import it into Postman or Insomnia, or generate a client from it.
| Route | Returns |
|---|---|
/orgs/<org> | The organisation: name, plan, limits, usage, timezone, perms |
/orgs/<org>/servers | Servers with game, status, agent version and agent_update |
/orgs/<org>/servers/<server> | One server |
/orgs/<org>/servers/<server>/overview | Players online now, joins and playtime today, latest gauges |
/orgs/<org>/servers/<server>/metrics | Which metrics and event types have data |
/orgs/<org>/servers/<server>/timeseries | One or more metrics over a range |
/orgs/<org>/servers/<server>/events/top | Most frequent event types |
/orgs/<org>/servers/<server>/custom-events | Your own custom.* events |
/orgs/<org>/servers/<server>/sessions | Sessions (pseudonymous) |
/orgs/<org>/servers/<server>/instances | Roblox servers running now |
/orgs/<org>/overview?range=24h | All servers: totals and one row per server (24h, 7d or 30d) |
/catalog/metrics?game=minecraft | The metric catalogue for a game |
Organisation
curl -H "Authorization: Bearer $TOKEN" https://serverstats.cc/api/v1/orgs/$ORGAbridged; the values in examples are illustrative:
{"org":{"id":"...","name":"Example Network","plan":"network","role":"owner","timezone":"UTC",
"limits":{"servers":null,"history_days":730,"min_bucket":"1m","seats":15},
"usage":{"servers":{"used":3,"active":3,"paused":0,"limit":null}}}}Overview
{"server":{"id":"...","name":"survival","game":"minecraft","last_seen_at":"2026-10-06T09:41:20.000Z","paused":false},
"online_now":42,"today":{"joins":311,"playtime_s":182400,"tz":"UTC"},
"gauges":[{"key":"tick_rate","label":"TPS","unit":"tps","value":19.9,"ts":"2026-10-06T09:41:10.000Z","dims":{"window":"1m"}}]}Metrics with data
GET .../metrics?since=<iso or ms> (default 24 hours, at most 30 days) returns metrics[] with key, type, unit, label, category, source, last_ts, points_24h, series and custom, plus events[] with type, count, last_ts, custom.
Time series
GET .../timeseries?metric=<key> with these parameters:
| Parameter | Meaning |
|---|---|
metric | One metric key, or metrics=a,b,c for 1 to 12 in one call (one bad name does not fail the rest) |
from, to | ISO 8601 or Unix ms; clamped to your plan |
bucket | 10s (Network, up to 6 hours, within the last 7 days), 1m, 5m, 1h or 1d |
agg | avg, min, max, sum, last, count or p95 (exact across buckets, for histograms such as tick_time_ms) |
dims | kind:used,world:w or a JSON object: only series whose dimensions contain these values |
series=false | Omit the series breakdown by dimension combination (top 20). It is on by default for one metric and off for the batch form |
curl -G -H "Authorization: Bearer $TOKEN" "https://serverstats.cc/api/v1/orgs/$ORG/servers/$SRV/timeseries" \
--data-urlencode metric=tick_time_ms --data-urlencode agg=p95 --data-urlencode bucket=1h{"metric":{"key":"tick_time_ms","type":"histogram","unit":"ms","label":"Tick time"},
"bucket":"1h","agg":"p95","from":"2026-10-05T09:00:00.000Z","to":"2026-10-06T09:00:00.000Z",
"points":[{"t":"2026-10-05T09:00:00.000Z","v":31.2}],"points_dims":null,"combined_across_dims":false,
"history_limit":null}Counters (sum, count) are summed across dimensions and combined_across_dims is true. Gauges and histograms return one series: the one matching dims, else a default (for example tick_rate uses window=1m), else the busiest. The batch form returns {bucket, from, to, history_limit, series: {a: ..., b: ...}}. On Free the 1-minute bucket is answered as 5 minutes, so read bucket from the response.
Top events and sessions
events/top?from&to returns {from, to, history_limit, events: [{type, count}]}. sessions?limit=100&open=true&from&to (limit up to 500) returns sessions[] with sid, pid, join, leave, duration_s, source_host, platform and country, and needs permission to read players.