API
The public JSON feeds behind this dashboard. How the numbers are produced is documented in the methodology.
Base URL & access
All endpoints are served from:
https://dgbinsights-feed.emeryeps.workers.dev
No authentication, no API key, no rate-limit registration. Responses are JSON only, sent with Access-Control-Allow-Origin: *, so they can be fetched directly from browser code on any origin. Every response carries Cache-Control: max-age=60 and is cached at the edge for 60 seconds — polling more often than once a minute returns the same bytes, so please cache client-side accordingly.
Endpoints
GET /data/snapshot.json
The latest snapshot of DigiDollar system state. Key fields:
generated_at— when the snapshot was collected (ISO-8601, UTC)height— DigiByte chain height at collection (integer)stats.total_collateral_dgb— total DGB locked as collateral (DGB, float)stats.total_dd_supply— outstanding DigiDollar supply in cents (see section 03)stats.active_positions— open vault positions (integer; positions, not people)stats.system_collateral_ratio— system-wide collateral ratiostats.health_status— system health stringoracle_price.price_usd— oracle DGB price in dollars (e.g.0.003331); always use this field (see section 03)oracle_price.oracle_count— number of oracles behind the priceoracle_price.is_stale— whether the oracle price is stale (boolean)
{
"generated_at": "2026-07-18T19:35:01Z",
"height": 23876631,
"stats": {
"total_collateral_dgb": 6275098.68714456,
"total_dd_supply": 445032,
"active_positions": 35,
"system_collateral_ratio": 469,
"health_status": "healthy"
},
"oracle_price": {
"price_usd": 0.003331,
"price_cents": 0,
"oracle_count": 28,
"is_stale": false,
"24h_high": 0.387,
"24h_low": 0.2895
}
}
Abridged — live responses include additional fields (see section 05).
GET /data/history.json
A rolling window of 5-minute points, capped at 4,320 entries (roughly 15 days). Returns an array of compact points: t (ISO-8601 UTC), locked (DGB), dd (cents), positions (integer), price (USD dollars).
[
{"t": "2026-07-18T17:25:01Z", "locked": 5977321.24535441, "dd": 420032, "positions": 33, "price": 0.003461},
{"t": "2026-07-18T17:30:01Z", "locked": 5977321.24535441, "dd": 420032, "positions": 33, "price": 0.003461}
]
GET /data/daily.json
A permanent daily archive: one point per UTC day (that day's last snapshot), append-only, never trimmed. Returns an array of d ("YYYY-MM-DD", UTC), t, locked, dd, positions, price — same units as history.
[
{"d": "2026-07-18", "t": "2026-07-18T19:35:01Z", "locked": 6275098.68714456, "dd": 445032, "positions": 35, "price": 0.003331}
]
Units — read this before charting anything
Two unit conventions in these feeds routinely trip up consumers:
- DigiDollar amounts are integer cents.
stats.total_dd_supplyin the snapshot andddin history and daily are cents:420032means $4,200.32, not 420,032 dollars. Divide by 100 before display. - The oracle price is dollars — but only in
price_usd.oracle_price.price_usdis the DGB price in dollars (e.g.0.003331) and is the only price field to use.price_centsrounds to0for sub-cent DGB and must never be used. - The 24-hour range fields are cents, not dollars.
oracle_price["24h_high"]andoracle_price["24h_low"]use cents:0.32means $0.0032. Do not compare them toprice_usdwithout converting.
Data provenance & caveats
Snapshots are collected every ~5 minutes from our own DigiByte Core node, as described in the methodology. Timestamps are collection time in UTC, not block time. Gaps are possible during collector outages; a missing 5-minute point means we did not collect, not that the chain paused. If a published figure is found to be wrong, it will be corrected per the methodology's discrepancy rule — corrections currently overwrite in place, and a versioned correction log is planned. A per-snapshot block hash is also planned but not yet present, so when citing a figure, cite height and generated_at together.
Stability
The schema is v1 and additive-only: new fields may appear at any time (live responses already carry more fields than are documented above), but existing fields will not change name, type, or meaning. Write consumers that ignore unknown fields. Any breaking change would ship at a new path, leaving these endpoints intact.