One URL, everything.
A public read-only API for anyone listing, charting or comparing this pool. No key, no registration, no origin restriction. The shape is Miningcore's, because that is the one every pool scraper already has a parser for — if you have written a Miningcore adapter before, this needs nothing from you but the hostname.
https://b2pool.io/api/v1/public
JSON · cached 60 s · 5 req/s per address, burst 20 · answers 429 when you exceed it
If you are a tracker, this is the whole integration
One call, server-side, as often as once a minute. It returns both pools — shared and solo — with everything a listing or a profitability page needs.
| Field | What it is |
|---|---|
| poolStats.poolHashrate | Pool hashrate in H/s. |
| networkStats.networkHashrate | Network hashrate, the same unit. The ratio of the two is the pool's true share — there is no scaling factor to apply between them. |
| networkStats.networkDifficulty | Network difficulty, same definition as the SHA-256 chain. |
| poolStats.connectedMiners | Distinct payout addresses currently mining. connectedWorkers counts machines. |
| poolFeePercent | 1.0, on both pools. |
| blockReward | The nominal subsidy at the current height, in BTCB2. |
| avgBlockReward | What miners were actually paid, averaged over this pool's confirmed blocks — a block still maturing has not had its split booked yet, and averaging it in would overstate the figure. Use this one for profitability: see the note below, it is not the same as blockReward. Null until the pool has a confirmed block, which is why the solo pool reports null today. |
| blockTime | 600 seconds. Same target as Bitcoin. |
| paymentProcessing | Scheme, minimum payout and what triggers a payout. |
| totalBlocks | Blocks found, with blocksLast24h, lastPoolBlockTime and lastPoolBlockHeight beside it. |
| poolEffort | Work done in the current round ÷ network difficulty. Above 1 is not an error — it means the round has had bad luck so far. |
| ports | Every port with its starting difficulty, floor and protocol. |
Endpoints
All under https://b2pool.io. Pool ids are btcb2 (shared) and btcb2-solo.
| Path | Returns |
|---|---|
| /api/v1/public | Both pools, plus a map of every endpoint. Start here. |
| /api/v1/public/pools | The pool list on its own: {"pools":[…]}. |
| /api/v1/public/pools/{id} | One pool: {"pool":{…}}. |
| /api/v1/public/pools/{id}/blocks | Blocks found, newest first. ?page= 0–50, ?pageSize= 1–100. poolFee and minerReward are null while a block is still maturing — the split is not booked until it confirms, and a placeholder there would be a wrong number stated as a fact. subsidy, transactionFees and reward are chain facts and always present. |
| /api/v1/public/pools/{id}/payments | Payout transactions, newest first. Empty for the solo pool, which pays in the coinbase of its own block. |
| /api/v1/public/pools/{id}/performance | Hourly hashrate, miners and workers. ?hours= 1–336. |
| /api/v1/public/network | Chain facts: height, difficulty, hashrate, subsidy, next halving, coinbase maturity. |
| /api/pools | Alias for /api/v1/public/pools, at the path a Miningcore client asks for on its own. /api/pools/{id} and its sub-paths work the same way. |
Every response is JSON with Access-Control-Allow-Origin: *, so a browser can read it directly. Times are ISO 8601 in UTC. Amounts are BTCB2 with 8 decimals, except where a field name ends in Sats. Hashrates are H/s throughout — pool and network alike.
Try it
Nothing to install, nothing to sign up for.
curl -s https://b2pool.io/api/v1/public | jq '.pools[0] | {
hashrate: .poolStats.poolHashrate,
miners: .poolStats.connectedMiners,
fee: .poolFeePercent,
scheme: .paymentProcessing.payoutScheme,
reward: .avgBlockReward,
network: .networkStats.networkHashrate
}'
The chain is young, so a tracker may have no other source for its subsidy or difficulty. /api/v1/public/network carries those separately from anything about this pool, and you are welcome to use it that way.
Limits, and what is not in here
- Rate limit
- 5 / sPer address, burst 20. Over that you get 429, not 503 — we are not down, you are just early. Answers are cached 60 seconds, so polling faster buys you nothing.
- Authentication
- NoneRead-only, no key, no quota to register for. If you need a higher limit for a legitimate integration, ask.
- Stability
- AdditiveFields get added, not renamed or removed. The path carries v1; a breaking change would be v2 alongside it.
- Not included
- Per-miner detailPayments are aggregated per transaction rather than per address, and there is no per-region breakdown. Neither is needed to list a pool, and the chain already holds the payment detail for anyone who wants it.
Found something wrong in the numbers, or need a field that is not here? The pool is small enough that asking works. The protocol notes cover the mining side, and what this chain is covers the rest.