REST + WebSocket + Python

Build on the agent.

REST endpoints for integration, WebSocket for real-time MAVLink, and a Python SDK for rapid development. Everything you need to build drone-powered applications.

8
REST Endpoints
WS
WebSocket Streams
JSON
Response Format
API Key
Authentication

REST API

Eight endpoints. Full control.

The REST API runs on port 8080 by default. All responses are JSON. Authentication via X-API-Key header.

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

Examples

Quick start.

Get Telemetry (curl)

curl -s http://192.168.1.100:8080/api/telemetry \
  -H "X-API-Key: your-key" | jq

{
  "armed": true,
  "mode": "GUIDED",
  "battery": { "voltage": 22.4, "pct": 78 },
  "gps": {
    "lat": 28.5445,
    "lon": 77.1855,
    "alt": 50.2,
    "fix": 3,
    "satellites": 14
  },
  "attitude": {
    "roll": 0.02,
    "pitch": -0.01,
    "yaw": 182.5
  }
}

Python SDK

from ados import ADOSDrone
import asyncio

async def main():
    drone = ADOSDrone("192.168.1.100")
    await drone.connect()

    # Read telemetry
    telem = await drone.get_telemetry()
    print(f"Battery: {telem.battery.pct}%")
    print(f"GPS: {telem.gps.lat}, {telem.gps.lon}")

    # Send command
    await drone.takeoff(altitude=10)
    await drone.goto(28.5450, 77.1860, 50)
    await drone.rtl()

asyncio.run(main())

WebSocket

Raw MAVLink relay.

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

  • Bidirectional: read telemetry and send commands
  • Raw binary MAVLink v2 frames (no JSON wrapping)
  • Multi-consumer: multiple clients connect simultaneously
  • Wire-compatible with ArduPilot SITL WebSocket bridge
  • Sub-5ms latency on local network

Multi-Consumer Routing

Flight Controller (UART/USB)
        |
   MAVLink Proxy
   /    |    \
  /     |     \
WS    TCP     UDP
:8765  :5760  :14550/:14551
 |      |      |
GCS   SITL   Legacy
Web   Bridge  Tools

Python SDK

ados-sdk

The Python SDK wraps the REST API and WebSocket relay into a clean async interface. Same capabilities, better ergonomics.

ADOSDrone

Single drone connection, telemetry, commands, parameters

ADOSSwarm

Multi-drone orchestration, grid assignment, formation flight

ADOSMission

Mission file loading, upload, execution, monitoring

ADOSVideo

Video stream access, snapshot capture, recording control

ADOSSensors

Sensor data access (GPS, IMU, barometer, rangefinder)

ADOSConfig

Agent and FC configuration read/write with validation

Security

API key authentication.

Every request requires an API key in the X-API-Key header. Keys have permission levels that control what operations are allowed.

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 including OTA updates, service restart, key management.

Read the full API docs.

Complete endpoint reference, WebSocket protocol, and SDK documentation on GitHub.

View on GitHub
Get Early Access