get_node
const url = 'https://example.com/api/v1/nodes/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0';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 \ --header 'Authorization: Bearer <token>'Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Node id
Responses
Section titled “Responses”The node’s configuration, bindings and resolved kind
One node’s configuration detail, including its bindings (profile/credential/parent) so the node-detail page can show and edit them. Live mode only (PostgreSQL inventory).
object
DNS-monitor config when this node carries a dns_checks row; null otherwise.
object
Maximum CNAME hops before giving up (default 8).
The name to resolve, e.g. horryworks.net. Stored normalized (lowercase, no trailing dot).
Which record type the chain must reach (default A).
Recursive resolver to query. None ⇒ the poller container’s system resolver.
Resolver port (default 53).
Total budget for the whole chain walk, in milliseconds (default 3000).
The group this node belongs to; 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 — the kind the scheduler actually polls it as, resolved by the one
precedence in [NodeKind::resolve].
The three configs below are the raw rows, and a node is not guaranteed to carry only one: the API edge refuses a second, but rows predating that guard exist. Reading the configs and concluding a kind from whichever is non-null is how the node page came to show a URL-monitor health card for a node the poller was treating as a Meraki device. Branch on this instead.
Cisco Meraki binding when this node carries a meraki_devices row; null otherwise.
object
Device model (e.g. “MX67”) — display only.
The Meraki networkId the device belongs to.
The Meraki organizationId (the API path segment) — denormalised for display.
Internal handle of the owning meraki_orgs row.
Meraki productType (appliance/switch/wireless/…).
The device serial — the join key returned by the org-bulk endpoints.
The node’s own poll-pool (ADR-009/020); null ⇒ it inherits from its folder, else the
default pool. Deliberately the raw stored value, not the effective one, so the edit form can
tell an explicit assignment from an inherited one — the effective pool (and which poller
currently holds the node) comes from GET /nodes/:id/assignment.
URL-monitor config when this node carries a url_checks row; null otherwise.
object
How many bytes of the response body to read (default 65536, range 1024–1048576). Applies to
both body_match and json_extract; the body is not read at all unless one of them is set.
Follow 3xx redirects (default true).
Values to lift out of a JSON response body and record as operator-named metrics.
Each rule adds one gauge per poll. A rule whose path is missing, or whose value is not a number, records nothing for that poll rather than a zero.
One number to lift out of a JSON response body and record as a metric.
object
The metric name to record the value under, e.g. queue_depth. Must match
[A-Za-z_:][A-Za-z0-9_:]* and must not be one of the names the monitor already emits.
Dot-separated path to the value, e.g. data.queue.depth or items.0.value. Array elements
are indexed by number; items[0].value is accepted and means the same thing.
Not a JSONPath expression: the path names exactly one location, so the rule always produces either one number or nothing.
Request method (default GET).
Per-request timeout, in milliseconds (default 5000).
Full URL to probe, e.g. https://api.example.com/health.
Verify the TLS certificate chain (default true; never silently disabled — security.md).
Descriptive maker/model, editable from the node detail.
Example
{ "dns_check": { "record_type": "A" }, "kind": "meraki", "url_check": { "body_match": { "mode": "contains" }, "expected_status": { "kind": "two_xx" }, "method": "GET" }}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" }}No such node, or this deployment has no inventory
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" }}