Network discovery
A device promoted to a network probe scans its subnets for devices that don't run the agent (printers, switches, cameras…). Configure, scan now, ping through it, and list what it found.
| Method | Path | Summary |
|---|---|---|
| POST | /v2/app/rmm-network-probe/device/:id/promote | Promote a device to a Network Probe |
| POST | /v2/app/rmm-network-probe/device/:id/demote | Demote a device from Network Probe |
| GET | /v2/app/rmm-network-probe/device/:id | Get a device's Network Probe status and configuration |
| POST | /v2/app/rmm-network-probe/device/:id/config | Save a Network Probe's scan configuration |
| POST | /v2/app/rmm-network-probe/device/:id/scan-now | Trigger an immediate subnet scan |
| POST | /v2/app/rmm-network-probe/device/:id/ping | Run an ad-hoc ping against a single host via a Network Probe |
| GET | /v2/app/rmm-network-probe/groups/:groupId/discovered-devices | List discovered (non-agent) devices for a site group |
| GET | /v2/app/rmm-network-probe/discovered-devices | Same as the group listing above, for RMM2's site/group selection: one group, a whole site, or (neither) every site |
| GET | /v2/app/rmm-network-probe/discovered-device/:id | Get full detail for one discovered network device |
#Promote a device to a Network Probe
/v2/app/rmm-network-probe/device/:id/promotePromote a device to a Network Probe. Requires an active RMM license. Sets devices.is_network_probe = 1 and upserts a row in rmm_network_probes (enabled), so the device begins subnet-scanning its own network plus any configured extra subnets.
- Address
https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/:id/promote- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: RMM.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
is_network_probe | boolean | |
probe | any |
Example response
{
"is_network_probe": true,
"probe": null
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
| 404 | Device not found |
Example request
curl -X POST 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/promote' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/promote', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/promote",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/promote' -Headers $headers#Demote a device from Network Probe
/v2/app/rmm-network-probe/device/:id/demoteDemote a device from Network Probe. Requires an active RMM license. Sets devices.is_network_probe = 0 and disables the rmm_network_probes row. This pauses future scanning only — the config row and any already-discovered devices are kept, and re-promoting later restores the same config.
- Address
https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/:id/demote- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: RMM.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
is_network_probe | boolean |
Example response
{
"is_network_probe": true
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
| 404 | Device not found |
Example request
curl -X POST 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/demote' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/demote', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/demote",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/demote' -Headers $headers#Get a device's Network Probe status and configuration
/v2/app/rmm-network-probe/device/:idGet a device's Network Probe status and configuration. Requires an active RMM license. If the device is not a promoted probe, returns just is_network_probe=false. Otherwise also returns the probe's scan config/status plus a display-only list of subnets detected from the device's last-known network inventory (not what's actually sent to the agent to scan — the agent recomputes its own subnets at scan time).
- Address
https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: RMM.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
is_network_probe | boolean |
Example response
{
"is_network_probe": true
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
| 404 | Device not found |
Example request
curl -X GET 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42' -Headers $headers#Save a Network Probe's scan configuration
/v2/app/rmm-network-probe/device/:id/configSave a Network Probe's scan configuration. Requires an active RMM license. Device must already be a promoted probe. Each entry in extra_subnets is validated as a CIDR (e.g. 10.20.30.0/24). scan_interval_minutes is floored to a minimum of 15 when set (to avoid overlapping scans); null/0 disables auto-scan and clears the scheduled next_scan_at.
- Address
https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/:id/config- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: RMM.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Request body JSON
| Name | Type | Description |
|---|---|---|
extra_subnets | array of any | |
snmp_community | any | |
is_enabled | boolean | |
scan_interval_minutes | number |
Response 200
| Field | Type | Description |
|---|---|---|
message | string |
Example response
{
"message": "Saved"
}Errors
| Status | Message |
|---|---|
| 400 | "…" is not a valid subnet (expected e.g. 10.20.30.0/24) |
| 404 | User not found |
| 404 | Network Probe not found for this device |
Example request
curl -X POST 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/config' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"extra_subnets":[],"snmp_community":"…","is_enabled":true,"scan_interval_minutes":12.5}'const res = await fetch('https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/config', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"extra_subnets":[],"snmp_community":"…","is_enabled":true,"scan_interval_minutes":12.5}),
});
const data = await res.json();import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/config",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"extra_subnets":[],"snmp_community":"…","is_enabled":True,"scan_interval_minutes":12.5},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"extra_subnets":[],"snmp_community":"…","is_enabled":true,"scan_interval_minutes":12.5}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/config' -Headers $headers -ContentType 'application/json' -Body $body#Trigger an immediate subnet scan
/v2/app/rmm-network-probe/device/:id/scan-nowTrigger an immediate subnet scan. Requires an active RMM license. Dispatches a subnet_scan device_commands row for this probe (shared dispatch logic also used by the recurring scheduler). Rejected if scanning is disabled for the probe, or if a prior scan for it is still genuinely in flight and within its timeout window.
- Address
https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/:id/scan-now- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: RMM.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 201
| Field | Type | Description |
|---|---|---|
command_id | integer |
Example response
{
"command_id": 7
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
| 404 | Network Probe not found for this device |
Example request
curl -X POST 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/scan-now' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/scan-now', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/scan-now",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/scan-now' -Headers $headers#Run an ad-hoc ping against a single host via a Network Probe
/v2/app/rmm-network-probe/device/:id/pingRun an ad-hoc ping against a single host via a Network Probe. Requires an active RMM license. A simpler, distinct tool from Scan Now — dispatches a network_probe / ping_check device_commands row directly to the probe device with no associated rmm_checks/rmm_probe_results row, so it's invisible to the recurring checker/scheduler.
- Address
https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/:id/ping- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: RMM.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Request body JSON
| Name | Type | Description |
|---|---|---|
host | any |
Response 201
| Field | Type | Description |
|---|---|---|
command_id | integer |
Example response
{
"command_id": 7
}Errors
| Status | Message |
|---|---|
| 400 | host is required |
| 404 | User not found |
| 404 | Network Probe not found for this device |
Example request
curl -X POST 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/ping' \
-H "X-API-Key: $BRAMBLE_KEY" \
-H "Content-Type: application/json" \
-d '{"host":"…"}'const res = await fetch('https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/ping', {
method: 'POST',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({"host":"…"}),
});
const data = await res.json();import os, requests
r = requests.post(
"https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/ping",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
json={"host":"…"},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
$body = '{"host":"…"}'
Invoke-RestMethod -Method POST -Uri 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/device/42/ping' -Headers $headers -ContentType 'application/json' -Body $body#List discovered (non-agent) devices for a site group
/v2/app/rmm-network-probe/groups/:groupId/discovered-devicesList discovered (non-agent) devices for a site group. Requires an active RMM license. Returns rmm_network_discovered_devices rows for the group (switches, printers, APs, unmanaged boxes found by scans), each annotated with the discovering probe's hostname/display name, plus the list of Network Probes active in that group with their last scan status.
- Address
https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/groups/:groupId/discovered-devices- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: RMM.
Path parameters
| Name | Type | Description |
|---|---|---|
groupIdrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
devices | array of any | |
probes | array of any |
Example response
{
"devices": [],
"probes": []
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
| 404 | Group not found |
Example request
curl -X GET 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/groups/1/discovered-devices' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/groups/1/discovered-devices', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/groups/1/discovered-devices",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/groups/1/discovered-devices' -Headers $headers#Same as the group listing above, for RMM2's site/group selection: one group, a whole site, or (neither) every site
/v2/app/rmm-network-probe/discovered-devices- Address
https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/discovered-devices- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: RMM.
Response 200
| Field | Type | Description |
|---|---|---|
devices | array of any | |
probes | array of any |
Example response
{
"devices": [],
"probes": []
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
Example request
curl -X GET 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/discovered-devices' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/discovered-devices', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/discovered-devices",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/discovered-devices' -Headers $headers#Get full detail for one discovered network device
/v2/app/rmm-network-probe/discovered-device/:idGet full detail for one discovered network device. Requires an active RMM license. Same enrichment as the group listing (vendor via OUI lookup, best-guess device type, "has agent installed" cross-reference against the devices table) plus every probe currently reporting this device (seen_by_probe_device_ids) resolved to hostname/display_name.
- Address
https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/discovered-device/:id- Requires
- Signed-in session,
X-API-Key, or a Bramble app access token (Authorization: Bearer).
Licence: RMM.
Path parameters
| Name | Type | Description |
|---|---|---|
idrequired | integer |
Response 200
| Field | Type | Description |
|---|---|---|
device | any | |
seen_by_probes | array of any |
Example response
{
"device": null,
"seen_by_probes": []
}Errors
| Status | Message |
|---|---|
| 404 | User not found |
| 404 | Discovered device not found |
Example request
curl -X GET 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/discovered-device/42' \
-H "X-API-Key: $BRAMBLE_KEY"const res = await fetch('https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/discovered-device/42', {
method: 'GET',
headers: { 'X-API-Key': process.env.BRAMBLE_KEY },
});
const data = await res.json();import os, requests
r = requests.get(
"https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/discovered-device/42",
headers={"X-API-Key": os.environ["BRAMBLE_KEY"]},
)
r.raise_for_status()
data = r.json()$headers = @{ 'X-API-Key' = $env:BRAMBLE_KEY }
Invoke-RestMethod -Method GET -Uri 'https://<your-org>.brambleit.cloud/api/v2/app/rmm-network-probe/discovered-device/42' -Headers $headersWas this page helpful?
Thanks for your feedback.