CDD API
Real-time Coin Days Destroyed, classified and scored against its trailing baseline. The signal you trade off — not the raw metric you have to interpret yourself.
Why CDD, not raw on-chain volume
Plain on-chain volume is dominated by exchange hot-wallet churn and internal rebalancing. CDD weights every moved satoshi by how long it sat still: a 1 BTC payment of fresh coins barely registers, a 1 BTC payment of 10-year-old coins is worth 3,650 BTC·days. Big CDD prints almost always come from someone whose decision matters — long-term holders moving, governments forfeiting seized stashes, exchange cold-wallet migrations, post-bankruptcy distributions like Mt. Gox.
CDD and raw volume look similar in calm markets and diverge sharply at the edges — exactly where you need signal:
| Scenario | Raw on-chain volume | CDD signal |
|---|---|---|
| Exchange hot-wallet sweep | Big — false alarm | Quiet — coins are fresh |
| Whale unloading old stash | Moderate | Massive — old coins ring louder |
| Mt. Gox / forfeiture distribution | Visible | Extreme — definitive print |
| Sleepy market | Still noisy from churn | Clean baseline |
And like fee pressure, CDD is reconstructible from on-chain data — every spent input records its prevout age. The classifier and its bands are calibrated against 16 years of real chain history, not the window your provider happened to be running.
Endpoint
GET https://signals.chainquery.com/v1/signals/cdd
Authorization: Bearer <your-token>
Response shape
Standard ChainQuery.com envelope. The data object carries the state classifier, z-score, raw metric, and comparable historical events.
{
"schema_version": "1",
"ts_utc": "2026-05-21T20:00:00Z",
"data_age_sec": 12,
"stale": false,
"data": { ... }
}
Live sample
● Live data, fetched server-side just now (cached up to 60s).
{
"data": {
"comparable_events": [],
"data_age_sec": 6,
"last_change_at": "2026-05-21T11:26:55.413043Z",
"metric_unit": "BTC\u00b7days",
"metric_value": 10314185.383148467,
"name": "cdd",
"score": 0.20457158342809809,
"stale": false,
"state": "normal",
"ts_utc": "2026-05-21T21:12:59.169761Z"
},
"data_age_sec": 6,
"schema_version": "1",
"stale": false,
"ts_utc": "2026-05-21T21:12:59.173064Z"
}
State classifier
Each new block at 3-confirmation depth produces a single
label from per-block CDD against its trailing baseline.
Bands escalate from normal through
extreme; exact thresholds are calibrated
against the full 16-year chain history. Trade the label,
skip the math.
Comparable historical events
When the state escalates above normal, the
response includes a comparable_events array
with 1-3 historical prints the classifier judged most
similar to the current one. Each entry carries the date,
state at the time, headline metric value, a short summary,
and a permalink to /events/<slug> on
chainquery.com for the full narrative — what moved,
who moved it, what the market did next. The classifier ships
with curated coverage of the Mt. Gox collapse and trustee
distributions, the FTX collapse cascade, German government
BTC sales, and other historically significant CDD events.
Empty when the signal is in its normal band —
comparable_events only fires when there is something to compare.
Threshold webhooks
We wire per-consumer webhooks that fire on state transitions or score bands you configure. Bearer-gated POST, schema-versioned envelope, idempotent retry, signed with a per-consumer HMAC secret. Email us your endpoint and the conditions you want to alert on; we set them up by hand during onboarding.
Contract guarantees
- Hard-fail on
schema_versionmismatch in your client; schema bumps are breaking. - Treat
stale: trueas no-data; the upstream classifier may have lost its bitcoind connection. - Treat
data_age_sec > 1200with suspicion even ifstale: false— we score per-block at ~10-min cadence. - Tokens are revocable independently per consumer; ask for one rather than sharing.
Get a token
Email [email protected] with the use case. Tokens are issued per consumer and revocable independently. Bundles with the Fee Pressure API as the ChainQuery Signal Suite.
Educational view of the underlying metric, full daily history charted: /reports/cdd.
Why this exists
Glassnode and CryptoQuant gate the same metric behind enterprise contracts — thousands of dollars per month, much of it for branding and dashboards.
ChainQuery.com serves the signal per-block from our own node, with zero marginal cost to us. The price reflects that.