get_subnet_overlaps
const url = 'https://example.com/api/v1/subnet-overlaps';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/subnet-overlaps \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”Address ranges that more than one site carries — the same range at two sites, or one site’s range inside another’s — with the exclusion rules and what each excludes. A caller scoped to some folders is told how many sites it cannot see, never which
What Nodes ▸ Subnet overlaps shows.
object
How many overlaps the caller can see, by status.
object
Devices the caller may see.
Of those, how many address lists were cut at the per-device cap.
Of those, how many have reported their interface addresses at all. A device with no SNMP,
or whose address walk has never succeeded, contributes nothing — so no overlaps is not the
same as none unless this equals nodes_total.
Open first, then intentional, then excluded; inside each, same address, nested, then same
range, and more sites first. At most 2,000 — counts says how many there are.
One range more than one site carries.
object
What excluded it. Empty unless status is excluded.
A /30, /31, /126 or /127 carried by exactly two devices at two addresses: the link
between two sites. Built in; no rule turns it off.
object
An operator’s rule (or the built-in CGNAT one) matched every place that made it an overlap.
object
Sites the caller may not see. Their names and devices are withheld (ADR-014).
Every place is a port whose name or description carries a WAN word (word).
object
Every place is a port whose name or description carries a redundancy word (word).
object
The same range, a different address at every site, one device per site, at three or more sites: the shape of a line the sites share.
object
Ten or more sites carry it: the shape of a site template.
object
For nested: the ranges inside it at other sites, at most [INNER_MAX].
Stable identity, used to acknowledge it: same:<range> or nested:<outer range>. The same
range keeps its key whether an address is shared or not, so an acknowledgement survives
that changing. within:<range> when outer_withheld — a scoped caller cannot acknowledge.
How two sites’ ranges meet.
How many distinct devices carry it (visible ones only, after the caller’s scope).
The acknowledgement’s note, when status is intentional.
For nested: the outer range is carried only at sites the caller may not see, so it is
not named (ADR-014).
Up to [PLACES_MAX] places, ordered by site, device, then port.
One place a range was seen: a device, the port, and the address with its length.
object
The address as configured, address/length.
Filled by the caller.
The site: the nearest folder of type Site above the device, else its own folder. null ⇒
the tree root.
Filled by the caller.
The range it forms, network/length.
For same_address: the addresses configured at more than one site.
How many distinct sites carry it (a scoped caller’s hidden ones included).
Where an overlap stands after the exclusions and acknowledgements are applied.
The range; for nested, the outer one — or, when outer_withheld, the narrowest range
covering the caller’s own inner ranges.
Every exclusion rule, built-in first.
One exclusion rule.
object
Built in: can be switched off, not edited or deleted.
How many overlaps this rule currently excludes, across the deployment.
Places on a port whose name or description carries this as whole words (case-insensitive;
a word may be followed by digits, so dialer matches Dialer1 and ha does not match
Port-channel1). null ⇒ any port.
Places inside this range match. null ⇒ any range.
Why an operator says a range is expected to repeat. Stored in subnet_overlap_rules.reason.
Distinct ranges compared, across the whole deployment.
Example
{ "overlaps": [ { "excluded_by": [ { "kind": "link" } ], "hint": { "kind": "wan" }, "kind": "same_address", "status": "open" } ], "rules": [ { "reason": "wan" } ]}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 the View permission
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" }}This deployment has no write side (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" }}