Stellar ControlMission control · by Stellar Systems v0.1.0

API Reference

Monitoring

Topology, instances, catalogues, procedures and output connectors, as the web console shows them.

GET/v1/topology

Get topology#

Topology

The targets of the current configuration, their links as declared and as bound, readiness with its reasons, configuration revision and leases.

Responses

200The topology and its state.application/json
configrequired

string

Current configuration revision.

environmentsrequired

array of string

Environments.

policiesrequired

map of EnvironmentPolicy

Policies of each environment.

EnvironmentPolicy · 2 fields
allow_draftrequired

boolean

Whether draft packages are accepted.

human_orchestration
targetsrequired

array of TargetView

Targets.

TargetView · 8 fields
namerequired

string

Name.

platformrequired

string

Platform, package@version.

environmentsrequired

array of string

Environments where it can be engaged.

linksrequired

array of LinkView

Links.

LinkView · 7 fields
namerequired

string

Name.

defaultrequired

boolean

Whether it is the default link.

driverrequired

string

Driver required: package@versions.

transport

string

Transport required, when the link has one: package@versions.

gatewayrequired

string

Gateway required: an instance, or any(tag: …).

bound

one of BoundView | null

available

boolean

Whether its gateway reports the link available (in pass, station in service).

ready

boolean

Whether it can be engaged; None when the reconciler published nothing yet.

reasonsrequired

array of string

Why it is not ready.

config

string

Configuration revision it runs with.

lease

one of LeaseView | null

503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

Request

curl "http://localhost:8080/v1/topology"

Response

{
  "config": "string",
  "environments": [
    "string"
  ],
  "policies": {
    "key": {
      "allow_draft": true,
      "human_orchestration": {
        "identity": "string",
        "hazardous_confirmation": [
          null
        ],
        "hazardous_requires_plan": true
      }
    }
  },
  "targets": [
    {
      "name": "string",
      "platform": "string",
      "environments": [
        "string"
      ],
      "links": [
        {
          "name": "string",
          "default": true,
          "driver": "string",
          "transport": "string",
          "gateway": "string",
          "bound": null,
          "available": true
        }
      ],
      "ready": true,
      "reasons": [
        "string"
      ],
      "config": "string",
      "lease": {
        "runs": [
          null
        ],
        "shared": true
      }
    }
  ]
}
GET/v1/instances

List instances#

Instances

The drivers, transports, gateways, connectors and components registered with the reconciler, with their health and the links bound to them.

Responses

200Instances.application/json
instancesrequired

array of InstanceView

Instances registered, drivers and gateways first.

InstanceView · 16 fields
kindrequired

string

Kind: driver, gateway, or an MCS component.

instancerequired

string

Instance name.

softwarerequired

string

Software.

versionrequired

string

Version.

registered_atrequired

string · date-time

Registration.

last_seenrequired

string · date-time

Last registration or heartbeat.

aliverequired

boolean

Whether heard within three heartbeat periods.

health

one of Health | null

reason

string

Why degraded.

link_available

boolean

For a gateway: whether its link is available.

catalogue

string

For a driver: catalogue implemented, name@version.

tagsrequired

array of string

For a gateway: tags.

uplink

string

For a gateway: uplink and downlink types and theoretical rates.

downlink

string

Downlink.

frames

string

For a transport: what it frames and produces, csp1 → can.

boundrequired

array of string

Links bound to it: <target>.<link>.

Request

curl "http://localhost:8080/v1/instances"

Response

{
  "instances": [
    {
      "kind": "string",
      "instance": "string",
      "software": "string",
      "version": "string",
      "registered_at": "2026-09-29T08:30:00Z",
      "last_seen": "2026-09-29T08:30:00Z",
      "alive": true,
      "health": "healthy",
      "reason": "string",
      "link_available": true,
      "catalogue": "string",
      "tags": [
        "string"
      ],
      "uplink": "string",
      "downlink": "string",
      "frames": "string",
      "bound": [
        "string"
      ]
    }
  ]
}
GET/v1/instances/{kind}/{instance}

Get instance#

An instance

An instance, what it implements (a driver: catalogue coverage against the current configuration) or offers (a gateway: tags, link types and rates), its own status (the status verb), and the links bound to it with the consumers of their telecommands (delivered, pending, not acknowledged, redelivered).

Path parameters

kindrequired

string

driver, transport, gateway, connector or a component of the MCS.

instancerequired

string

Instance name.

Responses

200The instance.application/json
kindrequired

string

Kind: driver, gateway, or an MCS component.

instancerequired

string

Instance name.

softwarerequired

string

Software.

versionrequired

string

Version.

registered_atrequired

