get_dns_chain
const url = 'https://example.com/api/v1/nodes/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/dns-chain';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/dns-chain \ --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 current resolution chain and how long it has held
The node’s current resolution chain, plus how long it has held.
object
One observed resolution chain — the artifact of a DNS check.
Produced by the transport, carried on PollResult.dns_chain, persisted to PostgreSQL. Never
a TSDB label (ADR-011); it is the same tier as the interface inventory and sys_descr.
object
Authoritative “no such name” (RCODE 3).
object
NOERROR, but no record of the requested type and no CNAME to follow.
object
The resolver failed to answer the question (RCODE 2).
object
The resolver refused to answer (RCODE 5).
object
Any other response code, kept numeric so a new RCODE is never lost.
object
The raw DNS response code.
The resolver did not answer within the check’s budget.
object
A CNAME pointed at a name already visited in this chain.
object
The name the loop closed on.
The chain was longer than the configured max_depth.
object
The limit that was hit.
The response could not be decoded or did not match the question asked.
object
The hops in walk order. Order is significant and is never sorted.
One hop of a resolution chain: the name asked about and the answers that came back for it.
object
The answers whose owner is name, canonicalized (sorted, deduped, capped).
One answer record plus its TTL.
The TTL is display-only: it counts down between polls, so including it in the content key would make every single poll register as a change.
object
A CNAME alias target (normalized: lowercase, no trailing dot).
object
The name this hop is an alias for.
An IPv4 address record.
object
The resolved IPv4 address.
An IPv6 address record.
object
The resolved IPv6 address.
Time-to-live as reported by the resolver, in seconds.
The name queried at this hop (normalized).
The name originally asked for (normalized).
The record type asked for.
Total wall-clock milliseconds for the walk. Not part of the content key.
Where we asked, rendered for display (e.g. 10.0.0.53:53 or system). Provenance, not
content: swapping resolvers while the answer stays the same is not a change.
Example
{ "chain": { "failure": { "kind": "nx_domain" }, "hops": [ { "answers": [ { "record": { "kind": "cname" } } ] } ], "record_type": "A" }, "failure_kind": "nx_domain"}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 View
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 resolution has been recorded for the node
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" }}Inventory storage is unavailable (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" }}