Docs

Diagnose a device: connectivity, events and tests

Work out what's wrong with a device from your own systems: check whether it's online and who's connected, read its history, then run speed tests, network scans and network diagnostics.

Guide2 min readUpdated November 6, 2026

When a customer says the internet's slow or down, you can find out why without leaving your own tools. Start with what the device can tell you right now, then run a test if you need more.

Every call here takes the device's id from GET/v1/devices. Reading needs devices:read; starting a test needs devices:write. Your account needs the Devices module.

StepCallScope
Is it online, and who's connected?GET/v1/devices/{uuid}/connectivitydevices:read
What's been done to it lately?GET/v1/devices/{uuid}/eventsdevices:read
Speed testPOST/v1/devices/{uuid}/actions/speed_test, then GET/v1/devices/{uuid}/speed_testsdevices:write, then devices:read
Network scanPOST/v1/devices/{uuid}/actions/network_scan, then GET/v1/devices/{uuid}/network_scansdevices:write, then devices:read
Network diagnosticPOST/v1/devices/{uuid}/actions/network_diagnostic, then GET/v1/devices/{uuid}/network_diagnosticsdevices:write, then devices:read

Check whether it's online

GET/v1/devices/{uuid}/connectivity asks the device platform how many clients are connected, who they are, and the device's recent uptime:

curl https://cloud.mergewifi.com/v1/devices/0d5102c1-b8d2-4ba4-b6aa-43ed91d768c0/connectivity \
  -H "Authorization: Bearer $MERGEWIFI_API_KEY"
{
  "object": "device_connectivity",
  "device_id": "0d5102c1-b8d2-4ba4-b6aa-43ed91d768c0",
  "reachable": true,
  "connection_count": 4,
  "connections": [],
  "uptime": []
}
  • connection_count, connections and uptime are read live. If one of them can't be fetched, it comes back null and the rest still arrive.
  • reachable is from our last inventory refresh, which runs every 15 minutes.

See what's happened to it

GET/v1/devices/{uuid}/events lists what's been done to the device, most recent first — a quick way to see whether something changed just before the trouble started.

curl https://cloud.mergewifi.com/v1/devices/0d5102c1-b8d2-4ba4-b6aa-43ed91d768c0/events \
  -H "Authorization: Bearer $MERGEWIFI_API_KEY"
{
  "object": "list",
  "data": [
    { "object": "device_reading", "kind": "event", "recorded_at": null, "data": { } }
  ],
  "has_more": false,
  "next_cursor": null
}

Events, and the test results below, all come back as readings. Each reading has a kind and a data object holding the device platform's own record. What's inside data varies by hardware model, so read it defensively, and look inside it for the time — recorded_at can be null.

Run a speed test

Tests run on the device and take a while, so each one is two calls: start it, then read the results.

Start one with POST/v1/devices/{uuid}/actions/speed_test. type is rapid (the default) or full:

curl https://cloud.mergewifi.com/v1/devices/0d5102c1-b8d2-4ba4-b6aa-43ed91d768c0/actions/speed_test \
  -X POST \
  -H "Authorization: Bearer $MERGEWIFI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "type": "rapid" }'
{ "object": "device_action", "action": "speed_test", "status": "accepted", "requested_at": "2026-08-04T21:15:40.000Z" }

A 202 with accepted means the test was sent to the device, not that it's finished. Poll GET/v1/devices/{uuid}/speed_tests until a new result appears. Results are most recent first.

curl https://cloud.mergewifi.com/v1/devices/0d5102c1-b8d2-4ba4-b6aa-43ed91d768c0/speed_tests \
  -H "Authorization: Bearer $MERGEWIFI_API_KEY"

Scan the network

A network scan works the same way. Start it with POST/v1/devices/{uuid}/actions/network_scan — no body needed:

curl https://cloud.mergewifi.com/v1/devices/0d5102c1-b8d2-4ba4-b6aa-43ed91d768c0/actions/network_scan \
  -X POST \
  -H "Authorization: Bearer $MERGEWIFI_API_KEY"

Then poll GET/v1/devices/{uuid}/network_scans for the result, most recent first:

curl https://cloud.mergewifi.com/v1/devices/0d5102c1-b8d2-4ba4-b6aa-43ed91d768c0/network_scans \
  -H "Authorization: Bearer $MERGEWIFI_API_KEY"

Run a network diagnostic

A network diagnostic tests the device's connection through a network group. Start it with POST/v1/devices/{uuid}/actions/network_diagnostic. With an empty body it runs against the group the device is on now:

curl https://cloud.mergewifi.com/v1/devices/0d5102c1-b8d2-4ba4-b6aa-43ed91d768c0/actions/network_diagnostic \
  -X POST \
  -H "Authorization: Bearer $MERGEWIFI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

To see whether a different group would serve the device better, pass its network_group_id from GET/v1/network_groups. You'll need to pass one if the device isn't on a group, or if its group isn't available on your account.

Read the latest result with GET/v1/devices/{uuid}/network_diagnostics:

curl https://cloud.mergewifi.com/v1/devices/0d5102c1-b8d2-4ba4-b6aa-43ed91d768c0/network_diagnostics \
  -H "Authorization: Bearer $MERGEWIFI_API_KEY"

Found the problem? Manage a device covers restarts and firmware, and Start service covers moving a device to another network group.

Related: Manage a device · Start service · Track orders and the devices they ship · Going live