A group's direct members for the lazy inventory tree: the nodes whose `group_id` is exactly `group` (or the ungrouped bucket), in tree order, capped. Loaded on demand when a group is expanded, so the initial page never pulls the whole fleet — it fetches the group skeleton plus per-group counts (`/fleet/group-summary`) and streams members per open group.
const url = 'https://example.com/api/v1/nodes/by-group';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/by-group \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”The group’s direct members in tree order, flagged if capped
One group’s direct members. Not keyset-paged — a folder is loaded whole when it is expanded — so it reports truncation instead of offering a cursor.
object
One inventory row (mirrors the WebUI NodeSummary).
object
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.
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": "meraki", "state": "ok" } ]}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" }}