Skip to content

One folder level of the network map: the folder's own linked nodes, each subfolder as one box with its subtree's counts, links between the same two things bundled into one edge, and a stub for every place links leave the level.

GET
/api/v1/topology/map
curl --request GET \
--url https://example.com/api/v1/topology/map \
--header 'Authorization: Bearer <token>'

Omit group for the whole network. A group-scoped caller sees their visible folders, with the roots of their scope directly under the whole network, and only links whose both ends are visible to them. A level with more than node_limit linked nodes or edge_limit edges answers overflow: true with its boxes and no nodes or edges.

A Site folder, and every folder beneath one, is drawn flat (flattened: true): its subfolders are not boxes, every node in its subtree is drawn and carries the folders down to the one it is filed in (folder_path). A link to another folder of the same site leaves as a stub for the far node itself, since the site draws it. A flat drawing over the bounds falls back to boxes.

group
string | null format: uuid

The folder to draw. Omit for the whole network.

One level of the network map

Media typeapplication/json

One folder level of the network map.

object
breadcrumbs
required

Its ancestors, outermost first (the level itself is not included).

Array<object>

A folder named on the map: the level itself or one of its ancestors.

object
id
required
string format: uuid
name
required
string
derived_at

When the connectivity graph was last derived (RFC 3339), or null before the first run.

string | null
direct_node_count
required

Every node directly in this folder, linked or not — on a flattened level, every node in the subtree.

integer format: int64
edge_count
required

How many bundled edges the level has (also when overflow emptied edges).

integer format: int64
edge_limit
required

The most edges a level draws.

integer format: int64
edges
required
Array<object>

Every link between the same two things on this level, drawn as one line.

object
a
required

One end of a map edge. id is a node id for node, a folder id for folder, and the stub’s own id for external.

object
id
required
string format: uuid
kind
required

What one end of a map edge is: a node on this level, a subfolder’s box, or a stub for something outside the level.

string
Allowed values: node folder external
b
required

One end of a map edge. id is a node id for node, a folder id for folder, and the stub’s own id for external.

object
id
required
string format: uuid
kind
required

What one end of a map edge is: a node on this level, a subfolder’s box, or a stub for something outside the level.

string
Allowed values: node folder external
count
required

How many links the bundle holds (members lists at most 50).

integer format: int64
id
required

Stable id, built from the two ends.

string
members
required

The links, strongest evidence first.

Array<object>

One link inside a bundled edge, oriented so a_node sits at the edge’s a end.

object
a_if_name
string | null
a_node
required
string format: uuid
b_if_name
string | null
b_node
required
string format: uuid
link_id
required
integer format: int64
source
required

The strongest evidence behind this link.

string
Allowed values: manual lldp cdp ospf route bgp l3_subnet
subnet

The subnet behind a shared-subnet link.

string | null
source
required

The strongest of sources.

string
Allowed values: manual lldp cdp ospf route bgp l3_subnet
sources
required

Every kind of evidence behind any member.

Array<string>
Allowed values: manual lldp cdp ospf route bgp l3_subnet
flattened
required

The level is a Site folder or lies beneath one, so its subfolders are not boxes: every node in the subtree is drawn, tagged with its folder_path. false when the flat drawing would exceed the bounds, in which case the level falls back to boxes.

boolean
folders
required

Its subfolders, each drawn as a box (empty on a flattened level).

Array<object>

A subfolder drawn as one box, with its whole subtree’s tally (visible nodes only).

object
counts
required

Those nodes, by state.

object
critical
required
integer format: int64
maintenance
required
integer format: int64
ok
required
integer format: int64
unknown
required
integer format: int64
unreachable
required
integer format: int64
warning
required
integer format: int64
group_type
required

The folder’s type key (site, region, …).

string
id
required
string format: uuid
name
required
string
node_count
required

How many nodes the subtree holds.

integer format: int64
group
One of:
null
isolated_count
required

Direct nodes with no link on this level: counted, not drawn.

integer format: int64
linked_node_count
required

Of those, how many have a link on this level.

integer format: int64
node_limit
required

The most linked nodes a level draws.

integer format: int64
nodes
required

Its own nodes that have a link on this level — on a flattened level, every such node in the subtree.

Array<object>

A node drawn on the level that has at least one link there. On an ordinary level it sits directly in the level’s folder; on a flattened level it may sit anywhere in the subtree.

object
access_point
required

The node’s role is access_point — one imported from its wireless controller, a Meraki MR, or a device whose profile is classified Wireless AP. The map draws it as an access-point symbol under the device it hangs off.

boolean
folder_path
required

On a flattened level, the folders between the level and the node, outermost first, ending with the one the node is filed in; empty when it sits directly in the level’s own folder (always empty on an ordinary level).

