Docs
Getting started
Btcintel serves Bitcoin chain facts joined with multi-source annotations over a plain HTTPS API. Reads are public: no API key, no signup, CORS enabled for browsers.
Base URL
https://api.btcintel.ioTwo surfaces live there. /v1 is the native API documented on the reference page — chain facts plus annotations, entities and sources; how a block gets its pool is on the mining attribution page, and what the transaction extractor observes on the transaction observations page; what the mempool engine expected of a block is on the block audit page. /api is the wallet-compatible surface speaking the REST dialect common Bitcoin tooling expects. The machine-readable contract for /v1 is at /openapi.yaml.
First calls
Chain, node and mempool status in one call:
curl -s https://api.btcintel.io/v1/status | jq
{
"chain": "mainnet",
"tip_height": 323207,
"tip_hash": "00000000000000001708...",
"bitcoind_height": 965950,
"bitcoind_ok": true,
"mempool_size": 5183,
"fee_estimates": { "1": 2.1, "3": 1.8, "6": 1.2 }
}A block by height or by hash — both work, hashes are canonical display order:
curl -s https://api.btcintel.io/v1/blocks/57043 | jq '{height, hash, ntx, time}'A transaction with resolved inputs, outputs and spend status:
curl -s https://api.btcintel.io/v1/tx/a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d \
| jq '{txid: .tx.txid, fee: .tx.fee_sat, confirmations: .tx.confirmations}'Read the headers
Every /v1 response carries two headers you should not ignore:
X-Btcintel-Index-Height: 323207 # what the index has fully processed
X-Btcintel-Node-Height: 965950 # what the Bitcoin node has seenWhen they differ, index-derived data is explicitly partial and confirmations are still computed against the node tip. The full contract — including how misses, races and staleness are reported instead of papered over — is on the semantics page. It is short and it is the reason this API exists.
Errors, one shape
{
"error": {
"code": "not_found", // invalid_input · not_found · not_indexed_yet · internal
"message": "not found",
"request_id": "d1a2b3c4"
}
}Fair use
There is no hard rate limit today. Responses declare honest Cache-Control policies — respect them and burst traffic mostly serves from cache. If you plan sustained heavy crawling, mirror the chain yourself; the annotations are the part you cannot recompute.