Fee Pressure API
Sub-second mempool fee pressure signals over HTTP. Derived from our own full Bitcoin node. No third-party data, no rate-limited free tier.
Why fee pressure, not mempool depth
Most "mempool size" charts you've seen show tx count waiting in the mempool. That number's noisy — a million-tx spam wave at 1 sat/vB inflates the count without anyone real being affected. Fee pressure measures something more useful: what fee did it actually take to get into the next block?
Mempool depth and fee pressure correlate during normal congestion, but diverge at the edges:
| Scenario | Mempool depth | Fee pressure |
|---|---|---|
| Sustained congestion (2017 ATH) | Big & rising | Expensive — matches |
| Whale txs racing for next block | Quiet — misses it | Brief spike — catches it |
| Low-fee spam wave | Huge — false alarm | Flat — those txs never confirm |
| Mempool draining post-storm | Still big — lagging | Already cheap — accurate |
And there's a structural advantage: fee pressure is reconstructible from on-chain data, because every block records the fees it accepted. Mempool depth is local node state — once a tx is mined, the "this tx waited from time X to time Y" record is gone forever. We can backtest fee-pressure thresholds against 16 years of real chain history; mempool-depth proxies only cover the window your node was running.
Endpoint
GET https://signals.chainquery.com/v1/signals/mempool/fees
Authorization: Bearer <your-token>
Response shape
Standard ChainQuery.com envelope. The data object is signal-specific.
{
"schema_version": 1,
"ts_utc": "2026-05-08T20:48:33Z",
"data_age_sec": 3,
"stale": false,
"data": { ... }
}
Live sample
● Live data, fetched server-side just now (cached up to 60s).
{
"data": {
"economy_fee_sat_vb": 1,
"fastest_fee_sat_vb": 4,
"half_hour_fee_sat_vb": 3,
"hour_fee_sat_vb": 1,
"mempool_count": 8386,
"mempool_total_fee_sat": 6892959,
"mempool_vsize_vb": 2660954,
"minimum_fee_sat_vb": 1
},
"data_age_sec": 2,
"schema_version": "1",
"stale": false,
"ts_utc": "2026-06-01T15:55:32.580580Z"
}
Contract guarantees
- Hard-fail on
schema_versionmismatch in your client; schema bumps are breaking. - Treat
stale: trueas no-data; the bot upstream may have lost its bitcoind connection. - Treat
data_age_sec > 120with suspicion even ifstale: false. - 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.
Why this exists
Vendors like Glassnode, CryptoQuant, and Nansen charge $300–1000/mo for similar mempool data with minutes-of-latency.
ChainQuery.com serves the same data sub-second from our own node, with zero marginal cost to us. The price reflects that.