string · date-time

Registration.

last_seenrequired

string · date-time

Last registration or heartbeat.

aliverequired

boolean

Whether heard within three heartbeat periods.

health

one of Health | null

reason

string

Why degraded.

link_available

boolean

For a gateway: whether its link is available.

catalogue

string

For a driver: catalogue implemented, name@version.

tagsrequired

array of string

For a gateway: tags.

uplink

string

For a gateway: uplink and downlink types and theoretical rates.

downlink

string

Downlink.

frames

string

For a transport: what it frames and produces, csp1 → can.

boundrequired

array of string

Links bound to it: <target>.<link>.

heartbeat_period_msrequired

integer · int64

Heartbeat period, in milliseconds.

≥ 0

public_keyrequired

string

Public key of its nkey.

driver

one of DriverDetail | null

gateway

one of GatewayDetail | null

status

one of Status | null

status_error

string

Why the status could not be asked.

bindingsrequired

array of BindingDetail

Links bound to it.

BindingDetail · 10 fields
targetrequired

string

Target.

linkrequired

string

Link.

driverrequired

string

Driver bound.

transport

string

Transport bound, when the link has one.

gatewayrequired

string

Gateway bound.

configrequired

string

Configuration revision of the target.

config_currentrequired

boolean

Whether it is the current configuration.

encoderequired

string

Subject of the telecommands to encode.

uplinkrequired

string

Subject of the frames to uplink.

consumer

one of ConsumerStats | null

404No such instance.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

Request

curl "http://localhost:8080/v1/instances/<kind>/<instance>"

Response

{
  "kind": "string",
  "instance": "string",
  "software": "string",
  "version": "string",
  "registered_at": "2026-09-29T08:30:00Z",
  "last_seen": "2026-09-29T08:30:00Z",
  "alive": true,
  "health": "healthy",
  "reason": "string",
  "link_available": true,
  "catalogue": "string",
  "tags": [
    "string"
  ],
  "uplink": "string",
  "downlink": "string",
  "frames": "string",
  "bound": [
    "string"
  ],
  "heartbeat_period_ms": 0,
  "public_key": "string",
  "driver": {
    "codec": "string",
    "catalogue": "string",
    "catalogue_version": "string",
    "telecommands": [
      "string"
    ],
    "measures": [
      "string"
    ],
    "missing_telecommands": [
      "string"
    ],
    "missing_measures": [
      "string"
    ]
  },
  "gateway": {
    "tags": [
      "string"
    ],
    "uplink": {
      "link_type": null,
      "rate_bps": null
    },
    "downlink": {
      "link_type": null,
      "rate_bps": null
    }
  },
  "status": {
    "bound": true,
    "heartbeat": {
      "health": null,
      "link_available": true,
      "reason": "string",
      "sent_at": "string"
    },
    "instance": "string",
    "kind": "string",
    "software": {
      "name": "string",
      "version": "string"
    },
    "started_at": "string"
  },
  "status_error": "string",
  "bindings": [
    {
      "target": "string",
      "link": "string",
      "driver": "string",
      "transport": "string",
      "gateway": "string",
      "config": "string",
      "config_current": true,
      "encode": "string",
      "uplink": "string",
      "consumer": {
        "name": null,
        "delivered": null,
        "pending": null,
        "ack_pending": null,
        "redelivered": null,
        "last_active": null
      }
    }
  ]
}
GET/v1/instances/gateway/{instance}/throughput

Watch throughput#

Throughput of a gateway (WebSocket)

The throughput reports of a gateway, per target, as it publishes them every metrics_period.

Path parameters

instancerequired

string

Gateway instance.

Responses

101WebSocket: one ThroughputView per message.application/json
downlink_bpsrequired

number · double

Mean downlink throughput over the window, in bits per second.

downlink_bytesrequired

integer · uint64

Bytes received from the target since the gateway started.

≥ 0

uplink_bpsrequired

number · double

Mean uplink throughput over the window, in bits per second.

uplink_bytesrequired

integer · uint64

Bytes sent to the target since the gateway started.

≥ 0

window_msrequired

integer · uint64

Length of the window, in milliseconds.

≥ 0

targetrequired

string

Target.

atrequired

string · date-time

Reception by the API.

404Invalid instance.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

Request

curl "http://localhost:8080/v1/instances/gateway/<instance>/throughput"

Response

{
  "downlink_bps": 0.0,
  "downlink_bytes": 0,
  "uplink_bps": 0.0,
  "uplink_bytes": 0,
  "window_ms": 0,
  "target": "string",
  "at": "2026-09-29T08:30:00Z"
}
GET/v1/targets/{target}/catalogue

