Every HeroMiners pool answers the same set of read-only HTTP endpoints. There is no key, no account and no sign-up: request a URL and you get JSON back, with Access-Control-Allow-Origin: * set so a page in a browser can call it directly. Use it to build a rig monitor, a payout notifier, a dashboard of your own, or to pull the pool into a spreadsheet.
Base URL
https://alephium.herominers.com
Each coin has its own pool with its own numbers, so pick the one you want above and every example below switches to it. A request needs no headers at all:
curl https://alephium.herominers.com/api/stats
Endpoints
GET/api/stats
Everything the pool knows about itself right now: pool and network hashrate, connected miners and workers, the last block, fees, ports and the payout settings.
Query
address
A payout address. Adds that miner under miner, and under solo_miner if they also mine solo. Omit it and both come back empty.
Returns
An object with pool, network, config, charts, lastblock and payments. Recomputed once per stats cycle, so polling faster than that returns the same numbers.
This is the endpoint to start from. The pool page, the miners page and every chart on this site are built from it.
curl "https://alephium.herominers.com/api/stats?"
GET/api/live_stats
The same payload as /api/stats, but held open until the next stats cycle finishes and then answered. One request per update instead of polling on a timer.
Query
address
Include a miner in the payload, as with /api/stats.
Returns
Identical shape to /api/stats. The request stays open for up to one stats cycle.
Open one connection and reopen it when it answers. Several open at once from the same address are refused with a 503, so do not fan out.
The finder address is masked before it leaves the pool, so this endpoint cannot be used to harvest addresses. time is Unix seconds, reward is in the coin’s smallest unit, and a score ending in 0 or 1 marks a solo block that was paid or orphaned.
Payments the pool has sent, either pool-wide or for one address.
Query
timerequired
Return payments before this Unix timestamp in seconds. Use the current time for the newest page, then the oldest timestamp you received to page backwards.
address
Restrict to one payout address. Omit for every payment the pool has made.
limit
How many to return. Clamped to the pool’s own page size, so a larger number simply returns that.
format
Pass parsed to get { tx, amount, time } objects instead of the raw array.
Returns
Without format, a flat array alternating value and timestamp, each value being txid:amount. Amounts are strings in the coin’s smallest unit and must stay strings: parsing one as a number loses precision on a chain with 18 decimals.
The ten largest miners on the pool, plus the mining-software and regional breakdowns behind the miners page.
Returns
An object with miners, agents, regions, regionHistory and statsDisplay. Addresses are masked. When a panel is not enabled its array comes back empty and statsDisplay says so.
Search the pool’s blocks by height, block hash or finder address, across both pending and paid blocks at once.
Query
qrequired
A height, a block hash or an address.
offset
Skip this many results. The reply carries hasMore so you know whether to ask again.
Returns
An object with pending and matured, in the same alternating format as /api/get_blocks, plus totalMatched, offset, limit and hasMore.
Search is rate limited per address, and going over it returns rateLimited with the exact wait in retryMs rather than a bare error. Call /api/get_blocks_search_config first to learn the length bounds and whether search is switched on at all.
The payout threshold currently set for an address, in whole coins.
Query
addressrequired
The payout address.
Returns
{ status: "done", level }. An address that has never set one gets the pool minimum.
The matching /api/set_miner_payout_level writes it, and it is not open to anyone: the request has to come from the address’s own mining IP. That check, and the rate limit in front of it, are described on the settings tab of the dashboard rather than here.
Whether an address is currently blocked from mining or from being paid, and any message the operator left for it.
Query
addressrequired
The payout address.
Returns
{ banned }, and when banned also blockMining, blockPayments and reason. Reports whether the address is currently blocked from mining, from being paid, or neither.
One feed covers every coin we run, so a tool that watches several pools needs a single request rather than one per coin. It carries each coin against the fiat currencies this site offers, plus BTC.
curl https://herominers.com/prices.json
Using it well
Poll on the pool's own clock. The numbers are recomputed once per stats cycle, and config.updateInterval in the /api/stats reply says how long that is in seconds. Asking more often than that returns the same answer and costs both of us bandwidth.
Prefer /api/live_stats to a fast timer. It answers the moment there is something new, which is both quicker for you and lighter on the pool than polling.
Keep amounts as strings. Rewards and balances come back in the coin's smallest unit. On a chain with 18 decimals those integers run past what a JavaScript number can hold exactly, so parsing one silently rounds a payout.
Expect addresses to be masked. Public listings hide the middle of every address. Your own full address is only ever needed by you, and only where you supply it.
Handle a rate limit as a wait, not a failure. Where a limit applies the reply carries retryMs. Back off for that long and retry rather than hammering.
Say who you are. A User-Agent naming your tool is not required, but it means we can tell you about a change instead of guessing what broke.