Demos Network OracleDNOconnecting

API

Every route the public site serves, read-only, served with CORS for any origin: JSON unless noted, and the pages are HTML. DNO reads three public Demos seeds and publishes whether their reported heights agree. When fewer than two give their own height, validators that answer as listed stand in for the missing one.

Oracle wallet: 0xbdb3…2a45 · v7.2 · API 1.2. On-chain publication of DNO's own posts is currently disabled; the public reading is never posted. Observation continues independently, and that says nothing by itself about the Demos network.

On this page
  1. The reading
  2. Peer-listed identities
  3. Pages
  4. Integration
  5. Internal only

The reading

GET /organism
Default context. The compact public reading: 17 required fields plus the additive 1.1 fields (observed_at, data_quality_reason, height_last_advanced_at, height_static_seconds, active_public_conditions, agreement_detail, last_24h.critical_public_incidents_in_window, last_24h.chain_movement.blocks_advanced) and the additive 1.2 fields (witnesses: what the reading rests on, as counts; height_standstill_after_seconds: after this long without a new height a reading that would be stable is degraded). No fleet data. ETag / 304 between observations.
GET /organism/schema
The JSON Schema contract: stability policy, enums, changelog.
GET /health
The same labels and reasons without the summary sentence, and their parts: publicNodes (each seed, with height_source), witnesses, signals, validator_growth (seed counts and peer-listed identities; online and synced are listed in mixed_fields; first_counted has the identities first counted in the last 24 h, 7 days and 30 days, null for a window the count does not cover or that a gap in the count crosses), attestation (DAHR attempted on the cross-check RPCs, not on the seeds whose answers enter status: available, last_count, last_ok_at), on_chain_publication (currently "disabled"), on_chain_validators (the on-chain validators table as the public seeds list it: counts by status and minValidatorStake, each only when at least two seeds return the same answer, and how many ACTIVE keys DNO first counted in the last 24 h, 7 days and 30 days) and validator_watch (what DNO saw when it dialed the address each ACTIVE validator published on chain: counts only, never an address). While two seeds give their own height neither of the last two enters status; when fewer do, validators that answered as listed stand in, and witnesses says so. Neither object is in /organism.
GET /incidents
Public records. ?status=active|resolved, ?limit=1–500. Condition records carry kind=condition and are counted in active_public_conditions; /organism active_incidents does not count them. A record may carry note, a dated note DNO added later; the stored record is never edited.

Peer-listed identities

GET /catalog
Identities listed on the public seeds' peerlists, kept after two public peerlists have listed them (one peerlist brings at most 50 new identities into that count per crawl): first recorded (first_seen), last listed, and what the peerlists reported in the latest crawl. ?q= filters by the end of a display name or a truncated key; ?listed=now|not by whether the latest crawl listed the row. ETag / 304 between observations. Never dialed.
GET /catalog/lookup?key=0x…
Exact check of one full key against the catalog and the configured seeds. Returns the sanitized row only, never a key. on_chain says where that key stands on the agreed validators list (ACTIVE, UNSTAKING, other or not_listed), only while two seeds return the same list, read in the last 300 s.
GET /peers
The latest crawl only: truncated identities with the peer-reported height, online flag, sync status and how many public peerlists listed them. Connections are never exposed.

Pages

GET /
The homepage: the reading, the seeds, the on-chain validators and the peer-listed identities. HTML; the reading is also written into the page for readers without JavaScript.
GET /methodology
How each value is derived, and where the observation stops.
GET /about-demos
Validators, shards, node health and DAHR, as the Demos docs describe them, and what DNO sees of each.
GET /sources
What DNO reads, and which of it enters status.
GET /agent
How software agents consume the API: fields, polling, examples.
GET /reference
The fixnet probe and the peer-listed identities, in two tables.
GET /timeline
Public incidents, condition records and release events.
GET /criteria
The definitions of DNO's observation criteria, published as definitions only: applied to no named participant.
GET /commerce
Whether the public endpoints of the attestation authorities named by the Demos agent commerce protocol answered DNO's probe.
GET /commerce/methodology
How those endpoints are probed, and what the result says and does not say.

Integration

GET /criteria.json
The criteria definitions of /criteria, as JSON.
GET /commerce/observations
The observations of /commerce, as JSON.
GET /federate
Prometheus text, not JSON: the oracle version, plus cross-check RPC reachability and probe latency observed from this vantage, under neutral names.
GET /metrics
The same text as /federate.
GET /badge
An SVG image, not JSON, of the current status word.
GET /version
Running agent version and the version most seeds report.
GET /sentinel
Whether DNO's own alert process completed a check in the last 15 minutes: status ok or unknown, and last_check. No counts.
GET /consensus
An experiment that would collect other observers' reports. It is switched off on this server and answers {"error":"Consensus not initialized"}. Not part of the reading.

Public observation interval: 20 s.

Internal only

Fleet views, /dashboard, /history and /history/export, are served on DNO's internal listener only (INTERNAL_PORT). The public site answers 404 for them.