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_version mismatch in your client; schema bumps are breaking.
  • Treat stale: true as no-data; the bot upstream may have lost its bitcoind connection.
  • Treat data_age_sec > 120 with suspicion even if stale: 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.