SUPPLIER in its roles.
Operator vs. supplier workspace
These are two different objects:
For the smallest case (one phone, one human), workspace and operator
are 1:1. For fleets, one workspace operates many.
In early access, operator-as-asset registration is partially built
— the FK exists in the schema, the management endpoints don’t yet.
A session today is accepted at the workspace level; per-operator
assignment is the next refinement.
Becoming a supplier
Create a workspace withSUPPLIER in roles — public endpoint, the
signature in the body is the auth:
lx_session cookie, then mint an API key with sessions:operate:
accept / start
/ end call.
Stream protocol
Operators publish over WHIP (WebRTC HTTP Ingest Protocol). Any compliant encoder works — Larix Broadcaster, OBS WebRTC, GStreamer with the WebRTC plugin, a drone’s onboard payload software, the browser’sgetUserMedia (see Publish from a browser below).
whipUrl is returned by POST /sessions/:id/start and is
re-fetchable mid-session via GET /sessions/:id/producer-token
(operator only). URLs are stable for the lifetime of the underlying
Cloudflare Stream live_input; a publisher reconnecting after a
crash just re-POSTs the SDP offer to the same URL — no new
session lifecycle call needed.
Publish from a browser
For demos, smoke tests, or operators on phones, the console hosts an in-page browser publisher:/producer-token, opens
getUserMedia (rear-cam preferred on mobile) + microphone, and
negotiates a WebRTC publish. Start/stop is two clicks; the camera
picker shows up when multiple cameras are present. The same
lx-session cookie that gates the dashboard gates this page — no
separate auth.
Reclaim a stuck workspace
If an operator device crashes (phone dies mid-stream, network flips, browser tab closes) the session can be left inASSIGNED
with the operator workspace pinned to BUSY and the Cloudflare
live_input still minted. The pre-LIVE expiry cron sweeps these
up eventually (at createdAt + maxDurationSeconds), but for a
long session that’s too slow.
The operator can reclaim everything immediately:
ASSIGNED session this workspace owns, releases
the workspace to ONLINE, tears down each live_input. LIVE
sessions are NOT affected — those still go through /end so the
meter can run. Available in the console as the “Cancel N active
assignments” button on the Operate side of /sessions. Scope:
sessions:operate.
Telemetry contract
Operators publish position telemetry alongside the video. Spec’d in Trust model / Tier 1:end —
seconds without a fresh in-geofence sample become failedSeconds
(non-billable, no earning, no fee).