MX Arcade

Public status API for game server heartbeat + admin server list polling.

API Docs

This service receives server heartbeat snapshots and returns a live list of active servers for the admin portal.


Endpoints

  • POST /v1/servers/heartbeat
  • GET /v1/admin/servers

POST /v1/servers/heartbeat

Upserts server state by serverId. Latest heartbeat fully replaces the previous server snapshot.

  • Heartbeat window: 15 seconds
  • Only human slots count as players
  • Rate-limited per serverId
curl -X POST http://localhost:3000/v1/servers/heartbeat \
  -H "Content-Type: application/json" \
  -d '{
    "serverId": "us-east-1-03",
    "sessionId": "qm-2026-02-17-a1",
    "matchId": "m-0042",
    "region": "us-east-1",
    "hostPort": 47777,
    "currentTrackScene": "Track - Pittsboro SX",
    "maxPlayers": 30,
    "slots": [],
    "serverTimeMs": 1771286400000
  }'

Return type (TypeScript)

type ServerHeartbeatResponse = {
  ok: true;
  receivedAtMs: number;
  activeUntilMs: number;
};

Example response

{
  "ok": true,
  "receivedAtMs": 1771286400450,
  "activeUntilMs": 1771286415450
}

Test route

Response is also logged to browser console.

GET /v1/admin/servers

Returns only active servers, sorted by region then serverId.

curl http://localhost:3000/v1/admin/servers

Return type (TypeScript)

type HumanPlayer = {
  slotIndex: number;
  ownerClientId: number;
  riderName: string;
  riderNumber: number;
};

type ActiveServer = {
  serverId: string;
  sessionId: string;
  matchId: string;
  region: string;
  hostPort: number;
  currentTrackScene: string;
  playerCount: number;
  maxPlayers: number;
  players: HumanPlayer[];
  lastHeartbeatAtMs: number;
  activeUntilMs: number;
};

type AdminServersResponse = {
  generatedAtMs: number;
  activeWindowSec: number;
  servers: ActiveServer[];
};

Example response

{
  "generatedAtMs": 1771286402000,
  "activeWindowSec": 15,
  "servers": [
    {
      "serverId": "us-east-1-03",
      "sessionId": "qm-2026-02-17-a1",
      "matchId": "m-0042",
      "region": "us-east-1",
      "hostPort": 47777,
      "currentTrackScene": "Track - Pittsboro SX",
      "playerCount": 2,
      "maxPlayers": 30,
      "players": [
        {
          "slotIndex": 0,
          "ownerClientId": 0,
          "riderName": "Jim",
          "riderNumber": 27
        },
        {
          "slotIndex": 4,
          "ownerClientId": 12,
          "riderName": "Ava",
          "riderNumber": 14
        }
      ],
      "lastHeartbeatAtMs": 1771286400450,
      "activeUntilMs": 1771286415450
    }
  ]
}

Test route

Response is also logged to browser console.