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": true are 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.