List Your Pool
Expose one JSON endpoint on your domain — we do the rest automatically.
✅ Fast, human review. Once your API endpoint passes our automatic check, we approve new pools by hand — usually within a day. We refresh data every 10 minutes directly from your API — no scraping, no Cloudflare issues.
How it works
Mining Scan reads pool data directly from your pool's API, not from screen-scraping. Your stats refresh on a ~10-minute cycle while our collectors are healthy — every number carries its own timestamp, and anything stale is labeled stale rather than shown as live. We support the industry-standard Miningcore API format, which is already built into popular pool software.
3 steps to listing
Expose GET /api/pools on your domain
If you run Miningcore, Ergo, or compatible software — you already have this. Otherwise implement the endpoint using our spec below. Takes ~30 minutes.
Submit your domain via our form
Tell us your domain and API URL. We automatically verify the endpoint is reachable and returns valid data.
Reviewed & listed
Verification passes → we review your submission and add your pool to the directory. We poll your /api/pools every 10 minutes to keep all stats fresh.
Requirements
- Your pool must be publicly reachable (not behind VPN or private network)
- The /api/pools endpoint must respond with HTTP 200 and valid JSON
- At least one coin must have a valid coin.type or coin.symbol
- Pool must have had mining activity in the last 30 days
- No fake or copied hashrate data — we cross-check against network stats
API Standard
We use the Miningcore API format — the most widely adopted standard in the mining pool industry. If your pool runs Miningcore, Abelian Pool, Ergo Pool, or any compatible software, you already comply.
GET /api/pools
The primary endpoint. Returns configuration and live stats for all coins your pool supports.
{
"pools": [
{
"id": "btc", // unique slug for this coin pool
"coin": {
"type": "BTC", // ticker symbol (REQUIRED)
"name": "Bitcoin", // full name (optional)
"algorithm": "SHA256" // mining algorithm (optional)
},
"ports": {
"3333": { "varDiff": true }, // stratum port(s)
"3334": { "varDiff": false, "difficulty": 512 }
},
"paymentProcessing": {
"enabled": true,
"minimumPayment": 0.001, // in coin units
"payoutScheme": "PPLNS" // PPLNS / PROP / SOLO / PPS / FPPS
},
"poolFeePercent": 1.0, // % fee (REQUIRED)
"address": "bc1q...", // pool wallet (optional)
"poolStats": {
"connectedMiners": 150, // active miners (REQUIRED)
"connectedWorkers": 310,
"poolHashrate": 15000000000000, // H/s (REQUIRED)
"sharesPerSecond": 42.5
},
"networkStats": {
"networkType": "mainnet",
"networkHashRate": 993000000000000000,
"networkDifficulty": 123456789012,
"blockHeight": 954578, // current block height (REQUIRED)
"connectedPeers": 42,
"rewardType": "POW"
},
"totalBlocks": 87, // all-time blocks found
"totalPaid": 1.305, // all-time paid out (coin units)
"lastPoolBlockTime": "2026-06-21T00:30:00Z" // ISO 8601
}
]
}
Required vs optional fields
| Field | Required | Description |
|---|---|---|
| coin.type | Required | Ticker symbol, uppercase (BTC, XMR, KAS…) |
| poolFeePercent | Required | Fee in percent, e.g. 1.0 for 1% |
| poolStats.connectedMiners | Required | Current active miners count |
| poolStats.poolHashrate | Required | Current pool hashrate in H/s |
| networkStats.blockHeight | Required | Current network block height |
| paymentProcessing.payoutScheme | Recommended | PPLNS / PROP / SOLO / PPS / FPPS |
| lastPoolBlockTime | Recommended | Timestamp of last block found by pool |
| totalBlocks | Optional | Total blocks found all-time |
| ports | Optional | Stratum ports configuration |
| address | Optional | Pool wallet address |
GET /api/pools/{id}/blocks
Optional but recommended — enables block history display on your pool page.
{
"pageCount": 5,
"items": [
{
"blockHeight": 954578,
"networkDifficulty": 123456789012,
"status": "confirmed", // pending / confirmed / orphaned
"effort": 0.94, // 0.94 = 94% effort
"reward": 3.125,
"miner": "bc1q...", // miner who found it (optional)
"created": "2026-06-21T00:30:00Z"
}
]
}
GET /api/pools/{id}/payments
Optional — enables payment history on your pool page.
{
"pageCount": 12,
"items": [
{
"coin": "BTC",
"address": "bc1q...",
"amount": 0.00315,
"transactionConfirmationData": "txhash...",
"created": "2026-06-21T01:00:00Z"
}
]
}
Simple format (alternative)
If you don't run Miningcore and implementing the full spec seems complex, you can use our minimal format instead. Just expose any URL that returns this JSON:
{
"pool_name": "My Awesome Pool",
"website": "https://mypool.com",
"coins": [
{
"symbol": "KAS",
"algorithm": "kHeavyHash",
"hashrate": 500000000000, // H/s
"miners": 42,
"fee_percent": 1.0,
"payout_scheme": "PPLNS",
"min_payout": 50.0,
"block_height": 465756033,
"last_block_found": "2026-06-21T00:30:00Z",
"stratum": "stratum+tcp://mypool.com:5555"
}
]
}
📌 Tip: You can host this as a static JSON file at https://yourpool.com/mining-scan.json — no server code needed. Just update it with a cron job every few minutes.
Using Miningcore software
If you use Miningcore as your pool backend, you already have the /api/pools endpoint built in. It runs on port 4000 by default. Just make sure it's publicly accessible:
# Miningcore exposes the API on port 4000 by default
# Make sure nginx/caddy proxies it:
location /api/ {
proxy_pass http://127.0.0.1:4000;
proxy_set_header Host $host;
}
Example: https://smoozypool.es/api/pools — a real Miningcore-compatible endpoint already listed on Mining Scan.
Validate your endpoint
Before submitting, test that your endpoint returns valid data:
Submit your pool
Once your endpoint is working, submit your pool here →
After submission we verify your endpoint automatically. If it passes, we review your submission and list your pool.
Questions?
Use the contact form → for any questions, listing issues, or advertising inquiries.