Bitcoin Deep Dive: Mempool & Blockchain Data
Learn how to access comprehensive Bitcoin network data including mempool statistics, fee recommendations, address lookups, and Lightning Network metrics.
Overview
The Web3 Identity API provides two Bitcoin data sources:
- Blockchain.info - Network statistics, supply data, and market metrics
- Mempool.space - Real-time mempool data, fee estimates, and transaction details
All endpoints are prefixed with /api/bitcoin/.
Prerequisites
npm install @atv-eth/x402-sdk
# or use curl/fetch directly
Quick Start
Get Current Bitcoin Stats
// All Bitcoin data in one call
const response = await fetch('https://api.web3identity.com/api/bitcoin/all');
const data = await response.json();
console.log(`BTC Price: $${data.price.usd}`);
console.log(`Block Height: ${data.network.blockHeight}`);
console.log(`Total Supply: ${data.supply.totalBtc} BTC (${data.supply.percentMined}% mined)`);
curl https://api.web3identity.com/api/bitcoin/all
Response:
{
"price": {
"usd": 97500.42,
"eur": 89234.18,
"gbp": 77123.56
},
"network": {
"blockHeight": 882451,
"difficulty": 110452135211283.5,
"hashrate": 823456789.12,
"hashrateUnit": "GH/s"
},
"supply": {
"totalBtc": 19623456.25,
"maxSupply": 21000000,
"percentMined": "93.4450"
},
"market": {
"marketCap": 1913436789012.34,
"tradeVolume24h": 45678901234.56
},
"source": "blockchain.info",
"timestamp": "2026-02-09T08:30:00.000Z"
}
Network Statistics
Block Information
// Current block height
const blockcount = await fetch('https://api.web3identity.com/api/bitcoin/blockcount');
// { "blockHeight": 882451, "source": "blockchain.info", "timestamp": "..." }
// Latest block hash
const latesthash = await fetch('https://api.web3identity.com/api/bitcoin/latesthash');
// { "latestHash": "00000000000000000002f5e3...", "source": "blockchain.info", "timestamp": "..." }
// Network difficulty
const difficulty = await fetch('https://api.web3identity.com/api/bitcoin/difficulty');
// { "difficulty": 110452135211283.5, "source": "blockchain.info", "timestamp": "..." }
// Network hashrate
const hashrate = await fetch('https://api.web3identity.com/api/bitcoin/hashrate');
// { "hashrate": 823456789.12, "unit": "GH/s", "source": "blockchain.info", "timestamp": "..." }
Supply Metrics
// Total circulating supply
const totalbc = await fetch('https://api.web3identity.com/api/bitcoin/totalbc');
const supply = await totalbc.json();
console.log(`${supply.percentMined}% of max supply mined`);
// Block reward
const bcperblock = await fetch('https://api.web3identity.com/api/bitcoin/bcperblock');
// { "btcPerBlock": 3.125, "satoshisPerBlock": 312500000, ... }
Price & Market Data
// Multi-currency ticker
const ticker = await fetch('https://api.web3identity.com/api/bitcoin/ticker');
// Returns USD, EUR, GBP, JPY, CNY prices
// 24-hour weighted price
const price24h = await fetch('https://api.web3identity.com/api/bitcoin/24hrprice');
// { "price24h": 97234.56, "currency": "USD", ... }
// Market cap
const marketcap = await fetch('https://api.web3identity.com/api/bitcoin/marketcap');
// { "marketCap": 1913436789012.34, "currency": "USD", ... }
// 24-hour transaction count
const txcount = await fetch('https://api.web3identity.com/api/bitcoin/24hrtransactioncount');
// { "transactionCount24h": 456789, ... }
Mempool Data (mempool.space)
Real-Time Mempool Stats
// Mempool overview
const mempool = await fetch('https://api.web3identity.com/api/bitcoin/mempool');
const data = await mempool.json();
console.log(`Pending TXs: ${data.count}`);
console.log(`Total Size: ${(data.vsize / 1000000).toFixed(2)} MB`);
console.log(`Total Fees: ${data.totalFee} sats`);
Response:
{
"count": 45678,
"vsize": 123456789,
"totalFee": 567890123,
"feeHistogram": [[1, 12345], [2, 23456], ...],
"source": "mempool.space",
"timestamp": "2026-02-09T08:30:00.000Z"
}
Recent Mempool Transactions
const recent = await fetch('https://api.web3identity.com/api/bitcoin/mempool/recent');
const data = await recent.json();
data.transactions.forEach(tx => {
console.log(`TX: ${tx.txid.slice(0, 16)}... Fee: ${tx.fee} sats`);
});
Fee Estimation
Recommended Fees
This is crucial for wallet applications:
const fees = await fetch('https://api.web3identity.com/api/bitcoin/fees/recommended');
const data = await fees.json();
console.log('Fee Recommendations (sat/vB):');
console.log(` ⚡ Fastest (next block): ${data.fastestFee}`);
console.log(` 🚀 Half hour: ${data.halfHourFee}`);
console.log(` ⏰ Hour: ${data.hourFee}`);
console.log(` 💰 Economy: ${data.economyFee}`);
console.log(` 📉 Minimum: ${data.minimumFee}`);
Response:
{
"fastestFee": 45,
"halfHourFee": 38,
"hourFee": 25,
"economyFee": 12,
"minimumFee": 5,
"unit": "sat/vB",
"source": "mempool.space",
"timestamp": "2026-02-09T08:30:00.000Z"
}
Fee Distribution by Block
const blocks = await fetch('https://api.web3identity.com/api/bitcoin/fees/mempool-blocks');
const data = await blocks.json();
// Shows projected blocks with fee ranges
data.blocks.forEach((block, i) => {
console.log(`Block +${i}: ${block.nTx} txs, median fee: ${block.medianFee} sat/vB`);
});
Address Lookups
Address Balance & Stats
const address = '1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa'; // Satoshi's address
const info = await fetch(`https://api.web3identity.com/api/bitcoin/address/${address}`);
const data = await info.json();
console.log(`Balance: ${data.balance} sats`);
console.log(`Total Received: ${data.chain_stats.funded_txo_sum} sats`);
console.log(`Total Spent: ${data.chain_stats.spent_txo_sum} sats`);
console.log(`TX Count: ${data.chain_stats.tx_count}`);
Address Transaction History
const txs = await fetch(`https://api.web3identity.com/api/bitcoin/address/${address}/txs`);
const data = await txs.json();
data.transactions.forEach(tx => {
const status = tx.status.confirmed ? `Block ${tx.status.block_height}` : 'Unconfirmed';
console.log(`${tx.txid.slice(0, 16)}... [${status}] Fee: ${tx.fee}`);
});
Address UTXOs
const utxos = await fetch(`https://api.web3identity.com/api/bitcoin/address/${address}/utxo`);
const data = await utxos.json();
console.log(`${data.count} UTXOs, Total: ${data.totalValue} sats`);
data.utxos.forEach(utxo => {
console.log(` ${utxo.txid.slice(0, 16)}:${utxo.vout} = ${utxo.value} sats`);
});
Transaction Lookups
Transaction Details
const txid = '4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b';
const tx = await fetch(`https://api.web3identity.com/api/bitcoin/tx/${txid}`);
const data = await tx.json();
console.log(`TX: ${data.txid}`);
console.log(`Size: ${data.size} bytes, Weight: ${data.weight}`);
console.log(`Fee: ${data.fee} sats`);
console.log(`Inputs: ${data.vin}, Outputs: ${data.vout}`);
console.log(`Total Output: ${data.totalOutput} sats`);
Transaction Status
const status = await fetch(`https://api.web3identity.com/api/bitcoin/tx/${txid}/status`);
const data = await status.json();
if (data.confirmed) {
console.log(`✅ Confirmed in block ${data.block_height}`);
console.log(`Block hash: ${data.block_hash}`);
console.log(`Block time: ${new Date(data.block_time * 1000).toISOString()}`);
} else {
console.log('⏳ Unconfirmed (in mempool)');
}
Block Data
Block by Hash
const blockHash = '000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f';
const block = await fetch(`https://api.web3identity.com/api/bitcoin/block/${blockHash}`);
const data = await block.json();
console.log(`Block #${data.height}: ${data.id.slice(0, 16)}...`);
console.log(`Timestamp: ${new Date(data.timestamp * 1000).toISOString()}`);
console.log(`Transactions: ${data.tx_count}`);
console.log(`Size: ${(data.size / 1000).toFixed(2)} KB`);
console.log(`Difficulty: ${data.difficulty}`);
Block by Height
const block = await fetch('https://api.web3identity.com/api/bitcoin/block-height/0');
// Genesis block!
Recent Blocks
const blocks = await fetch('https://api.web3identity.com/api/bitcoin/blocks');
const data = await blocks.json();
console.log('Recent Blocks:');
data.blocks.forEach(block => {
console.log(`#${block.height}: ${block.tx_count} txs, ${new Date(block.timestamp * 1000).toLocaleString()}`);
});
Mining Data
Mining Pools
// Get pool distribution (default: 1 week)
const pools = await fetch('https://api.web3identity.com/api/bitcoin/mining/pools');
// Or specify period: 24h, 3d, 1w, 1m, 3m, 6m, 1y, all
const poolsWeek = await fetch('https://api.web3identity.com/api/bitcoin/mining/pools?period=1w');
const data = await pools.json();
console.log(`${data.blockCount} blocks in ${data.period}:`);
data.pools.forEach(pool => {
console.log(` ${pool.name}: ${pool.blockCount} blocks (${(pool.share * 100).toFixed(1)}%)`);
});
Network Hashrate
const hashrate = await fetch('https://api.web3identity.com/api/bitcoin/mining/hashrate?period=1m');
const data = await hashrate.json();
console.log(`Current Hashrate: ${data.currentHashrate}`);
console.log(`Current Difficulty: ${data.currentDifficulty}`);
// Also includes historical data points in data.hashrates
Lightning Network
const lightning = await fetch('https://api.web3identity.com/api/bitcoin/lightning/statistics');
const data = await lightning.json();
console.log('⚡ Lightning Network Stats:');
console.log(` Channels: ${data.channels.toLocaleString()}`);
console.log(` Nodes: ${data.nodes.toLocaleString()}`);
console.log(` Total Capacity: ${(data.totalCapacity / 100000000).toFixed(2)} BTC`);
console.log(` Avg Capacity: ${data.avgCapacity} sats`);
console.log(` Avg Fee Rate: ${data.avgFeeRate} ppm`);
Building a Fee Monitor Dashboard
Here's a complete example combining multiple endpoints:
async function getBitcoinDashboard() {
const [all, fees, mempool, blocks] = await Promise.all([
fetch('https://api.web3identity.com/api/bitcoin/all').then(r => r.json()),
fetch('https://api.web3identity.com/api/bitcoin/fees/recommended').then(r => r.json()),
fetch('https://api.web3identity.com/api/bitcoin/mempool').then(r => r.json()),
fetch('https://api.web3identity.com/api/bitcoin/blocks').then(r => r.json())
]);
return {
price: all.price.usd,
blockHeight: all.network.blockHeight,
supply: {
current: all.supply.totalBtc,
percentMined: all.supply.percentMined
},
fees: {
fast: fees.fastestFee,
medium: fees.halfHourFee,
slow: fees.economyFee
},
mempool: {
pendingTxs: mempool.count,
sizeMB: (mempool.vsize / 1000000).toFixed(2)
},
recentBlocks: blocks.blocks.slice(0, 5).map(b => ({
height: b.height,
txCount: b.tx_count,
time: new Date(b.timestamp * 1000).toISOString()
}))
};
}
// Usage
const dashboard = await getBitcoinDashboard();
console.log(JSON.stringify(dashboard, null, 2));
Endpoint Reference
| Endpoint | Description | Source |
|---|---|---|
/api/bitcoin/all | All stats in one call | blockchain.info |
/api/bitcoin/ticker | Multi-currency prices | blockchain.info |
/api/bitcoin/stats | Network statistics | blockchain.info |
/api/bitcoin/difficulty | Current difficulty | blockchain.info |
/api/bitcoin/blockcount | Block height | blockchain.info |
/api/bitcoin/hashrate | Network hashrate | blockchain.info |
/api/bitcoin/totalbc | Total supply | blockchain.info |
/api/bitcoin/bcperblock | Block reward | blockchain.info |
/api/bitcoin/marketcap | Market capitalization | blockchain.info |
/api/bitcoin/mempool | Mempool stats | mempool.space |
/api/bitcoin/mempool/recent | Recent mempool txs | mempool.space |
/api/bitcoin/fees/recommended | Fee recommendations | mempool.space |
/api/bitcoin/fees/mempool-blocks | Fee distribution | mempool.space |
/api/bitcoin/address/:address | Address info | mempool.space |
/api/bitcoin/address/:address/txs | Address transactions | mempool.space |
/api/bitcoin/address/:address/utxo | Address UTXOs | mempool.space |
/api/bitcoin/tx/:txid | Transaction details | mempool.space |
/api/bitcoin/tx/:txid/status | Transaction status | mempool.space |
/api/bitcoin/block/:hash | Block by hash | mempool.space |
/api/bitcoin/block-height/:height | Block by height | mempool.space |
/api/bitcoin/blocks | Recent blocks | mempool.space |
/api/bitcoin/mining/pools | Mining pool stats | mempool.space |
/api/bitcoin/mining/hashrate | Hashrate history | mempool.space |
/api/bitcoin/lightning/statistics | Lightning stats | mempool.space |
Rate Limits & Pricing
- Free tier: 100 calls/day
- Paid: $0.005 - $0.02 per call depending on endpoint
- Cache: 15-30 second cache on most endpoints
Next Steps
- Etherscan Tools - Ethereum contract and transaction data
- The Graph Queries - Subgraph data for DeFi protocols
- x402 Integration - Setting up payments