Alpha

Under active development. Breaking changes expected. APIs, installers, and UI may shift between releases.

API AND SDKAvailable

Build on the agent.

A REST control surface for integration, a raw MAVLink WebSocket relay for real-time flight data, MQTT topics for the cloud relay, and a Python SDK for plugins and drivers. Everything you need to build on top of the drone.
Available

Usable today. Early access — some pieces run behind a feature flag and APIs may shift between releases.

8
REST endpoints
WS
MAVLink relay
JSON
Response format
API key
Auth

REST API

Eight endpoints, full control.

The control surface binds port 8080. Responses are JSON. Every request carries an X-ADOS-Key header.

GET/api/status
System health, uptime, FC connection state, agent version
GET/api/telemetry
Vehicle state: attitude, GPS, battery, RC channels, flight mode
GET/api/params
Flight controller parameters, cached, filterable by prefix
POST/api/commands
Send a MAVLink command: takeoff, land, goto, RTL, arm, disarm
GET/api/config
Agent configuration, parsed to JSON
PUT/api/config
Update configuration keys and hot-reload the affected services
GET/api/services
State of every managed service: running, stopped, failed
GET/api/logs
Structured log entries with service and level filters

TRANSPORTS

Ports and topics.

The agent exposes local ports for direct integration and MQTT topics for the optional cloud relay. Every transport speaks the same underlying MAVLink.

Ports and MQTT topics
REST control surface
:8080
MAVLink WebSocket relay
:8765
WebRTC video (WHEP)
:8889
Cloud MAVLink uplink
ados/{id}/mavlink/tx
Cloud MAVLink downlink
ados/{id}/mavlink/rx
Cloud WebRTC signaling
ados/{id}/webrtc/offer

EXAMPLES

Quick start.

telemetry over REST
curl -s http://<board-ip>:8080/api/telemetry \
  -H "X-ADOS-Key: <your-key>" | jq

{
  "armed": true,
  "mode": "GUIDED",
  "battery": { "voltage": 22.4, "pct": 78 },
  "gps": { "fix": 3, "satellites": 14, "alt": 50.2 },
  "attitude": { "roll": 0.02, "pitch": -0.01, "yaw": 182.5 }
}
python client
import httpx

BASE = "http://<board-ip>:8080"
headers = {"X-ADOS-Key": "<your-key>"}

telem = httpx.get(f"{BASE}/api/telemetry", headers=headers).json()
print(telem["battery"]["pct"], telem["gps"]["satellites"])

httpx.post(
    f"{BASE}/api/commands",
    headers=headers,
    json={"command": "takeoff", "params": {"alt": 10}},
)

WEBSOCKET

Raw MAVLink relay.

The relay on port 8765 forwards raw MAVLink v2 between the flight controller and any number of consumers. Wire-compatible with the ArduPilot SITL WebSocket bridge.

  • Bidirectional: read telemetry and send commands
  • Raw binary MAVLink v2 frames, no JSON wrapping
  • Multi-consumer: many clients connect at once
  • Wire-compatible with the ArduPilot SITL bridge
  • Sub-5 ms latency on the local network
browser websocket
const ws = new WebSocket("ws://<board-ip>:8765");
ws.binaryType = "arraybuffer";

// inbound: raw MAVLink v2 frames from the flight controller
ws.onmessage = (e) => decodeMavlink(new Uint8Array(e.data));

// outbound: send a frame straight to the FC
ws.send(encodeCommandLong(sysid, compid, cmd, params));
Multi-consumer routing
Flight controllerUART or USB
MAVLink routerone in, many out
WebSocket:8765
web GCS
TCP:5760
SITL bridge
UDP:14550
legacy tools
One MAVLink stream, three transport endpoints, many consumers at once.

PYTHON SDK

ados.sdk

The SDK is for plugin and driver authors. It ships with the agent and exposes stable base classes for hardware drivers, the on-vehicle vision bus, and a plugin test harness.

CameraDriver

Camera drivers over CSI, USB UVC, IP, and vendor SDKs

GimbalDriver

Gimbal drivers with pan, tilt, and roll control

LidarDriver

LiDAR and rangefinder drivers

GpsDriver

GPS and GNSS receiver drivers

EscDriver

ESC drivers with telemetry feedback

VisionClient

Read frames and detections from the on-vehicle vision bus

SECURITY

API-key authentication.

Every request carries a key in the X-ADOS-Key header. Keys hold a permission level that bounds what they can do.

readTelemetry, status, config, logs, params. No state changes.
commandSend flight commands: takeoff, land, goto. Requires read.
missionUpload and execute mission files. Requires command.
configModify agent and FC configuration. Requires read.
adminFull access: updates, service restart, key management.

Read the full API reference.

Complete endpoints, the WebSocket protocol, and the SDK documentation on GitHub.

View on GitHub
Get Early Access