Get catalogue#

Catalogue of a target

The components of the platform of the target, their instances, measures (limits included) and telecommands (arguments, changes_state, hazardous), with their descriptions.

Path parameters

targetrequired

string

Target, as named in the topology (sim-1).

Responses

200The catalogue.application/json
platformrequired

string

Platform, package@version.

componentsrequired

array of ComponentView

Components.

ComponentView · 5 fields
namerequired

string

Name.

description

string

Description, from the catalogue.

instancesrequired

array of string

Instances of a multi-instance component.

measuresrequired

array of MeasureView

Measures, derived ones included.

MeasureView · 7 fields
namerequired

string

Name.

description

string

Description, from the catalogue.

typerequired

string

Type.

unit

string

Unit.

soft

array of number · double

Soft limits, [low, high].

hard

array of number · double

Hard limits.

derivedrequired

boolean

Whether derived from other measures.

telecommandsrequired

array of TelecommandView

Telecommands.

TelecommandView · 5 fields
namerequired

string

Name.

description

string

Description, from the catalogue.

argsrequired

array of ArgumentView

Arguments.

ArgumentView · 7 fields
namerequired

string

Name.

description

string

Description, from the catalogue.

typerequired

string

Type.

unit

string

Unit.

valuesrequired

array of string

Values of an enum.

range

array of number · double

Accepted range.

default

string

Value when omitted, as written.

changes_staterequired

boolean

Whether it changes the on-board state.

hazardousrequired

boolean

Whether it needs a confirmation.

404Unknown target.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

Request

curl "http://localhost:8080/v1/targets/<target>/catalogue"

Response

{
  "platform": "string",
  "components": [
    {
      "name": "string",
      "description": "string",
      "instances": [
        "string"
      ],
      "measures": [
        {
          "name": "string",
          "description": "string",
          "type": "string",
          "unit": "string",
          "soft": [
            null
          ],
          "hard": [
            null
          ],
          "derived": true
        }
      ],
      "telecommands": [
        {
          "name": "string",
          "description": "string",
          "args": [
            null
          ],
          "changes_state": true,
          "hazardous": true
        }
      ]
    }
  ]
}
GET/v1/procedures

List procedures#

Procedures

The procedures of every library of the current configuration, with their roles, inputs, environments, maximum duration and whether they send a hazardous telecommand: what a run request needs.

Responses

200Procedures.application/json
proceduresrequired

array of ProcedureView

Procedures of every library.

ProcedureView · 9 fields
namerequired

string

Name.

description

string

Description, from the library.

libraryrequired

string

Library package: the library of a run request.

versionrequired

string

Library version.

rolesrequired

array of RoleView

Roles and their platform.

RoleView · 2 fields
namerequired

string

Name.

platformrequired

string

Platform package.

inputsrequired

array of InputView

Inputs.

InputView · 5 fields
namerequired

string

Name.

kindrequired

string

value, file_id or content.

type

string

Type, or file type for file_id.

unit

string

Unit.

valuesrequired

array of string

Values of an enum.

allowed_inrequired

array of string

Environments where it may run; empty when not restricted.

max_durationrequired

string

Longest duration.

hazardousrequired

boolean

Whether it sends a hazardous telecommand.

503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

Request

curl "http://localhost:8080/v1/procedures"

Response

{
  "procedures": [
    {
      "name": "string",
      "description": "string",
      "library": "string",
      "version": "string",
      "roles": [
        {
          "name": "string",
          "platform": "string"
        }
      ],
      "inputs": [
        {
          "name": "string",
          "kind": "string",
          "type": "string",
          "unit": "string",
          "values": [
            null
          ]
        }
      ],
      "allowed_in": [
        "string"
      ],
      "max_duration": "string",
      "hazardous": true
    }
  ]
}
GET/v1/connectors

List connectors#

Output connectors

The output connectors of the topology, their instance, and the lag of each of their consumers computed now (messages not delivered, not acknowledged, age of the oldest, at risk of being removed by the retention).

Responses

200Connectors.application/json
connectorsrequired

array of ConnectorView

Connectors of the topology.

ConnectorView · 5 fields
namerequired

string

Name.

datarequired

array of string

Kinds of data.

targetsrequired

array of string

Targets.

instance

one of InstanceView | null

lagsrequired

array of ConnectorLag

Lag of each consumer created.

ConnectorLag · 14 fields
activerequired

boolean

Whether a client is pulling the consumer now.

atrequired

string

Computation.

at_riskrequired

boolean

Whether the retention is about to remove messages the connector has not read.

connectorrequired

string

Connector.

consumerrequired

string

Durable consumer.

fill

number · double

