Docs
Block audit
btcintel mirrors the node's mempool and keeps, at every moment, the block it would build now: the first projected block. When the node connects a block, the engine compares that template with what the block actually contains and writes the difference once, as GET /v1/blocks/{id}/audit and the audit sibling of the block page. It is a record of what one well-connected node expected; it is not a verdict on the miner.
What the row holds
| Field | Meaning |
|---|---|
template_at, template_ntx, template_weight, template_fees_sat | The template as of the last projection recompute before the block: its size and the fees it carried. |
missing | Template transactions the block did not include, each with the package fee rate it was selected at and its age in our mempool at block time. |
added, fresh | Block transactions our mempool knew but the template had not selected; fresh lists those that arrived within 30 seconds before the block. |
never_seen | Block transactions our mempool never saw: out-of-band inclusion, or propagation we missed. |
fullrbf | Block transactions that replaced a mempool transaction which did not signal BIP125. |
match_rate, expected_fees_sat, expected_weight | How much of the template the block kept, and what the template would have earned. |
template_min_rate, block_min_rate | The lowest fee rate the template included and the lowest the block included among transactions we knew. |
sanctioned_missing, sanctions_fetch_id | Missing transactions that spend an address with a current OFAC listing, each with the claim it hits, and the OFAC fetch that was in force. Computed against the snapshot of that moment, so the answer never changes when the list does. |
sigop | Reserved: empty until the projection tracks sigop limits. |
What it does not say
There is no censored field and there will not be one. A missing transaction has many honest explanations: it reached the miner late, it conflicted with something the miner saw first, the miner's template policy differs from Bitcoin Core's defaults, our node's view lagged. The row records the evidence; reading it as a policy claim about a pool is a separate Curated claim with a named source, a method and a citation, exactly like every other claim in the Curated band.
Absent and empty
The row is written once at block connect and never updated or backfilled. Blocks connected while the engine was down have no audit: absent means the engine did not see the block, not that the block was perfect. An empty missing list means the block contained every template transaction. The block list carries a summary, audit.match_rate and audit.missing, on the blocks that have a row.
curl -s https://api.btcintel.io/v1/blocks/900000/audit \
| jq '.audit | {match_rate, missing: (.missing | length), never_seen: (.never_seen | length), fullrbf: (.fullrbf | length), sanctioned_missing}'