The caller's pinned folders and nodes, narrowed to what the caller may see.
const url = 'https://example.com/api/v1/pins';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/pins \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”The caller’s pinned folders and nodes, narrowed to what the caller may see
The caller’s pins, as the inventory tree draws them.
object
Pinned folders the caller may see. The tree shows each one with everything beneath it.
Pinned nodes the caller may see, as full inventory rows. A pinned node usually sits in a folder the tree has not loaded, so its row cannot come from anywhere else.
One inventory row (mirrors the WebUI NodeSummary).
object
The node’s address. 0.0.0.0 (or ::) means the node has none — a Meraki device the
Dashboard reports no LAN IP for, such as a mesh repeater (ADR-175). The column cannot be
empty, so that is how “no address” is stored; it is not an address anything can reach.
The group this node belongs to (for the inventory tree); null ⇒ ungrouped.
Stable identifier for a monitored node.
A UUID, not a name or address — both of which can change over a node’s life.
What this node is, and therefore how it is polled — the value that distinguishes a URL or DNS monitor from an ordinary ICMP/SNMP device in the inventory.
Resolved by NodeKind::resolve, the same function GET /nodes/{id} and the scheduler ask,
so a list row can never disagree with the detail page it opens.
A Meraki node’s product type as the Dashboard names it — wireless (an MR access point),
switch, appliance, … — and absent on every other node. What the list’s “AP” badge is
read from (ADR-168 decision 11): an MR stays kind: meraki, so the kind alone cannot say it is
an access point. The detail page reads the same value from meraki_device.product_type.
true on a Meraki access point that is a mesh repeater: it has no wired uplink, so the
Dashboard reports no LAN IP for it and its address is 0.0.0.0 (ADR-175). Absent
otherwise. What the list’s “Repeater” badge is read from.
The node’s own poll-pool; null ⇒ inherited from its folder, else the default pool.
The tree’s pool picker edits exactly this value, so it is what marks the active choice —
the effective pool (and the poller holding the node) comes from /nodes/:id/assignment.
Manual order within the group (the tree sorts members by this, then by name).
The current state of a monitored node or check.
Descriptive maker/model for the “name (addr) (vendor) (model)” display.
Example
{ "nodes": [ { "kind": "wireless_ap", "state": "ok" } ]}No valid bearer token — pins are keyed by account, so this stays closed in public-dashboard 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" }}An API token names no person, so it has no pins
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" }}Skeleton mode has no write side
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" }}