Filling of the stream against its max_bytes; None when not bounded by volume.

kindrequired

string

Kind of data.

lag_secondsrequired

number · double

Age of that message, in seconds: 0 when the connector is up to date.

oldest_unread

string

Storage of the oldest message not acknowledged, when there is one.

pendingrequired

integer · uint64

Messages not delivered yet.

≥ 0

reason

string

Why.

retention_seconds

number · double

Maximum age of the stream, in seconds; None when not bounded by age.

streamrequired

string

JetStream stream.

unackedrequired

integer · uint64

Messages delivered and not acknowledged.

≥ 0

503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

Request

curl "http://localhost:8080/v1/connectors"

Response

{
  "connectors": [
    {
      "name": "string",
      "data": [
        "string"
      ],
      "targets": [
        "string"
      ],
      "instance": {
        "kind": "string",
        "instance": "string",
        "software": "string",
        "version": "string",
        "registered_at": "2026-09-29T08:30:00Z",
        "last_seen": "2026-09-29T08:30:00Z",
        "alive": true,
        "health": null,
        "reason": "string",
        "link_available": true,
        "catalogue": "string",
        "tags": [
          null
        ],
        "uplink": "string",
        "downlink": "string",
        "frames": "string",
        "bound": [
          null
        ]
      },
      "lags": [
        {
          "active": true,
          "at": "string",
          "at_risk": true,
          "connector": "string",
          "consumer": "string",
          "fill": 0.0,
          "kind": "string",
          "lag_seconds": 0.0,
          "oldest_unread": "string",
          "pending": 0,
          "reason": "string",
          "retention_seconds": 0.0,
          "stream": "string",
          "unacked": 0
        }
      ]
    }
  ]
}
GET/v1/reconciler/events

Reconciler events#

Journal of the reconciler

The changes the reconciler made to the bindings of the links (bound, unbound, rebound) and to the readiness and revision of the targets, newest first.

Query parameters

target

string

Only the changes of this target.

since

string

Start of the window (RFC 3339); 24 h ago by default.

limit

integer

Newest entries returned: 200 by default, 5000 at most.

≥ 0

Responses

200The entries, newest first.application/json
eventsrequired

array of Entry

Entries, newest first.

Entry · 9 fields
atrequired

string · date-time

When the reconciler made the change.

targetrequired

string

Target.

link

string

Link, for a change of a link.

changerequired

Change

What changed.

one of bound unbound rebound ready not_ready revision

driver

string

Driver bound after the change.

transport

string

Transport bound after the change.

gateway

string

Gateway bound after the change.

config

string

Configuration revision of the target after the change.

reasons

array of string

Why, in the words of the readiness: the reasons of the target or of the link.

truncatedrequired

boolean

Whether older entries of the window were left out by the limit.

400Invalid query: api::invalid-query.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

404Invalid target: api::invalid-target.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

Request

curl "http://localhost:8080/v1/reconciler/events"

Response

{
  "events": [
    {
      "at": "2026-09-29T08:30:00Z",
      "target": "string",
      "link": "string",
      "change": "bound",
      "driver": "string",
      "transport": "string",
      "gateway": "string",
      "config": "string",
      "reasons": [
        "string"
      ]
    }
  ],
  "truncated": true
}
GET/v1/reconciler/events/watch

Watch reconciler events#

Follow the journal of the reconciler (WebSocket)

Sends every change of the reconciler from now on.

Query parameters

target

string

Only the changes of this target.

Responses

101WebSocket: one journal Entry per message.application/json
atrequired

string · date-time

When the reconciler made the change.

targetrequired

string

Target.

link

string

Link, for a change of a link.

changerequired

Change

What changed.

one of bound unbound rebound ready not_ready revision

driver

string

Driver bound after the change.

transport

string

Transport bound after the change.

gateway

string

Gateway bound after the change.

config

string

Configuration revision of the target after the change.

reasons

array of string

Why, in the words of the readiness: the reasons of the target or of the link.

404Invalid target: api::invalid-target.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

503The MCS bus (NATS) is unavailable: api::unavailable.application/json
errorsrequired

array of ErrorItem

Every error found.

ErrorItem · 3 fields
coderequired

string

Stable code.

messagerequired

string

Message for the operator.

help

string

Suggested fix.

Request

curl "http://localhost:8080/v1/reconciler/events/watch"

Response

{
  "at": "2026-09-29T08:30:00Z",
  "target": "string",
  "link": "string",
  "change": "bound",
  "driver": "string",
  "transport": "string",
  "gateway": "string",
  "config": "string",
  "reasons": [
    "string"
  ]
}

↑↓ to moveEnter to open