Pairing
Pairing connects your drone agent to ADOS Mission Control so the drone appears in your GCS, telemetry flows, and you can send commands. ADOS is local-first. The primary path is direct, over the LAN. The cloud pairing code is the secondary, opt-in path for reaching a drone on a different network. The agent also works fully unpaired (local MAVLink, local video, local REST API).Local pairing over the LAN (default)
When Mission Control and the agent are on the same network, the GCS reaches the agent directly. In the Add-a-Node card, enter the agent’s hostname, IP address, or.local mDNS name. The GCS calls the agent’s /api/pairing/info (probe) and /api/pairing/claim (claim) over the LAN and stores the returned API key locally in the browser. No cloud account or internet connection is required.
Claiming works only while the agent is unpaired, so being on the same LAN is the authorization boundary. An agent in local mode (cloud relay off) is the default and is correct, not a misconfiguration.
Cloud pairing for remote access
For a drone on a different network, use the cloud pairing code. This path requires the agent to be reachable through the cloud relay.1
Agent generates a pairing code
On first boot (or after unpairing), the agent generates a 6-character alphanumeric pairing code. The code has a 15-minute TTL and regenerates after expiry.
2
You enter the code in Mission Control
Open ADOS Mission Control, go to the Hardware tab, and click “Pair New Device.” Enter the 6-character code displayed by the agent.
3
Cloud exchange
Mission Control sends the pairing code to the Convex backend. The backend validates it, associates the device with your account, and generates an API key.
4
Agent receives the API key
The agent polls the Convex pairing endpoint every 30 seconds (configurable via
pairing.beacon_interval). When the backend confirms the pairing, the agent stores the API key at /etc/ados/pairing.json and begins sending telemetry to the cloud.5
Drone appears in your dashboard
The drone shows up in Mission Control with its name, board type, and live telemetry. You can rename it, send commands, and view video.
Pair during install
The fastest way to pair is during installation:Pair an existing agent
Runados, open the setup URL shown in the terminal, and use the setup webapp
pairing page. If the agent is running a hotspot, connect to it and open
http://192.168.4.1.
Mission Control can also open the setup webapp from Hardware surfaces when the
agent advertises a setup URL.
Pairing state file
After pairing, the agent stores credentials at/etc/ados/pairing.json:
Unpairing
Unpairing disconnects the agent from your cloud account. The drone disappears from Mission Control and stops sending telemetry. Use Mission Control or the setup webapp to unpair a device. From the REST API:- A new pairing code is generated immediately
- The old API key is invalidated
/etc/ados/pairing.jsonis updated- Cloud relay services stop sending data
- Local functionality (MAVLink, video, REST API) continues working
API key authentication
Once paired, the REST API requires theX-ADOS-Key header on most endpoints. A few endpoints are exempt (like /api/pairing/info) so local setup and status surfaces can check pairing state without a key.
The CLI reads the key from /etc/ados/pairing.json automatically. If you are calling the API from your own code, include the header:
Configuration
Pairing behavior is controlled in/etc/ados/config.yaml:
mDNS discovery
The agent advertises itself via mDNS as_ados._tcp.local. when discovery is enabled (default). This allows Mission Control to find drones on the local network without knowing their IP addresses.