Skip to main content

The live server-sent-events feed: one snapshot, then generation-stamped deltas.

GET 

/api/stream

On connect the stream emits one snapshot event carrying the current track picture (tracks plus the generation it reflects), then pushes events as they happen. Every delta carries the stream generation (stream_gen on domain events, generation on the snapshot and resync); a gap in the sequence tells the client to re-hydrate from GET /api/picture.

Stream-control events, never filtered by kinds:

  • snapshot: the initial track picture, { tracks, generation }.
  • resync: this connection lagged and deltas were dropped, { generation, dropped }; re-hydrate from GET /api/picture.

Picture-slice events, pushed when the underlying state changes, never filtered:

  • live_state: the autonomy ceiling (engagement_mode) or the tracker's self-report (fusion_health), whichever changed.
  • engagement_slice: { threats, plan, candidate_plans, sim }, the engagement picture that replaces wholesale rather than merging.
  • fleet_slice: { assets }, our forces.
  • sensor_slice: { sensors }, one view per placed or observed sensor.
  • integration_slice: { integrations, candidates }, per-protocol status and the unclaimed-source candidate list.

Domain events (subject to the kinds filter), each a wire JSON body named by its frozen SSE event name: track_update, track_removed, obs, alert, coa, engagement, bda, swarm_command, tasking, tasking_status, threat, plan, posture, influence.

A comment ping keeps the connection alive every 15 seconds.

Request

Responses

the SSE stream: a snapshot event, then generation-stamped deltas until the client disconnects