webstation-broker
REST API

Status and health

GET /api/session/status for a session summary and GET /api/health for a bare liveness check.

Status

curl -k https://localhost:3001/streaming/api/session/status

No authentication. With no session it answers {"active": false}. With one:

FieldMeaning
activeWhether a session is up.
session_id, emulator, rom, rom_fileWhat was activated and the file the broker resolved to boot.
multiplayerThe flag fixed at activate.
emulator_aliveWhether the emulator process is still running.
boot_failedSet by an emulator that can tell its process is alive but never reached a running game, the boot-error-dialog case. Passive: the broker surfaces it and takes no action of its own.
supports_statesWhether the state routes will work for this emulator, so the parent needs no per-emulator table.
state_slotThe one slot this emulator works in; every save and load echoes it.
started_atUnix time the session was created.
userThe controller as given to activate.
viewersEveryone who joined: username, permission, and their input assignment.

RomM polls this to know whether a session it launched is still up, to decide whether to offer save and load, and to surface a boot failure to the player instead of leaving them staring at a frozen frame.

Health

curl -k https://localhost:3001/streaming/api/health

Answers {"status": "ok"} as soon as the broker is serving. The container's svc-broker waits for selkies before starting the broker at all, so a healthy broker implies a reachable stream control plane.

Room context

curl -k "https://localhost:3001/streaming/api/session/context?token=<personal token>"

What the room UI bootstraps from: who the token belongs to, what it may do, the session's rom and emulator, and the current roster. Answers 409 with no session and 403 for a token that is not part of it. It is documented here because it is useful when debugging a room that shows "Session Ended", but it is not part of the parent-facing API.

On this page