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 explorer
The API explorer gives every route its own page, generated from the OpenAPI document the server publishes: parameters, request and response schemas, status codes, a code sample in five languages, and a console that sends the request. It has its own sidebar, one category per area, and nothing there is hand-written, so it matches the build it was generated from.
Base URL on any of those pages defaults to https://api.domecommand.ai; set it
to your own deployment before you press Send API request. The browser sends the
request itself, so the backend has to allow the origin the page is served from.
Against a deployment that does not, use the generated curl instead.
The document itself is GET /api/openapi.json. See
The OpenAPI document for generating a client 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 | The OpenAPI document |
| Every route, one page each | all of them | API explorer |