Skip to main content
ADOS uses “pairing” for three separate things. A ground station normally needs the first two.
  • Mission Control pairing gives one Mission Control owner an API key for the node. See Pairing.
  • Air-link pairing (WFB-ng bind) exchanges radio keys between a drone and a ground station. See WFB-ng pairing.
  • Mesh pairing joins a relay to a receiver in a ground mesh. See Build a mesh.
Mission Control pairing gives one Mission Control owner an API key for the node, so the node 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 path is opt-in, for reaching a node on a different network. An unpaired node still runs local MAVLink, local video and the local REST API.

Pair over the LAN

1

Open the pairing dialog

In Mission Control, click Pair New Node and stay on the Add a drone tab.
2

Enter the node

Type the node’s hostname, IP address or .local name (for example ados-9f2c1a.local or 192.168.1.50), or the 6-character code that ados status shows on the node. A code is matched against the nodes advertising on this LAN.
3

Pair

Mission Control probes /api/pairing/info, claims the node with /api/pairing/claim, and stores the returned API key in the browser. No account or internet connection is needed.
Claiming works only while the node is unpaired, and an unpaired node answers the claim only for callers on its own networks, never for a remote caller arriving through a tunnel. A node in local mode (cloud relay off) is the default and is correct, not a misconfiguration. If the node answers that it will not pair until its dashboard PIN is set, open its browser dashboard on the same network, set the PIN, and press Pair again. See Agent dashboard: Pairing.

Pair across networks

For a node on a different network, sign in to Mission Control. The node must beacon its code to the cloud backend (pairing.beacon_enabled). See Cloud relay.
1

The node holds a pairing code

On first boot, or after unpairing, the agent generates a 6-character code (uppercase letters and digits, without 0, O, 1, I or L) and keeps it for 24 hours, regenerating it after that or on unpair. ados status and the browser dashboard show it.
2

Enter the code in Mission Control

Click Pair New Node and type the code on the Add a drone tab. When no node on your LAN advertises the code, Mission Control looks it up through the cloud backend. The backend may apply its own, shorter claim window.
3

The node appears

The node shows up in Mission Control with its name, board and live telemetry.

Pair during install

The Generate a code tab in Pair New Node creates a code in Mission Control and copies an install command that carries it. Run that command on the node, or pass the code yourself:
--pair <code> seeds this node’s pairing code (and a pending key) so the code you already hold in Mission Control matches the node. Pairing completes when the node checks in. The other installer flags are on Install the Drone Agent.

Pair an existing node

Run ados on the node and open the setup URL from the Links panel, or open the browser dashboard at http://<node>:8080. If the node is running its hotspot, join it and open http://192.168.4.1:8080. The dashboard’s pairing page shows the code and the pairing state.

mDNS discovery

The control front advertises _ados._tcp at boot on every profile. While the node is unpaired, the advertisement carries the current pairing code, which is how Mission Control matches a typed code on the LAN and lists the node under Discovered on your network.

Pairing state file

The agent stores pairing state at /etc/ados/pairing.json, mode 0600:
An unpaired file carries pairing_code and code_created_at instead. The key is ados_ followed by 43 base64url characters.
The api_key authenticates callers to the node’s REST API and the node to the cloud backend. Protect this file and do not share the key.

API key

Once paired, the REST API requires the X-ADOS-Key header on most routes. The CLI reads the key from /etc/ados/pairing.json itself. Header format, exempt routes and the dashboard PIN session are on REST API.

Unpairing

Unpair from Mission Control, from the browser dashboard, or on the node:
From the REST API:
After unpairing:
  • The old API key stops working.
  • A new pairing code is generated.
  • /etc/ados/pairing.json is rewritten.
  • The node stops sending data through the cloud relay.
  • Local MAVLink, video and the REST API keep working.
ados unpair --radio also wipes the WFB air-link bind; --all releases both.

Configuration

The full pairing: key list is on Configuration.

Next steps

Configuration

Tune the node’s config file after pairing.

WFB-ng pairing

Bind the radio link between a drone and a ground station.
Last modified on October 11, 2026