Array<object>

A folder named on the map: the level itself or one of its ancestors.

object
id
required
string format: uuid
name
required
string
id
required
string format: uuid
name
required
string
role
required

What the node does in the network, which decides its row on the map (ADR-191 Inc.6).

string
Allowed values: edge l3_switch l2_switch access_point other
role_reason
required

Why it was given that role.

string
Allowed values: wireless_ap meraki_product profile_category default_route routing_adjacency subnets default
root_cause

Upstream node blamed for this node’s alert (dependency suppression), if any.

string | null format: uuid
state
required

The current state of a monitored node or check.

string
Allowed values: ok warning critical unknown unreachable maintenance
subnet_count

How many subnets the node has an address in, from its last address walk; null when no walk has been recorded.

integer | null format: int32
overflow
required

The level is too large to draw: nodes, stubs and edges are empty, the boxes remain.

boolean
stubs
required

The places links leave the level for.

Array<object>

Where links leave the level: a node or a folder outside it.

object
id
required

The node or folder the stub stands for.

string format: uuid
kind
required

What a stub stands for: one node, or a folder holding the far ends.

string
Allowed values: node folder
level_group

The first level on which both ends are visible; open it to see where the links go. null is the whole network.

string | null format: uuid
name
required
string
subfolder_count
required

How many subfolders sit directly in it — on a flattened level too, where none is a box.

integer format: int64
summary
required

What that run observed but did not turn into a link — the same counts /topology/links carries, for the whole network rather than this level. All zero before the first run.

object
ambiguous_mgmt_addrs

Adjacency rows whose management address matched more than one node, so no link could be attributed without guessing which.

integer format: int32
bgp_links

Links produced from a BGP peering session.

integer format: int32
bgp_peers_not_adjacent

BGP peers that matched a monitored node but sit on no network the reporting node terminates, so the session is not evidence of a link between them. The normal reading is iBGP between loopbacks; a number that stays at zero on a network running iBGP means the reporting node’s interface addresses have not been observed.

integer format: int32
cdp_links

Links produced from a CDP adjacency.

integer format: int32
duplicate_addresses

Addresses claimed by two or more nodes — a shared virtual IP, or a duplicate-address misconfiguration.

integer format: int32
l3_links

Links whose strongest evidence is shared-subnet membership.

integer format: int32
lldp_links

Links produced from an LLDP adjacency.

integer format: int32
ospf_links

Links produced from an OSPF neighbour relationship.

integer format: int32
oversized_segments

Segments with more than two members where no member could be identified as routing for the others, so no link was drawn.

integer format: int32
route_links

Links produced from a connected host route — the point-to-point links that share no subnet.

integer format: int32
subnet_prefix_mismatch

Addresses sharing network bits but disagreeing on prefix length.

integer format: int32
truncated_nodes

Nodes whose observation hit a per-node cap, so what is recorded for them is incomplete.

integer format: int32
unmatched_cdp_rows

CDP rows that matched no monitored node, by the same two rules as the LLDP ones.

integer format: int32
unmatched_lldp_rows

LLDP rows that matched no monitored node: by management address, or — for a row with none — by a MAC chassis id a Meraki organization lists for exactly one node.

integer format: int32
unmatched_routing_peers

Routing adjacencies whose peer address matched no monitored node.

integer format: int32
Example
{
"edges": [
{
"a": {
"kind": "node"
},
"b": {
"kind": "node"
},
"members": [
{
"source": "manual"
}
],
"source": "manual",
"sources": [
"manual"
]
}
],
"nodes": [
{
"role": "edge",
"role_reason": "wireless_ap",
"state": "ok"
}
],
"stubs": [
{
"kind": "node"
}
]
}

No valid bearer token

Media typeapplication/json

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
error
required
object
code
required

Stable machine-readable code. Clients branch on this, never on the message.

string
message
required

Operator-facing sentence. Safe to display; never carries an internal error’s own text.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example"
}
}

Role lacks the view permission

Media typeapplication/json

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
error
required
object
code
required

Stable machine-readable code. Clients branch on this, never on the message.

string
message
required

Operator-facing sentence. Safe to display; never carries an internal error’s own text.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example"
}
}

No folder with that id that the caller can see

Media typeapplication/json

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
error
required
object
code
required

Stable machine-readable code. Clients branch on this, never on the message.

string
message
required

Operator-facing sentence. Safe to display; never carries an internal error’s own text.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example"
}
}

Skeleton mode has no inventory to build the map from

Media typeapplication/json

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
error
required
object
code
required

Stable machine-readable code. Clients branch on this, never on the message.

string
message
required

Operator-facing sentence. Safe to display; never carries an internal error’s own text.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example"
}
}