Skip to main content

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.

These pages are for engineers

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.

StatusMeaning
200The request succeeded. data holds the result.
400The input failed validation. The error says which rule.
404The named resource is not in this workspace.
409The request conflicts with current state: a verb the asset does not advertise, a plan outside the candidate set, a port already bound.
501The deployment was built without the feature this route needs.
503A 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

AreaRoutesPage
The live picture and its deltasGET /api/picture, GET /api/streamPicture & stream
Pushing detections, reading the event logPOST /api/ingest/obs, GET /api/eventsObservations & events
The asset registry, discovery, commands/api/assets, /api/links, /api/fleetAssets & commands
Threats, autonomy, plan approval, tasking/api/threats, /api/engagement, /api/engagement/taskEngagement
Zones, regions, sensors, doctrine, rules/api/zones, /api/regions, /api/sensors, /api/rulesConfiguration
Scenarios, the simulator, run history/api/scenarios, /api/sim, /api/simulation/runsSimulation
The server describing itselfGET /api/openapi.json, /api/docsThe OpenAPI document