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.
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.
| Step | Call | Scope |
|---|---|---|
| Is it online, and who's connected? | GET/v1/devices/{uuid}/connectivity | devices:read |
| What's been done to it lately? | GET/v1/devices/{uuid}/events | devices:read |
| Speed test | POST/v1/devices/{uuid}/actions/speed_test, then GET/v1/devices/{uuid}/speed_tests | devices:write, then devices:read |
| Network scan | POST/v1/devices/{uuid}/actions/network_scan, then GET/v1/devices/{uuid}/network_scans | devices:write, then devices:read |
| Network diagnostic | POST/v1/devices/{uuid}/actions/network_diagnostic, then GET/v1/devices/{uuid}/network_diagnostics | devices: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,connectionsanduptimeare read live. If one of them can't be fetched, it comes backnulland the rest still arrive.reachableis 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

