Every live ChainCensus dataset is available as JSON. No API key. Cached for 5 minutes at the edge. Free for any use with attribution — a visible link to the dataset's page wherever the data is shown.
Machine-readable contract: GET /openapi.json (OpenAPI 3.1).
Endpoints
GET /api/data/fees
The latest Crypto Fees Index reading.
{
"dataset": "fees",
"name": "Crypto Fees Index",
"updatedAt": "2026-07-12T10:21:58.806Z",
"data": {
"index": 13.9,
"medianSendCostUsd": 0.0022,
"chains": [
{ "id": "bitcoin", "name": "Bitcoin", "sendCostUsd": 0.089, "swapCostUsd": null },
{ "id": "base", "name": "Base", "sendCostUsd": 0.0002, "swapCostUsd": 0.0016 }
],
"pricesUsd": { "bitcoin": 118000 },
"collectedAt": "2026-07-12T10:21:58.612Z"
},
"attribution": "Data by ChainCensus — free to use with a link to https://chaincensus.com/fees",
"docs": "https://chaincensus.com/api-docs"
}
Fields marked as estimates in the methodology carry
"estimate": true on the chain object. 503 means the dataset has no reading yet.
The response also includes a permanent snapshotUrl. That URL returns the exact
stored reading with Cache-Control: immutable, so a quoted number remains
checkable after the latest endpoint moves on.
GET /api/data/fees/snapshots/{id}
An immutable Fees Index reading. Use the snapshotUrl supplied by the latest
fees response rather than guessing an id. A missing snapshot returns 404.
GET /api/data/dead-coins
Every entry in the Dead Coins Database — a curated set, not a live feed.
{
"dataset": "dead-coins",
"name": "Dead Coins Database",
"version": "1.0 — curated set (see methodology)",
"stats": {
"total": 113,
"diedThisYear": 7,
"topCause": { "cause": "scam", "count": 32 },
"yearsSpanned": { "from": 2014, "to": 2026 }
},
"coins": [
{
"id": 3,
"name": "TerraUSD",
"symbol": "UST",
"launchYear": 2020,
"deathYear": 2022,
"cause": "mechanism-failure",
"evidenceUrl": "https://en.wikipedia.org/wiki/Terra_(blockchain)",
"notes": "Algorithmic stablecoin whose peg collapsed in May 2022."
}
],
"attribution": "Data by ChainCensus — free to use with a link to https://chaincensus.com/dead-coins",
"docs": "https://chaincensus.com/api-docs"
}
What counts as "dead" and how entries are verified is in the methodology,
along with a dated release-level change log — cite the count with your access date and it stays checkable.
Each API record includes a stable recordUrl for linking to that specific row.
503 means the database is empty or unreachable — this endpoint never serves sample data.
GET /api/data/government-holdings
Every entry in Government Crypto Holdings — curated records reviewed monthly, with per-entry sources and event timelines.
{
"dataset": "government-holdings",
"name": "Government Crypto Holdings",
"version": "1.0 — curated records, reviewed monthly (see methodology)",
"stats": {
"totalBtc": 407707,
"totalBtcIncludesEstimates": true,
"countries": 12,
"largest": { "country": "United States", "amountBtc": 328372 },
"asOf": "2026-07-16"
},
"holdings": [
{
"id": 1,
"country": "United States",
"entity": "U.S. government — USMS/DOJ custody + Strategic Bitcoin Reserve",
"asset": "BTC",
"amount": 328372,
"origin": "seizure",
"status": "holding",
"confidence": "estimated",
"asOf": "2026-07-16",
"sourceUrl": "https://bitcointreasuries.net/governments",
"notes": "Seized BTC consolidated under a March 2025 executive order…",
"timeline": [
{ "date": "2025-03-06", "event": "Executive order establishes the Strategic Bitcoin Reserve" }
]
}
],
"attribution": "Data by ChainCensus — free to use with a link to https://chaincensus.com/government-holdings",
"docs": "https://chaincensus.com/api-docs"
}
disputed rows are included in holdings but excluded from stats.totalBtc — inclusion
rules and confidence tiers are in the methodology.
When totalBtcIncludesEstimates is true, display the total with ~ or
"approximately" rather than implying audited precision. Each record also includes a
stable recordUrl pointing to its row on the dataset page.
503 means the database is empty or unreachable — this endpoint never serves sample data.
Fair use
- Respect the cache: values change at most every 30 minutes — polling faster than once a minute is wasted traffic and may be rate-limited.
- Attribution is the entire price of the data. Apps, dashboards, articles and bots must show "Data: ChainCensus" linking to the dataset page.
- Bulk/historical exports aren't public yet — ask via Press.
For AI agents
Same terms for people and models. Three things worth knowing before you use a number:
- Cite the dataset page, not the homepage. The page carries the reading's timestamp and links the methodology that produced it, so a reader can check what you quoted.
- Read the vintage. Every response has its own
collectedAt/asOf. Chains marked"estimate": trueare documented estimates, not measurements — render them as such. - Embedding beats copying. If you're generating a page that shows a live figure, use the iframe below instead of baking today's number into static HTML: it stays correct after you ship and renders its own source line and attribution link.
<iframe src="https://chaincensus.com/embed/fees?theme=light" width="640" height="220"
style="border:1px solid #e4e7ec" title="Crypto Fees Index — ChainCensus" loading="lazy"></iframe>
The embed sets no cookies, loads nothing from third parties, and follows ?theme=light|dark.
A PNG of the same chart, for contexts that can't run an iframe:
https://chaincensus.com/api/embed/fees/chart.png (?theme=dark optional).
A machine-readable index of every dataset, endpoint and guide lives at llms.txt.
New datasets appear here as they go live — the Data hub is the canonical list.