DNH20
DNH20 public API
Read-only JSON. No keys. Thirty requests per minute per IP. Market information only — not investment advice.
30 requests / minute / IP. Over the cap returns HTTP 429 with retry_after.
Market information only. Not investment advice.
Examples
GET /api/v1/snapshot
GET /api/v1/note
GET /api/v1/history?from=2026-06-01&to=2026-09-05
Connect via MCP
MCP (Model Context Protocol) lets AI assistants call structured tools instead of scraping this page. DNH20 exposes a read-only Streamable HTTP server — same data and 30 req/min/IP cap as the REST API. No API key. No trade or write tools.
Endpoint: https://dnh20.app/mcp. Compatible clients include Claude, ChatGPT (MCP-enabled), and other assistants that speak Streamable HTTP MCP.
Tools: get_snapshot, get_index_family, get_intelligence, get_history, explain_market_move, get_research_history, get_onchain_context, get_constituent, list_constituents, get_methodology. All read-only; payloads include a disclaimer field. No buy or trade tools.
curl -sS -X POST https://dnh20.app/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}'Live snapshot
GET /api/v1/snapshot — live print, timestamp, source, and the locked 20.
| Field | Type | Meaning |
|---|---|---|
| number | Official DNH20 level | |
| ts | ISO-8601 | UTC timestamp of the print |
| source | string | Quote vendor for this snapshot |
| stale | boolean | True when serving the last good cache |
| membership.effective_date | date | When this locked 20 became the book |
| membership.reviewed_date | date | Last 00:00 UTC membership review |
| membership.members_hash | string | Sorted symbols, joined |
| membership.members | string[] | Locked symbols, in lock order |
| constituents | array | Rank, symbol, name, price, market_cap, weight_percent |
Desk note
GET /api/v1/note — latest bilingual Market note (≤ 800 chars) with disclaimer. Written once per UTC day from the snapshot.
| Field | Type | Meaning |
|---|---|---|
| number | Official DNH20 level | |
| ts | ISO-8601 | UTC timestamp of the print |
| source | string | Quote vendor for this snapshot |
| stale | boolean | True when serving the last good cache |
| membership.effective_date | date | When this locked 20 became the book |
| membership.reviewed_date | date | Last 00:00 UTC membership review |
| membership.members_hash | string | Sorted symbols, joined |
| membership.members | string[] | Locked symbols, in lock order |
| constituents | array | Rank, symbol, name, price, market_cap, weight_percent |
Daily history
GET /api/v1/history — same body as /api/history.json. Query from and to as YYYY-MM-DD.
| Field | Type | Meaning |
|---|---|---|
| genesis | date | 2025-01-01 |
| divisor | number | Fixed $2.4T base market cap |
| from | date | Inclusive UTC start (default last 90 days) |
| to | date | Inclusive UTC end |
| series[].date | date | UTC calendar day |
| series[].print | number | Stored daily print — not interpolated |
| series[].members_hash | string | Membership that day |
Research
- GET /api/research/view — what moved DNH20: contributions by name and sector (pp), BTC leadership vs breadth, today vs 30 days ago, recorded regimes, on-chain context. Every value has source and asOf.
- GET /api/research/daily?from=&to= — daily research records (schema dnh20.research.v1) since R5; at most 400 days; no back-fill.
- GET /api/snapshot — includes market_intelligence (v2.0), classification (DNHCS), onchain_context, index_family and data_provenance.
Also published
- GET /api/history.json — kept. Same series as v1/history.
- GET /api/history.csv
- GET /api/snapshot — fuller dashboard dump (quotes, briefing).