Skip to content

Read a component's per-endpoint reachability

GET
/components/{name}/reachability
curl --request GET \
--url https://example.com/api/v1/components/example/reachability

Composes, per endpoint, the latest reachability verdict, the probe-layer signals that compose it, and the recent verdict transitions for the availability strip. Gated by component:read; an out-of-scope component is a non-disclosing 404.

name
required

The component’s name, or a dotted address (e.g. boi.17c.415a.$comp.display-1)

string

The component’s name, or a dotted address (e.g. boi.17c.415a.$comp.display-1)

OK

Media type application/json
object
$schema

A URL to the JSON Schema for this object.

string format: uri
component
required
string
endpoints
required
Array<object> | null
object
address

The probed address (target[:port]) from the endpoint params

string
authenticated

The auth rung (the probe’s credential was accepted, or a held session’s login passed), present only when a credential was tried

object
ts
required

When the verdict last changed: one is stored only on a transition, so an endpoint’s freshness is last_seen, not this

string format: date-time
value
required

The latest stored verdict value (up/down)

string
endpoint
required

The endpoint’s derived name (its transport)

string
history
required

The recent verdict transitions, oldest first, for the availability strip

Array<object> | null
object
ts
required
string format: date-time
value
required
string
id
required

The endpoint’s uuid, the address its custom methods take (POST /endpoints/{endpoint}:retry)

string
label

The friendly string an operator reads; absent when unset, and the row then reads the derived name verbatim

string
last_seen

When the endpoint last delivered a batch, by the server’s clock and to within a few seconds, whatever it carried (any lane, any series, an unchanged value); absent until one lands

string format: date-time
layers
required

The per-layer probe signals that compose the verdict

Array<object> | null
object
check
required

The property_type key of the primary signal

string
detail

A human timing detail (rtt / connect time), when present

string
layer
required

The probe layer word (ping, port, or request: a udp endpoint’s request or an snmp endpoint’s get answered)

string
ts
required

When the signal was observed

string format: date-time
value
required

The latest signal value (1 = reachable/open, 0 = not)

number format: double
node

The node that probes this endpoint

string
rejection

The gate a terminal refusal holds on the endpoint, its rung, class and reason, whether or not the endpoint holds a session (a reachability probe’s refusal gates it too); absent when none holds

object
class
required

The refusal’s class: auth, host-key, certificate or protocol

string
offered_key

A refusal of a changed key only: the SHA256 fingerprint of the key the component offered instead. Trusting it is POST /endpoints/{endpoint}:retry with this exact value as host_key (a tls or https endpoint also takes it as certificate); while the refusal holds, any other value is refused (409)

string
pinned_key

A refusal of a changed key only (class host-key, or certificate for a pinned tls key): the SHA256 fingerprint of the key the endpoint pins, as the node refused against it. Present with offered_key or not at all

string
reason

Why the gate holds (endpoint-rejection-reason): the class and the component’s own text (auth: the agent answered authorizationError for the community), scrubbed by the node of anything it sent. Published beside the gate by whatever the node was connecting with, its reachability probe, a poll or a held session, so an endpoint holding no session still says why it was refused. Absent when the node recorded none (a gate published before it did). Cut to 500 characters; the property’s series keeps the whole

string
rung
required

The ladder rung the refusal holds: responsive for a host key, certificate or protocol refusal, authenticated for a credential. Nothing at or above it is attempted until the connection fingerprint moves

string
Allowed values: reachable responsive authenticated
ts
required

When the node last published the gate: a retry that lifts it and a refusal that sets it again each move it

string format: date-time
responsive

The layer-7 responds rung (the protocol itself answered), when a probe has climbed it

object
ts
required

When the verdict last changed: one is stored only on a transition, so an endpoint’s freshness is last_seen, not this

string format: date-time
value
required

The latest stored verdict value (up/down)

string
session

The endpoint’s held session, while it is configured to hold one (a standing listen task, or a driver declaring a session): its latest state, when it changed, and why

object
reason

Why the session is in its state (session-reason), the reason of its latest transition; a rejected session’s is its class and the component’s own text (auth: auth rejected), scrubbed by the node of anything it sent. Cut to 500 characters; the property’s series keeps the whole

string
state
required

The held session’s latest state (session-state): establishing, up, recovering, down, or rejected (a refusal retrying cannot fix; the node dials no more until the endpoint’s connection fingerprint moves)

string
Allowed values: establishing up recovering down rejected
ts
required

When the session last changed state: a state is stored only on a transition, so a session is judged by the endpoint’s last_seen, not by this

string format: date-time
tls

A tls or https endpoint’s handshake and certificate: its verification mode, pinned key, handshake time, expiry and days left; absent on every other transport

object
days_left

Days from the latest probe to that not-after (tls-certificate-days-left), negative once expired: the number a threshold rule reads. Absent when expires is

number format: double
expires

The not-after of the certificate the latest probe accepted (tls-certificate-expiry); absent until one is accepted, and while a certificate gate holds (the probe then connects only, so the value would be the last accepted certificate’s, not the one offered now)

string format: date-time
handshake_ms

The latest probe’s handshake time in milliseconds (tls-handshake-time); absent until the component answers one

number format: double
key

The public key the endpoint pins (tls-certificate), a SHA256 fingerprint; served in pin mode alone, and absent before first use

string
mode
required

How the endpoint’s connections judge the certificate (its driver’s tls-mode input, verify when none is set): verify (against the node’s system roots, the server name the host), pin (the public key trusted on first use, any other refused) or skip (nothing checked, the operator’s explicit choice)

string
transport
required

The transport (icmp, tcp, …)

string
verdict
required

The latest reachability verdict, or null if none yet

object
ts
required

When the verdict last changed: one is stored only on a transition, so an endpoint’s freshness is last_seen, not this

string format: date-time
value
required

The latest stored verdict value (up/down)

string
Example
{
"$schema": "/api/v1/schemas/ReachabilityOutputBody.json",
"endpoints": [
{
"rejection": {
"rung": "reachable"
},
"session": {
"state": "establishing"
}
}
]
}

Error

Media type application/problem+json
object
$schema

A URL to the JSON Schema for this object.

string format: uri
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object> | null
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank
Example
{
"$schema": "/api/v1/schemas/ErrorModel.json",
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}