API
Pool data as static JSON
The public endpoints listed below are plain JSON that any script or dashboard can read. They are updated regularly and may be fetched from any origin (CORS is open). Poll about once a minute and use the timestamps to detect stale data. Amounts are in satoshis unless the field name says otherwise; hashrates are H/s; times are Unix seconds (UTC).
When available, the Private Mempool Service accepts non-standard transaction submissions. Its endpoints under /api/portal/ require same-origin requests and return uncached responses; the statistics API's open CORS setting does not apply to them.
Pool
/api/pool.jsonThe whole pool in one document: total and per-mode (modes.solo, modes.cpplns) hashrate (1m … 7d), miners, workers, round stats; network (height, difficulty, network hashrate, block subsidy); blocks.total for the whole pool (total, 24h, 7d, orphaned, last); instances[] — each mining instance with its ports, start/min difficulty, fee, enabled/running state; coinbase_previews — for each cPPLNS instance, an estimate of the outputs its next block would pay. block_accounting_scope is pool; legacy per-mode block summaries and instance blocks_found are null.
/api/mps.jsonA flat summary meant for aggregators such as MiningPoolStats: hashrate, miners, workers, blocks_found, blocks_24h, last_block_height, last_block_time, fee_pct, network_* and the stratum endpoint list. Hashrate comes from enabled instances, each counted once even with several ports. Block counts cover the whole pool's recognized chain history, including former or disabled instances; per-mode blocks_found is null.
/pool/pool.statusThe three-line ckpool/CKpool format, aggregated over enabled instances, for tools that already read ckpool's pool.status. Line 3's diff/accepted are summed over every instance's current round.
/api/history.jsonSeries for charts: series.total|solo|cpplns with 24h (5-minute points) and 7d (hourly points) as [time, hashrate, miners]; Per-instance work and payout windows remain independent.
/api/stratums.jsonCompatibility summary with one entry named local. New clients should use pool.json's flat instances array.
/api/status.jsonPool health: publication timestamps, instance availability, and the latest scanned height.
Miners
Nested instance pplns data has accounting_scope: "instance" and source: "native_checkpoint". Its totals and tracked_blocks describe that engine's payout checkpoint; use pool.json's blocks.total for historical pool block counts.
The zero_fee_ui flag indicates when the home page uses the zero-fee presentation. It does not change payout rules.
/api/miners.jsonsolo[] and cpplns[] lists of miners seen recently: address, hashrate (5m/1h/1d), workers, last share, active; cPPLNS rows carry window_pct_max and est_pay_sats (summed over instances). Legacy SOLO blocks is null because a coinbase recipient does not establish who found the block.
/api/miner/<address>.jsonOne miner across mining instances: totals, instances[] (each with host, port, mode, hashrate, workers, best shares and — for cPPLNS — pplns.window_pct, pplns.est_pay_sats, lifetime earned_sats), solo (hashrate and expected time to a block; legacy blocks_found is null), cpplns (sums), and history.points for the last 24 h. 404 if the address has never submitted a share.
/users/<address>The ckpool per-user format (hashrate strings, worker[]), aggregated over instances, for miner-side dashboards that expect it.
/api/payouts/<address>.jsonRead from the blockchain: every pool block whose coinbase paid this address — height, time, amount, status (immature/confirmed/orphaned) — and totals. totals.blocks and totals.pool_blocks count canonical blocks paying the address; they do not claim it found those blocks. Legacy solo_blocks_found and cpplns_blocks are null. It exists even for addresses no port currently sees.
Blocks
/api/blocks.jsonThe most recent pool blocks with their coinbase outputs (largest first, capped per block), status and confirmations, plus totals.pool. Each block has mode: "pool", instance: null and winner: null.
/api/blocks-index.jsonEvery pool block, compact: h height, t time, m always "pool", r reward sats, w always null, n address outputs, o orphaned, x hash. instance is null.
/api/blocks-attrib.jsonCompatibility endpoint with an empty blocks object and accounting_scope: "pool". Historical instance and finder attribution is unavailable.
/api/scan.jsonScan progress, configured first height, latest scanned height, chain tip, catching_up, ok and a safe error code. Block counts and received amounts are incomplete while catching_up is true, and may be incomplete or out of date when ok is false. History is current only when ok is true and catching_up is false. cbtag_identifier is the stable pool marker, and accounting_scope is pool.
/api/network.jsonThe BitcoinIII network as the pool sees it: height, difficulty, network hashrate, subsidy, tip hash and time.
Block status and maturity
A chain reorganization can change a block's status to orphaned, or restore it if it returns to the chain. Each block's mature_depth gives the confirmations required to spend its coinbase payout (normally 100 confirmations). Height-dependent maturity rules for BC3 are applied to the individual block. You can verify block records with an appropriate BitcoinIII block explorer.
Example
curl -s https://bc3pool.org/api/pool.json | jq '{h: .total.hashrate."5m", miners: .total.miners, blocks: .blocks.total.total}'
curl -s https://bc3pool.org/api/miner/YOUR_ADDRESS.json | jq '.instances[] | {host, port, mode, hr: .hashrate."5m", slice: .pplns.window_pct}'
curl -s https://bc3pool.org/pool/pool.status