Verify your setup
Run these checks in order. Each one narrows the source of a failure.
1. Health
Section titled “1. Health”curl -fsS http://localhost:8090/healthExpected:
{ "status": "ok", "service": "tomo-streaming-control-plane"}2. Runtime discovery
Section titled “2. Runtime discovery”curl -fsS http://localhost:8090/api/v1/stream-serversThe streamServers array should include:
camera-stream-serverdesktop-stream-server
Discovery is public and does not require the API key.
3. Authenticated session listing
Section titled “3. Authenticated session listing”export TOMO_STREAM_API_KEY="the-same-value-used-in-your-env-file"
curl -fsS http://localhost:8090/api/v1/streams \ -H "x-api-key: $TOMO_STREAM_API_KEY"Expected on a new installation:
{ "sessions": [] }An invalid_api_key response means the shell value does not match the control-plane environment.
4. Create a camera session
Section titled “4. Create a camera session”Confirm the device first:
ls -l /dev/video0Then create the session:
curl -fsS -X POST http://localhost:8090/api/v1/streams \ -H "content-type: application/json" \ -H "x-api-key: $TOMO_STREAM_API_KEY" \ -d '{ "type": "camera-stream-server", "name": "Verification camera", "config": { "videoDevice": "/dev/video0", "width": 1280, "height": 720, "fps": 30, "captureAudio": false } }'Save the returned session.id. A healthy response includes:
{ "session": { "id": "…", "type": "camera-stream-server", "status": "running", "runtime": { "connectedCount": 0, "activity": "empty" }, "connection": { "signalingPath": "/signaling", "room": "…", "accessToken": "…" } }}empty is not an error. It means the runtime is ready but no player has joined.
5. Inspect the runtime
Section titled “5. Inspect the runtime”docker ps \ --filter label=tomo.runtime=stream-server \ --format 'table {{.ID}}\t{{.Image}}\t{{.Status}}\t{{.Names}}'One stream-server container should be present for the live session.
6. Stop the session
Section titled “6. Stop the session”export TOMO_SESSION_ID="replace-with-session-id"
curl -fsS -X DELETE \ "http://localhost:8090/api/v1/streams/$TOMO_SESSION_ID" \ -H "x-api-key: $TOMO_STREAM_API_KEY"Success returns HTTP 204 and removes the runtime container.
Use the TypeScript SDK to create sessions from your backend and join signaling from an authorized browser or native client.