Litmus Edge 4.4.x - DeviceHub: Asset Discovery
Network Interfaces
GET {{edgeUrl}}/nd/ifaces
Network Interfaces
Returns the network interfaces the device exposes for asset discovery, with each interface's discovery-enabled and operational state. Use this to render an interface picker, or to verify that an interface is up before triggering a scan.
This is the discovery-service view, not the host-level network view -- for the latter, see System > Network > Interfaces.
Endpoint
GET {{edgeUrl}}/nd/ifaces
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
None.
Response
200 OK -- application/json. Array of interface objects.
| Field | Type | Description |
|---|---|---|
name |
string | Kernel name of the interface (eth0, wlan0, usb0, br0, ...). Use this in /nd/ifaces/{name}/enable. |
enabled |
boolean | true if network discovery has been turned on for this interface (via the per-interface enable endpoints). |
active |
boolean | true if the kernel reports the interface as up and carrying a link. ND will only produce results on active interfaces. |
Example response
[
{
"name": "eth0",
"enabled": false,
"active": true
}
]
A pair of enabled: false, active: true is the safe-default state right after install: the interface is healthy but the device has not been told to scan on it.
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"name": "eth0",
"enabled": false,
"active": true
}
]
Assets/Devices on Network
GET {{edgeUrl}}/networkutil/discover/cip/devices
Assets/Devices on Network (cached CIP results)
Returns the most recently observed set of CIP / EtherNet/IP devices, across every interface the CIP scanner has been run on. CIP is the ODVA-defined application-layer protocol used by Rockwell / Allen-Bradley PLCs (and many other vendors).
This endpoint is a read of the cache. To force a fresh probe, call Scan for Devices/Assets on eth0 (or the same path with another interface) first, then re-read here.
Endpoint
GET {{edgeUrl}}/networkutil/discover/cip/devices
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
None.
Response
200 OK -- application/json. Array of CIP device objects.
| Field | Type | Description |
|---|---|---|
encap_protocol_version |
integer | EtherNet/IP encapsulation protocol version reported by the device. |
ip_address |
string | IPv4 address of the device. |
vendor |
string | Vendor name from ODVA's vendor registry (e.g. Rockwell Automation/Allen-Bradley). |
product_type |
string | Functional category from ODVA (e.g. Programmable Logic Controller, Communications Adapter). |
product_code |
integer | Vendor-assigned product code. |
revision.major / .minor |
integer | Firmware revision. |
status |
integer | Raw EtherNet/IP status bitfield. Implementation-defined; useful in support tickets. |
serial |
string | Vendor-assigned serial number (hex). |
product_name |
string | Device's model string (e.g. 2080-LC50-24QWB). |
state |
integer | Device-reported lifecycle state. |
interface |
string | LE interface the device was discovered on. |
port |
string | EtherNet/IP port. Always 44818 for standard CIP. |
last_seen |
integer | Unix epoch seconds of the most recent successful probe. |
protocol |
string | Always CIP for this endpoint. |
Example response
[
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.159",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Programmable Logic Controller",
"product_code": 141,
"revision": { "major": 9, "minor": 11 },
"status": 52,
"serial": "609a1f75",
"product_name": "2080-LC50-24QWB",
"state": 2,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
}
]
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.159",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Programmable Logic Controller",
"product_code": 141,
"revision": {
"major": 9,
"minor": 11
},
"status": 52,
"serial": "609a1f75",
"product_name": "2080-LC50-24QWB",
"state": 2,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.6",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Programmable Logic Controller",
"product_code": 106,
"revision": {
"major": 30,
"minor": 11
},
"status": 48,
"serial": "609bcdd2",
"product_name": "1769-L30ER/A LOGIX5330ER",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.95",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Programmable Logic Controller",
"product_code": 90,
"revision": {
"major": 2,
"minor": 15
},
"status": 4,
"serial": "608effd8",
"product_name": "1766-L32BWA B/15.00",
"state": 0,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.190",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Programmable Logic Controller",
"product_code": 216,
"revision": {
"major": 30,
"minor": 14
},
"status": 12384,
"serial": "60e9d1c5",
"product_name": "5069-L310ER/A",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.44",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Communications Adapter",
"product_code": 185,
"revision": {
"major": 2,
"minor": 12
},
"status": 4,
"serial": "9ca075a0",
"product_name": "1763-L16BBB B/12.00",
"state": 0,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.9",
"vendor": "Omron Corporation",
"product_type": "Communications Adapter",
"product_code": 1643,
"revision": {
"major": 2,
"minor": 1
},
"status": 52,
"serial": "01090861",
"product_name": "NJ301-1100",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.2.162",
"vendor": "TURCK",
"product_type": "Communications Adapter",
"product_code": 14017,
"revision": {
"major": 2,
"minor": 7
},
"status": 52,
"serial": "00a86d8c",
"product_name": "TBEN-L5-8IOL",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.42",
"vendor": "Keyence Corporation",
"product_type": "Communications Adapter",
"product_code": 100,
"revision": {
"major": 1,
"minor": 1
},
"status": 52,
"serial": "001414f7",
"product_name": "KV-5500",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.129",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Communications Adapter",
"product_code": 92,
"revision": {
"major": 2,
"minor": 3
},
"status": 128,
"serial": "0043dd68",
"product_name": "1788-ENBT/A",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.170",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Communications Adapter",
"product_code": 99,
"revision": {
"major": 1,
"minor": 8
},
"status": 112,
"serial": "6038f7c6",
"product_name": "1761-NET-ENI/D",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.130",
"vendor": "Parker Hannifin/Compumotor Division",
"product_type": "Generic Device (deprecated)",
"product_code": 1,
"revision": {
"major": 1,
"minor": 1
},
"status": 116,
"serial": "87654321",
"product_name": "ACR9000",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.169",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Communications Adapter",
"product_code": 166,
"revision": {
"major": 11,
"minor": 2
},
"status": 48,
"serial": "013860c2",
"product_name": "1756-EN2T/D",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.2",
"vendor": "ProSoft Technology",
"product_type": "Communications Adapter",
"product_code": 8009,
"revision": {
"major": 1,
"minor": 3
},
"status": 48,
"serial": "8da2be26",
"product_name": "PLX31-EIP-MBTCP",
"state": 255,
"interface": "eth0",
"port": "44818",
"last_seen": 1722375447,
"protocol": "CIP"
}
]
Scan for Devices/Assets on eth0
GET {{edgeUrl}}/networkutil/discover/cip/scan?ifce=eth0
Scan for Devices/Assets on eth0 (CIP active scan)
Triggers an active CIP / EtherNet/IP scan on the given interface and returns the freshly observed devices. The scan is synchronous: the call blocks until the probe round-trip completes (typically a few seconds), and the response is the same shape as Assets/Devices on Network.
This call also updates the cache served by Assets/Devices on Network.
Endpoint
GET {{edgeUrl}}/networkutil/discover/cip/scan?ifce=eth0
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
ifce |
string | Yes | Interface to scan on (e.g. eth0, eth1, wlan0). Use Network Interfaces to enumerate valid names. |
Response
200 OK -- application/json. Same shape as Assets/Devices on Network.
See that endpoint for the field-by-field reference and an example payload.
Example response (excerpt)
[
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.170",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Communications Adapter",
"product_code": 99,
"revision": { "major": 1, "minor": 8 },
"status": 112,
"serial": "6038f7c6",
"product_name": "1761-NET-ENI/D",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
}
]
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
Scan-specific notes
- A successful scan with an empty array typically means CIP traffic is blocked upstream (firewall, VLAN isolation) or the interface has no CIP-speaking devices on it.
- This endpoint sends EtherNet/IP
ListIdentitybroadcasts. Some networks classify these as suspicious traffic; coordinate with IT before scheduling repeated scans.
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.170",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Communications Adapter",
"product_code": 99,
"revision": {
"major": 1,
"minor": 8
},
"status": 112,
"serial": "6038f7c6",
"product_name": "1761-NET-ENI/D",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.190",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Programmable Logic Controller",
"product_code": 216,
"revision": {
"major": 30,
"minor": 14
},
"status": 12384,
"serial": "60e9d1c5",
"product_name": "5069-L310ER/A",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.159",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Programmable Logic Controller",
"product_code": 141,
"revision": {
"major": 9,
"minor": 11
},
"status": 52,
"serial": "609a1f75",
"product_name": "2080-LC50-24QWB",
"state": 2,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.42",
"vendor": "Keyence Corporation",
"product_type": "Communications Adapter",
"product_code": 100,
"revision": {
"major": 1,
"minor": 1
},
"status": 52,
"serial": "001414f7",
"product_name": "KV-5500",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.95",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Programmable Logic Controller",
"product_code": 90,
"revision": {
"major": 2,
"minor": 15
},
"status": 4,
"serial": "608effd8",
"product_name": "1766-L32BWA B/15.00",
"state": 0,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.2",
"vendor": "ProSoft Technology",
"product_type": "Communications Adapter",
"product_code": 8009,
"revision": {
"major": 1,
"minor": 3
},
"status": 48,
"serial": "8da2be26",
"product_name": "PLX31-EIP-MBTCP",
"state": 255,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.130",
"vendor": "Parker Hannifin/Compumotor Division",
"product_type": "Generic Device (deprecated)",
"product_code": 1,
"revision": {
"major": 1,
"minor": 1
},
"status": 116,
"serial": "87654321",
"product_name": "ACR9000",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.129",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Communications Adapter",
"product_code": 92,
"revision": {
"major": 2,
"minor": 3
},
"status": 128,
"serial": "0043dd68",
"product_name": "1788-ENBT/A",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.44",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Communications Adapter",
"product_code": 185,
"revision": {
"major": 2,
"minor": 12
},
"status": 4,
"serial": "9ca075a0",
"product_name": "1763-L16BBB B/12.00",
"state": 0,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.2.162",
"vendor": "TURCK",
"product_type": "Communications Adapter",
"product_code": 14017,
"revision": {
"major": 2,
"minor": 7
},
"status": 52,
"serial": "00a86d8c",
"product_name": "TBEN-L5-8IOL",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.6",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Programmable Logic Controller",
"product_code": 106,
"revision": {
"major": 30,
"minor": 11
},
"status": 48,
"serial": "609bcdd2",
"product_name": "1769-L30ER/A LOGIX5330ER",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.9",
"vendor": "Omron Corporation",
"product_type": "Communications Adapter",
"product_code": 1643,
"revision": {
"major": 2,
"minor": 1
},
"status": 52,
"serial": "01090861",
"product_name": "NJ301-1100",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
},
{
"encap_protocol_version": 1,
"ip_address": "10.17.0.169",
"vendor": "Rockwell Automation/Allen-Bradley",
"product_type": "Communications Adapter",
"product_code": 166,
"revision": {
"major": 11,
"minor": 2
},
"status": 48,
"serial": "013860c2",
"product_name": "1756-EN2T/D",
"state": 3,
"interface": "eth0",
"port": "44818",
"last_seen": 1722376200,
"protocol": "CIP"
}
]
Scan for ND Nodes
GET {{edgeUrl}}/nd/nodes/eth0
Scan for ND Nodes
Returns the current Network Discovery (ND) result set for one interface. ND is the passive MAC-level scanner -- it sees every host that appears in the device's ARP table or replies to broadcast probes, regardless of upper-layer protocol.
The interface must have ND enabled (Enable Device Discovery in eth0) for results to accumulate. A response of [] typically means ND is disabled, the interface is down, or no neighbors have been seen yet.
Endpoint
GET {{edgeUrl}}/nd/nodes/eth0
Substitute the interface name in the path to target a different interface. The pre-built wlan0 variant is Get Devices on wlan0.
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
| Location | Name | Required | Description |
|---|---|---|---|
| Path | eth0 |
Yes | Interface name. See Network Interfaces. |
No query parameters or request body.
Response
200 OK -- application/json. Array of ND node objects.
| Field | Type | Description |
|---|---|---|
iface |
string | Interface the node was seen on (echo of the path parameter). |
ipv4 |
string | IPv4 address (empty if only L2 visible). |
mac |
string | MAC address (canonical hex with colons). |
macVendor |
string | OUI-derived vendor name (e.g. Mitsubishi Electric Corporation). |
plcVendor |
string | Optional vendor classification from higher-layer fingerprinting. Empty if unknown. |
hostname |
string | Resolved hostname, empty if not known. |
tcpPorts |
integer[] | Open TCP ports observed. |
udpPorts |
integer[] | Open UDP ports observed. |
lastSeen |
string | ISO 8601 UTC timestamp of the most recent observation. |
online |
boolean | Heuristic online/offline flag based on lastSeen recency. |
Example response
[
{
"iface": "eth0",
"ipv4": "10.17.0.158",
"mac": "38:e0:8e:e0:f4:41",
"macVendor": "Mitsubishi Electric Corporation",
"plcVendor": "",
"hostname": "",
"tcpPorts": [],
"udpPorts": [],
"lastSeen": "2024-07-30T21:37:28Z",
"online": true
}
]
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
[
{
"iface": "eth0",
"ipv4": "10.17.0.158",
"mac": "38:e0:8e:e0:f4:41",
"macVendor": "Mitsubishi Electric Corporation",
"plcVendor": "",
"hostname": "",
"tcpPorts": [],
"udpPorts": [],
"lastSeen": "2024-07-30T21:37:28Z",
"online": true
},
{
"iface": "eth0",
"ipv4": "10.17.0.219",
"mac": "20:bb:c6:0e:f9:f5",
"macVendor": "Jabil Circuit Hungary Ltd.",
"plcVendor": "",
"hostname": "",
"tcpPorts": [],
"udpPorts": [],
"lastSeen": "2024-07-30T21:47:50Z",
"online": true
}
]
Enable Device Discovery on wlan0
PUT {{edgeUrl}}/nd/ifaces/wlan0/enable
Enable Device Discovery on wlan0
Enables Network Discovery scanning on the wlan0 interface. After this call, Get Devices on wlan0 will begin accumulating neighbors as they are observed. The setting persists across device reboots.
Endpoint
PUT {{edgeUrl}}/nd/ifaces/wlan0/enable
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
| Location | Name | Required | Description |
|---|---|---|---|
| Path | wlan0 |
Yes | Interface name. Use Network Interfaces to list valid names. |
No query parameters or request body.
Response
200 OK -- empty body (or a small JSON ack depending on build).
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 204 No Content
Disable Device Discovery on wlan0
PUT {{edgeUrl}}/nd/ifaces/wlan0/disable
Disable Device Discovery on wlan0
Disables Network Discovery scanning on the wlan0 interface. The ND cache for this interface is retained (re-enable to keep growing it), but no new observations are recorded.
Endpoint
PUT {{edgeUrl}}/nd/ifaces/wlan0/disable
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
| Location | Name | Required | Description |
|---|---|---|---|
| Path | wlan0 |
Yes | Interface name. Use Network Interfaces to list valid names. |
No query parameters or request body.
Response
200 OK -- empty body (or a small JSON ack depending on build).
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 204 No Content
Get Devices on wlan0
GET {{edgeUrl}}/nd/nodes/wlan0
Get Devices on wlan0
Wireless-interface variant of Scan for ND Nodes. Returns the current Network Discovery (ND) result set for wlan0. See Scan for ND Nodes for the full response field reference and notes about enabling ND on the interface.
Endpoint
GET {{edgeUrl}}/nd/nodes/wlan0
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
| Location | Name | Required | Description |
|---|---|---|---|
| Path | wlan0 |
Yes | Interface name (hardcoded in the URL). |
Response
200 OK -- application/json. Array of ND node objects (see Scan for ND Nodes for the field reference).
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Enable Device Discovery in eth0
PUT {{edgeUrl}}/nd/ifaces/eth0/enable
Enable Device Discovery on eth0
Enables Network Discovery scanning on the wired Ethernet interface eth0. After this call, Scan for ND Nodes will begin accumulating neighbors as they are observed. The setting persists across device reboots.
Endpoint
PUT {{edgeUrl}}/nd/ifaces/eth0/enable
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
| Location | Name | Required | Description |
|---|---|---|---|
| Path | eth0 |
Yes | Interface name. Use Network Interfaces to list valid names. |
No query parameters or request body.
Response
200 OK -- empty body (or a small JSON ack depending on build).
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 204 No Content
Disable Device Discovery in eth0
PUT {{edgeUrl}}/nd/ifaces/eth0/disable
Disable Device Discovery on eth0
Disables Network Discovery scanning on the wired Ethernet interface eth0. The ND cache for this interface is retained (re-enable to keep growing it), but no new observations are recorded.
Endpoint
PUT {{edgeUrl}}/nd/ifaces/eth0/disable
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
| Location | Name | Required | Description |
|---|---|---|---|
| Path | eth0 |
Yes | Interface name. Use Network Interfaces to list valid names. |
No query parameters or request body.
Response
200 OK -- empty body (or a small JSON ack depending on build).
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 204 No Content
List Discovery Interfaces
GET {{edgeUrl}}/networkutil/interfaces
List Discovery Interfaces
Lists the network interfaces the discovery service can scan. Pass one of the returned names as ifce to Scan for Assets (All Protocols).
This is the route the Asset Discovery page of the LE web UI uses. It covers every protocol the discovery service knows (ARP, CIP, EtherNet/IP, Modbus TCP, Profinet, DNP3, ICCP, mDNS and others), where the older /nd/... and /networkutil/discover/cip/... routes in this folder each cover one mechanism. Both sets are served on 4.0.x.
Endpoint
GET {{edgeUrl}}/networkutil/interfaces
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
None.
Response
200 OK -- application/json. An array with one object per interface.
| Field | Type | Description |
|---|---|---|
name |
string |
Interface name, e.g. eth0. |
[
{ "name": "eth0" }
]
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
Response
Status: 200 OK
[
{
"name": "eth0"
}
]
List Discovered Assets (All Protocols)
GET {{edgeUrl}}/networkutil/discover/all/devices
List Discovered Assets (All Protocols)
Returns every asset the discovery service has found so far, across all interfaces and protocols. Reads the stored results only and does not start a scan; use Scan for Assets (All Protocols) to refresh them.
This is the route the Asset Discovery page of the LE web UI uses. It covers every protocol the discovery service knows (ARP, CIP, EtherNet/IP, Modbus TCP, Profinet, DNP3, ICCP, mDNS and others), where the older /nd/... and /networkutil/discover/cip/... routes in this folder each cover one mechanism. Both sets are served on 4.0.x.
Endpoint
GET {{edgeUrl}}/networkutil/discover/all/devices
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Parameters
None.
Response
200 OK -- application/json. An array of assets; empty when nothing has been discovered yet. On a busy plant network expect hundreds of entries.
Each entry is one asset, merged across every protocol that found it:
| Field | Type | Description |
|---|---|---|
ip_address |
string |
IP address of the asset. |
mac_address |
string |
MAC address. Empty when the asset was only seen through mDNS. |
vendor |
string |
Vendor, from the protocol response or the MAC OUI. |
product_name |
string |
Product name reported by the asset (CIP, Profinet) or its mDNS host name. |
product_type |
string |
Product type reported by the asset, when the protocol carries one. |
interface |
string |
Interface the asset was seen on. |
last_seen |
integer |
Unix time (seconds) the asset was last seen. |
protocols |
[string] |
Industrial protocols detected, e.g. CIP, EtherNet/IP, Modbus TCP, Profinet. |
protocols_data |
object |
Raw per-mechanism records keyed arp, cip, profinet, ... May be null. |
Example, trimmed to two entries (MAC addresses replaced):
[
{
"ip_address": "10.17.0.42",
"mac_address": "00:00:5e:00:53:02",
"vendor": "Keyence Corporation",
"product_name": "KV-5500",
"product_type": "Communications Adapter",
"interface": "eth0",
"last_seen": 1791912586,
"protocols": ["EtherNet/IP", "CIP"],
"protocols_data": {
"arp": { "ip_address": "10.17.0.42", "plc_vendors": ["EtherNet/IP"], "tcp_ports": [44818], "protocol": "ARP" },
"cip": { "vendor_id": "16f", "product_code": 100, "serial": "001414f7", "port": 44818, "protocol": "CIP" }
}
}
]
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
Response
Status: 200 OK
[
{
"ip_address": "10.17.1.191",
"mac_address": "00:00:5e:00:53:01",
"vendor": "Hewlett Packard",
"product_name": "",
"product_type": "",
"interface": "eth0",
"last_seen": 1791333273,
"protocols": [],
"protocols_data": {}
},
{
"ip_address": "10.17.0.42",
"mac_address": "00:00:5e:00:53:02",
"vendor": "Keyence Corporation",
"product_name": "KV-5500",
"product_type": "Communications Adapter",
"interface": "eth0",
"last_seen": 1791912586,
"protocols": [
"EtherNet/IP",
"CIP"
],
"protocols_data": {
"arp": {
"ip_address": "10.17.0.42",
"interface": "",
"mac_address": "00:00:5e:00:53:02",
"vendor": "Keyence Corporation",
"plc_vendors": [
"EtherNet/IP"
],
"host_name": "",
"product_type": "",
"tcp_ports": [
44818
],
"udp_ports": null,
"id": "",
"updated_at": 1791912583,
"protocol": "ARP"
},
"cip": {
"encap_protocol_version": 1,
"ip_address": "10.17.0.42",
"vendor": "Keyence Corporation",
"product_type": "Communications Adapter",
"product_code": 100,
"revision": {
"major": 1,
"minor": 1
},
"status": 52,
"serial": "001414f7",
"product_name": "KV-5500",
"state": 3,
"interface": "eth0",
"port": 44818,
"vendor_id": "16f",
"updated_at": 1791912583,
"protocol": "CIP"
}
}
}
]
Scan for Assets (All Protocols)
GET {{edgeUrl}}/networkutil/discover/all/scan?ifce=eth0
Scan for Assets (All Protocols)
Runs a discovery scan on one interface with every protocol, waits for it to finish, and returns the full asset list, the same shape as List Discovered Assets (All Protocols). A scan took about 6 seconds on a 4.0.x test device; allow a generous client timeout on larger networks.
This is the route the Asset Discovery page of the LE web UI uses. It covers every protocol the discovery service knows (ARP, CIP, EtherNet/IP, Modbus TCP, Profinet, DNP3, ICCP, mDNS and others), where the older /nd/... and /networkutil/discover/cip/... routes in this folder each cover one mechanism. Both sets are served on 4.0.x.
Endpoint
GET {{edgeUrl}}/networkutil/discover/all/scan?ifce=eth0
Authentication
HTTP Basic Auth. Username is your API token, password is empty. Tokens are managed under System > Access Control > Tokens.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
ifce |
string |
Yes | Interface to scan, from List Discovery Interfaces. |
The service does not check ifce against the real interfaces: an unknown name still answers 200, and assets found by host-wide mechanisms such as mDNS are tagged with that name. Always take the value from List Discovery Interfaces.
Response
200 OK -- application/json. The asset list after the scan, including assets found by earlier scans.
Each entry is one asset, merged across every protocol that found it:
| Field | Type | Description |
|---|---|---|
ip_address |
string |
IP address of the asset. |
mac_address |
string |
MAC address. Empty when the asset was only seen through mDNS. |
vendor |
string |
Vendor, from the protocol response or the MAC OUI. |
product_name |
string |
Product name reported by the asset (CIP, Profinet) or its mDNS host name. |
product_type |
string |
Product type reported by the asset, when the protocol carries one. |
interface |
string |
Interface the asset was seen on. |
last_seen |
integer |
Unix time (seconds) the asset was last seen. |
protocols |
[string] |
Industrial protocols detected, e.g. CIP, EtherNet/IP, Modbus TCP, Profinet. |
protocols_data |
object |
Raw per-mechanism records keyed arp, cip, profinet, ... May be null. |
Errors
| HTTP status | When it happens |
|---|---|
400 Bad Request |
Missing or malformed query/body parameter. |
401 Unauthorized |
Missing or invalid credentials. |
403 Forbidden |
Token lacks permission for this operation. |
404 Not Found |
Target entity does not exist. |
5xx |
Service is unreachable, restarting, or internally errored. Inspect device logs under System > Support. |
Response
Status: 200 OK
[
{
"ip_address": "10.17.1.191",
"mac_address": "00:00:5e:00:53:01",
"vendor": "Hewlett Packard",
"product_name": "",
"product_type": "",
"interface": "eth0",
"last_seen": 1791333273,
"protocols": [],
"protocols_data": {}
},
{
"ip_address": "10.17.0.42",
"mac_address": "00:00:5e:00:53:02",
"vendor": "Keyence Corporation",
"product_name": "KV-5500",
"product_type": "Communications Adapter",
"interface": "eth0",
"last_seen": 1791912586,
"protocols": [
"EtherNet/IP",
"CIP"
],
"protocols_data": {
"arp": {
"ip_address": "10.17.0.42",
"interface": "",
"mac_address": "00:00:5e:00:53:02",
"vendor": "Keyence Corporation",
"plc_vendors": [
"EtherNet/IP"
],
"host_name": "",
"product_type": "",
"tcp_ports": [
44818
],
"udp_ports": null,
"id": "",
"updated_at": 1791912583,
"protocol": "ARP"
},
"cip": {
"encap_protocol_version": 1,
"ip_address": "10.17.0.42",
"vendor": "Keyence Corporation",
"product_type": "Communications Adapter",
"product_code": 100,
"revision": {
"major": 1,
"minor": 1
},
"status": 52,
"serial": "001414f7",
"product_name": "KV-5500",
"state": 3,
"interface": "eth0",
"port": 44818,
"vendor_id": "16f",
"updated_at": 1791912583,
"protocol": "CIP"
}
}
}
]
Ping a Host
GET {{edgeUrl}}/nd/utils/ping?address=127.0.0.1&count=2&timeout=3
Ping a Host
Sends ICMP echo requests from the edge device and streams each reply. Backs the "Test IP Address" network utility in the UI.
Endpoint
GET wss://{{edgeHost}}/nd/utils/ping?address=127.0.0.1&count=2&timeout=3
WebSocket. Open wss://{{edgeHost}}/nd/utils/ping?address=127.0.0.1&count=2&timeout=3 with a WebSocket client; a plain HTTP GET does not stream. After importing this item, convert it to a Postman WebSocket request.
Authentication
HTTP Basic Auth on the WebSocket upgrade request. Username is your API token, password is empty. A token in the query string is not accepted.
An Origin header is not required by this service.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
address |
string | Yes | IP address or host name to ping. |
count |
integer | No | Number of echo requests. Default 4. |
timeout |
integer | No | Overall timeout in seconds; the run ends with done when it expires. |
Messages
The example response lists the captured text frames, one JSON document per line.
state |
When | response fields |
|---|---|---|
start |
Right after the upgrade. | address, ip_address (resolved). |
on-progress |
Once per reply. | seq, rtt (nanoseconds), ttl, nbytes, addr, ip_addr. |
done |
After count replies or the timeout. |
packets_sent, packets_recv, packets_recv_duplicates, packet_loss (percent), min_rtt / max_rtt / avg_rtt / std_dev_rtt (nanoseconds). |
Every frame also carries logged_time. An unreachable host produces start and then done with packet_loss: 100. The server does not close the socket after done; close it yourself.
Errors
| Response | When it happens |
|---|---|
401 Unauthorized on the upgrade |
Missing or invalid Authorization header. |
500 on the upgrade, {"Name":"missing_field","Field":"address",...} |
address is missing. |
A single frame {"Msg":"init pinger: lookup <host> ...: no such host"} |
The host name does not resolve. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{"state":"start","logged_time":"2026-10-14T11:30:50.688239701-07:00","response":{"address":"127.0.0.1","ip_address":"127.0.0.1"}}
{"state":"on-progress","logged_time":"2026-10-14T11:30:50.688538833-07:00","response":{"rtt":120919,"ip_addr":"127.0.0.1","addr":"127.0.0.1","nbytes":32,"seq":0,"ttl":64}}
{"state":"on-progress","logged_time":"2026-10-14T11:30:51.689708137-07:00","response":{"rtt":165655,"ip_addr":"127.0.0.1","addr":"127.0.0.1","nbytes":32,"seq":1,"ttl":64}}
{"state":"done","logged_time":"2026-10-14T11:30:51.764767954-07:00","response":{"packets_recv":2,"packets_sent":2,"packets_recv_duplicates":0,"packet_loss":0,"ip_addr":"127.0.0.1","addr":"127.0.0.1","min_rtt":120919,"max_rtt":165655,"avg_rtt":143287,"std_dev_rtt":22368}}
Scan Ports
GET {{edgeUrl}}/nd/utils/ports-scan?address=127.0.0.1&begin-port=20&end-port=23
Scan Ports
Checks a range of TCP (or UDP) ports on a host from the edge device and streams one result per port. Backs the "Test Port" network utility in the UI.
Endpoint
GET wss://{{edgeHost}}/nd/utils/ports-scan?address=127.0.0.1&begin-port=20&end-port=23
WebSocket. Open wss://{{edgeHost}}/nd/utils/ports-scan?address=127.0.0.1&begin-port=20&end-port=23 with a WebSocket client; a plain HTTP GET does not stream. After importing this item, convert it to a Postman WebSocket request.
Authentication
HTTP Basic Auth on the WebSocket upgrade request. Username is your API token, password is empty. A token in the query string is not accepted.
An Origin header is not required by this service.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
address |
string | Yes | IP address or host name. |
begin-port |
integer | Yes | First port. |
end-port |
integer | Yes | Last port, inclusive. The UI sends the same value as begin-port and so tests a single port. |
is-udp |
boolean | No | true scans UDP instead of TCP. |
timeout |
integer | No | Per-check timeout, passed through by the UI. |
Messages
One frame per port, in order. The example response lists the captured text frames, one JSON document per line.
| Field | Type | Description |
|---|---|---|
port |
integer | Port checked. |
is_open |
boolean | Whether the port accepted the connection. |
The server does not close the socket after the last port; close it yourself. With begin-port greater than end-port the server did not answer the upgrade at all on a 4.0.x test device.
Errors
| Response | When it happens |
|---|---|
401 Unauthorized on the upgrade |
Missing or invalid Authorization header. |
500 on the upgrade, {"Name":"missing_field",...} |
address, begin-port or end-port is missing or not an integer. |
TLS note: edge devices use a self-signed certificate by default. Either install the device CA in your client trust store or disable certificate verification when calling this endpoint directly.
Response
Status: 200 OK
{"port":20,"is_open":false}
{"port":21,"is_open":true}
{"port":22,"is_open":true}
{"port":23,"is_open":false}