Pools 18
Miners N/A
Workers N/A
Developers

Pool API

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.

curl "https://alephium.herominers.com/api/live_stats?"
GET /api/stats_address

One miner: current and average hashrate, valid and stale shares, balance, amount paid, and the same figures per worker.

Query
addressrequired
The payout address to look up.
Returns

The miner totals plus a workers object keyed by worker name. An address that has never mined here answers with an error rather than an empty miner.

curl "https://alephium.herominers.com/api/stats_address?address=…"
GET /api/get_blocks

Blocks the pool has found and already paid out.

Query
heightrequired
Return blocks below this height. Pass a number far above the tip for the newest page, then the lowest height you received to page backwards.
Returns

A flat array alternating value and height: [block, height, block, height, ...]. Each block is colon separated:

0hash1time2difficulty3shares4score5nonce6status7reward8finder9region10rewardScheme

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.

curl "https://alephium.herominers.com/api/get_blocks?height=…"
GET /api/get_payments

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.

curl "https://alephium.herominers.com/api/get_payments?time=…"
GET /api/get_miners_stats

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.

curl "https://alephium.herominers.com/api/get_miners_stats"
GET /api/get_miner_payout_level

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.

curl "https://alephium.herominers.com/api/get_miner_payout_level?address=…"
GET /api/miner_ban_status

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.

curl "https://alephium.herominers.com/api/miner_ban_status?address=…"

Prices

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.