Recent discovered (unclassified) devices across in-memory scans — the dashboard "discovery queue".
const url = 'https://example.com/api/v1/discovery/candidates';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/discovery/candidates \ --header 'Authorization: Bearer <token>'View, unlike the rest of this module, because it reports what has been seen rather than
causing anything to happen. Empty in skeleton mode: with no discovery runner there are genuinely
no candidates, which is an answer rather than an outage.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Responses
Section titled “Responses”Recent unclassified devices; empty in skeleton mode
One device a scan found, with a suggested profile for the operator to confirm on import.
object
The stored credential that answered SNMP, by reference (never the value) — the UI preselects it on import so the working secret is bound automatically.
Suggested device profile, resolved server-side via the classification rules (by sysObjectID prefix, else sysDescr regex, else “Generic SNMP” when SNMP answered). An id, not a name, so the UI binds it robustly even if the profile was renamed.
sysObjectID (dotted) if it answered SNMP — the authoritative device-type signal the
classifier prefers. Shown to the operator and useful for authoring rules.
Maker / model best-effort parsed from sysDescr (editable on import) — pre-fills the node’s descriptive metadata so the imported node displays “name (addr) (vendor) (model)”.
Examplegenerated
[ { "address": "example", "matched_credential_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "model": "example", "reachable": true, "suggested_profile_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "sysdescr": "example", "sysname": "example", "sysobjectid": "example", "vendor": "example" }]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 read 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" }}