API reference
Everything the console does, it does through this API. The same surface is yours: hydrate the picture, hold the stream, register assets, and command them through what each one advertises.
The rest of these docs describe the product. This section documents the HTTP surface itself: routes, payloads, and the rules a well-behaved client follows.
Base URL
All routes in this section are served under /api on your DomeCommand backend
(port 8077 by default):
https://<your-backend-host>/api
The /api surface runs open in this build: no token, no tenant header. Deploy it on a
network you trust. The workspace-scoped /v1 surface with bearer and API-key
authentication is documented on the Signals API page.
The response envelope
Every JSON response uses one envelope. Success carries data:
{ "ok": true, "data": { "id": "…" } }
Failure carries error, a sentence that names what failed and why:
{ "ok": false, "error": "intercept is not advertised by asset mav-udp0-3" }
Three routes step outside the envelope, each for a format reason:
GET /api/stream is text/event-stream, and GET /api/doctrine/export and
GET /api/manifest.yaml are application/yaml documents.
| Status | Meaning |
|---|---|
200 | The request succeeded. data holds the result. |
400 | The input failed validation. The error says which rule. |
404 | The named resource is not in this workspace. |
409 | The request conflicts with current state: a verb the asset does not advertise, a plan outside the candidate set, a port already bound. |
501 | The deployment was built without the feature this route needs. |
503 | A required backing service is not configured, such as the secret store's encryption key. |
The one rule that shapes a client
Hydrate once, then hold the stream. GET /api/picture returns the whole current
state in one response and exists for exactly that moment; GET /api/stream then
delivers every change as a server-sent event. A client that polls is a client that is
always either stale or wasteful, and the console itself makes zero requests at rest.
The full contract is on Picture & stream.
The machine-readable contract
The server describes itself. GET /api/openapi.json returns the OpenAPI 3 document
for every route, generated from the handlers, and /api/docs serves an interactive
browser over it. See The OpenAPI document for generating clients
from it.
What is where
| Area | Routes | Page |
|---|---|---|
| The live picture and its deltas | GET /api/picture, GET /api/stream | Picture & stream |
| Pushing detections, reading the event log | POST /api/ingest/obs, GET /api/events | Observations & events |
| The asset registry, discovery, commands | /api/assets, /api/links, /api/fleet | Assets & commands |
| Threats, autonomy, plan approval, tasking | /api/threats, /api/engagement, /api/engagement/task | Engagement |
| Zones, regions, sensors, doctrine, rules | /api/zones, /api/regions, /api/sensors, /api/rules | Configuration |
| Scenarios, the simulator, run history | /api/scenarios, /api/sim, /api/simulation/runs | Simulation |
| The server describing itself | GET /api/openapi.json, /api/docs | The OpenAPI document |