Explorer API
Read public chain data from the Morana gateway.
| Method | Endpoint | Returns | Limits |
|---|---|---|---|
GET | /stats/network | Height, index position, hashrate and shielded transactions (24h) | Changes every block |
GET | /server/info | Network, genesis and API schema | Also names the gateway build: build_commit and build_version (contract §2.18) |
GET | /explorer/blocks?limit=20 | Blocks, newest first | limit ≤ 50; from is a block height |
GET | /explorer/headers?limit=20 | Block headers, newest first, with the header bytes for your own KawPow check | limit ≤ 50; from is a block height |
GET | /explorer/reorgs?limit=50 | Reorg events this gateway's node saw: fork height, depth, old and new tip, rolled-back blocks | limit ≤ 200; the last 1000 events are kept |
GET | /explorer/chaintips | Chain tips of the gateway's node; a valid-fork tip is an orphan branch | no parameters |
GET | /block/{height} | One block by height | A block hash goes to /block/hash/{hash} |
GET | /block/hash/{hash} | One block by hash | 64 hexadecimal characters |
GET | /tx/{txid} | A confirmed transaction; the shielded part as counts only, never amounts | Unconfirmed: /explorer/mempool/{txid} |
GET | /explorer/tx/{txid}/detail | Transaction breakdown: scripts, witnesses and previous outputs; raw bytes only for a fully transparent transaction | An unknown transaction answers 502, not 404; use /explorer/search |
GET | /explorer/mempool | Transaction IDs waiting in the node's mempool | Changes every few seconds |
GET | /explorer/mempool/fees | Mempool fee-rate histogram and low / medium / high estimates; aggregates only, no transaction IDs | One snapshot every 10 seconds |
GET | /explorer/mempool/{txid} | One unconfirmed transaction; if it is not in the mempool, an absence answer with evidence | Two answer forms: the transaction, or in_mempool: false |
GET | /explorer/search?q= | Search by height, block hash, transaction ID, address or name | Returns the kind found and the route to open |
GET | /address/{address} | Balance and unspent outputs of a transparent address | Private addresses are refused (400) |
GET | /explorer/address/{address}/history?limit=25 | Transparent history of an address, newest first, with index coverage | Use the previous page’s next_from string as from, unchanged. Omit from for the first page. A numeric height returns 400. |
GET | /explorer/supply | Transparent, private and total supply with the node's schedule check | Amounts are atom strings |
GET | /explorer/private?window=1440 | Sapling pool and transaction share | 1–10,080 blocks; default 1,440 |
GET | /explorer/emission | Next-block subsidy, allocations and MDEV | Cached here for 20 seconds |
GET | /explorer/dev-recipient | Current developer-share recipient and scheduled recipient change (MDEV) | no parameters |
GET | /explorer/pool | Public pool statistics | Missing configuration → 503 |
GET | /explorer/txs?limit=20 | Latest transactions and record types | limit ≤ 50; next_cursor continues the snapshot |
GET | /explorer/stats/timeseries?metric=hashrate&window=60 | Network history | Default 60; node metrics ≤ 100; index metrics ≤ 500 |
GET | /network/params | Network parameters: relay fee floor, private action fee, relay stake S(E), address prefixes, coinbase maturity | null means not measured, never zero |
GET | /network/relays | The on-chain relay registry at the tip | Amounts are atom strings |
GET | /network/relay-payouts?address= | Relay payouts to one payout address | The address must be a transparent address of this network |
GET | /network/roster/snapshot | The relay roster fixed at the start of the epoch | Differs from the registry at the tip by design |
GET | /network/roster/v2 | Roster with placement and MREP anchors | Verify the root against the chain |
GET | /network/roster/descriptors | Signed relay descriptors, byte for byte, with the gateway's per-descriptor signature check | 503 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 declared | Absence is not proof; see completeness |
GET | /morid/name/{name}/proof | MNST proof with name term and renewals | Verify the proof against block commitments |
GET | /registrations/name/{name} | Registration history of a name | trust: unverified; truncated lists are marked |
GET | /morid/ladder | Price ladder of a free name by length, with the demand multiplier | No 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-back | Free names answer 404 without a price; use the ladder |
POST | /tx/send | Broadcast one signed transaction: {"raw_tx": "<hex>"} | Only signed hex; key material is refused (400) |
POST | /tx/sendpackage | Broadcast 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.