ExplorerPool
Wallet

Explorer API

Read public chain data from the Morana gateway.

These are gateway routes. Use your configured public gateway as the base URL. The explorer reads them on the server; the browser is never given an internal service address.
MethodEndpointReturnsLimits
GET/stats/networkHeight, index position, hashrate and shielded transactions (24h)Changes every block
GET/server/infoNetwork, genesis and API schemaAlso names the gateway build: build_commit and build_version (contract §2.18)
GET/explorer/blocks?limit=20Blocks, newest firstlimit ≤ 50; from is a block height
GET/explorer/headers?limit=20Block headers, newest first, with the header bytes for your own KawPow checklimit ≤ 50; from is a block height
GET/explorer/reorgs?limit=50Reorg events this gateway's node saw: fork height, depth, old and new tip, rolled-back blockslimit ≤ 200; the last 1000 events are kept
GET/explorer/chaintipsChain tips of the gateway's node; a valid-fork tip is an orphan branchno parameters
GET/block/{height}One block by heightA block hash goes to /block/hash/{hash}
GET/block/hash/{hash}One block by hash64 hexadecimal characters
GET/tx/{txid}A confirmed transaction; the shielded part as counts only, never amountsUnconfirmed: /explorer/mempool/{txid}
GET/explorer/tx/{txid}/detailTransaction breakdown: scripts, witnesses and previous outputs; raw bytes only for a fully transparent transactionAn unknown transaction answers 502, not 404; use /explorer/search
GET/explorer/mempoolTransaction IDs waiting in the node's mempoolChanges every few seconds
GET/explorer/mempool/feesMempool fee-rate histogram and low / medium / high estimates; aggregates only, no transaction IDsOne snapshot every 10 seconds
GET/explorer/mempool/{txid}One unconfirmed transaction; if it is not in the mempool, an absence answer with evidenceTwo answer forms: the transaction, or in_mempool: false
GET/explorer/search?q=Search by height, block hash, transaction ID, address or nameReturns the kind found and the route to open
GET/address/{address}Balance and unspent outputs of a transparent addressPrivate addresses are refused (400)
GET/explorer/address/{address}/history?limit=25Transparent history of an address, newest first, with index coverageUse the previous page’s next_from string as from, unchanged. Omit from for the first page. A numeric height returns 400.
GET/explorer/supplyTransparent, private and total supply with the node's schedule checkAmounts are atom strings
GET/explorer/private?window=1440Sapling pool and transaction share1–10,080 blocks; default 1,440
GET/explorer/emissionNext-block subsidy, allocations and MDEVCached here for 20 seconds
GET/explorer/dev-recipientCurrent developer-share recipient and scheduled recipient change (MDEV)no parameters
GET/explorer/poolPublic pool statisticsMissing configuration → 503
GET/explorer/txs?limit=20Latest transactions and record typeslimit ≤ 50; next_cursor continues the snapshot
GET/explorer/stats/timeseries?metric=hashrate&window=60Network historyDefault 60; node metrics ≤ 100; index metrics ≤ 500
GET/network/paramsNetwork parameters: relay fee floor, private action fee, relay stake S(E), address prefixes, coinbase maturitynull means not measured, never zero
GET/network/relaysThe on-chain relay registry at the tipAmounts are atom strings
GET/network/relay-payouts?address=Relay payouts to one payout addressThe address must be a transparent address of this network
GET/network/roster/snapshotThe relay roster fixed at the start of the epochDiffers from the registry at the tip by design
GET/network/roster/v2Roster with placement and MREP anchorsVerify the root against the chain
GET/network/roster/descriptorsSigned relay descriptors, byte for byte, with the gateway's per-descriptor signature check503 when there is nothing to check against, never an empty list
GET/morid/name/{name}A MORID name record and the unified address its owner declaredAbsence is not proof; see completeness
GET/morid/name/{name}/proofMNST proof with name term and renewalsVerify the proof against block commitments
GET/registrations/name/{name}Registration history of a nametrust: unverified; truncated lists are marked
GET/morid/ladderPrice ladder of a free name by length, with the demand multiplierNo parameters: the name you are pricing is never sent
GET/morid/quote?name=Price of a registered name (owned, in grace or in auction): renewal and buy-backFree names answer 404 without a price; use the ladder
POST/tx/sendBroadcast one signed transaction: {"raw_tx": "<hex>"}Only signed hex; key material is refused (400)
POST/tx/sendpackageBroadcast a parent and child together (fee bumping); the node's verdict is returned as is≤ 25 transactions, ≤ 404,000 bytes; rejected → 422

Machine-readable description

The same routes as the table above, as one OpenAPI 3.1 document in JSON — also at /api/openapi.json. Load it into Postman, Insomnia, Swagger UI or a client generator. The texts inside the document are in English.

Request example

curl --get "$GATEWAY/explorer/stats/timeseries" \
  --data-urlencode "metric=difficulty" \
  --data-urlencode "window=60"

Reading the response

Amounts ending in _sat are integer strings in atoms (100,000,000 atoms = 1 XMOR). Keep them as strings or use arbitrary-precision integers. A null value is unavailable, not zero.

Series metrics: hashrate, difficulty, txs_per_block, shielded_outputs, shielded_spends, name_records and relay_payout_epochs. Relay payouts use epochs on the horizontal axis. Shielded series count components; they do not show transferred amounts.

Pagination and failures

Pass next_cursor unchanged. If a chain reorganization invalidates the snapshot, restart from the first page. HTTP 400 means invalid input; 429 means the request budget is exhausted; 502 means the upstream response is unavailable; 503 means the index, snapshot or configured pool cannot currently serve the request.

Transaction continuation pages have a default gateway budget of 30 requests per second (burst 60). Initial requests use the operator-configured general budget. Cache responses and back off after a rate limit.