The node's current CDP/LLDP neighbours.
const url = 'https://example.com/api/v1/nodes/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/neighbors';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/api/v1/nodes/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/neighbors \ --header 'Authorization: Bearer <token>'404 means no walk has recorded anything for this node yet — the node may not be an SNMP
device, may not speak either protocol, or may simply not have been walked since collection was
enabled. It is distinct from a recorded empty set, which is a real answer meaning the device
reports no neighbours.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Node id
Responses
Section titled “Responses”The node’s current adjacency and how long it has held
A node’s current adjacency and how long it has held.
object
When this exact set was first seen (RFC 3339).
When it was last confirmed unchanged (RFC 3339).
The adjacencies the node last reported.
object
The adjacencies, canonically ordered.
One observed adjacency.
The first three string fields are the identity; everything below them is payload. Payload changes still append a history row (a peer that was reimaged is a real change on that port), but they never split one link into two records.
object
What the peer says it is, normalized across both protocols.
The local ifIndex, when the protocol genuinely supplies one. CDP indexes its cache by
ifIndex so this is exact; LLDP’s lldpLocPortNum is an arbitrary local index that only
often equals ifIndex, so LLDP records leave this None rather than guess.
The local port, as the device names it: LLDP renders lldpLocPortId by its subtype, CDP
uses cdpInterfaceName. Falls back to port <n> / ifindex <n> when the naming table has
no row, so the record still has an identity rather than being dropped.
Which protocol reported this.
The peer’s chassis id, rendered by subtype: LLDP lldpRemChassisId, CDP cdpCacheDeviceId.
The peer’s management address, from cdpCacheAddress for CDP and from lldpRemManAddrTable
for LLDP. None when the peer advertised none.
cdpCachePlatform — the peer’s hardware/software platform string (CDP only).
The peer’s port id, rendered by subtype: LLDP lldpRemPortId, CDP cdpCacheDevicePort.
lldpRemPortDesc — the peer’s own description of its port.
lldpRemSysDesc.
lldpRemSysName. CDP has no separate system name (its device id serves both).
Whether [MAX_NEIGHBORS_PER_NODE] was hit and rows were dropped. Reported rather than
silently swallowed — a truncated view that looks complete is worse than no view.
Example
{ "neighbors": { "neighbors": [ { "capabilities": [ "router" ], "proto": "lldp" } ] }}No valid bearer token
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}Role lacks View
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}No adjacency has been recorded for the node
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}Inventory storage is unavailable (skeleton mode)
The ADR-019 envelope every failure renders as. pub(crate) and schema-bearing so the OpenAPI
document can name one error shape for every endpoint (ADR-035) instead of leaving 4xx/5xx bodies
undescribed — a client that has to guess the failure shape ends up parsing the success shape and
reading undefined.
object
object
Stable machine-readable code. Clients branch on this, never on the message.
Operator-facing sentence. Safe to display; never carries an internal error’s own text.
Examplegenerated
{ "error": { "code": "example", "message": "example" }}