Wallet API
ErgoScan API
Base URL https://api.ergoscan.me/api/v1. /api/v1 and /v1 are the same router. No API key. Access-Control-Allow-Origin: *.
This host replaces api.ergoplatform.com for a wallet. The explorer website stays at ergoscan.me. Do not build a wallet on /v1/page/*: those responses follow the website layout.
| Official explorer | ErgoScan API | |
|---|---|---|
| Wallet paths | https://api.ergoplatform.com/api/v1/… | The same path on https://api.ergoscan.me/api/v1/… |
| nanoERG and token amounts | JSON numbers | Decimal strings. Parse with BigInt. |
| Heights, indexes, sizes, timestamps | JSON numbers. Timestamps are Unix milliseconds. | The same. |
| Box by id and transaction by id | Explorer document | The same field names. value and asset amounts are strings. |
| Register search and a full unspent dump | Served | HTTP 501. A wallet does not need them. |
Not served
These official paths return HTTP 501 { error: "not_implemented", status: 501 }. Register predicates and an unbounded unspent dump can scan the whole chain. A wallet does not need them.
POST /api/v1/boxes/searchPOST /api/v1/boxes/unspent/searchPOST /api/v1/boxes/unspent/search/unionGET /api/v1/boxes/unspent/streamGET /api/v1/blocks/byGlobalIndex/stream
Amounts
nanoERG and token raw amounts are decimal strings, including inside boxes, balances, and assets. Official JSON numbers already lose precision past 2^53. Heights, indexes, sizes, and timestamps stay JSON numbers.
Index
globalIndex on a box or a transaction is ErgoScan's own sequence. The same box carries the same globalIndex in a list and in GET /boxes/{id}. It is not the official explorer's global index. Box and transaction byGlobalIndex streams use this sequence: both bounds are required, and the window is at most 10000.
dataInputs on a transaction is an empty list. inputs and outputs are filled.
Bounded lookups
Exact byErgoTree and template-hash lookups are live: limit at most 100, offset at most 500. unspent/byLastEpochs/stream accepts 1–4 epochs and limit at most 100.
Wallet paths
Paths are relative to /api/v1. List responses use items and total. total comes from the address summary, not a live count of boxes. Prefer cursor when hasMore is true. offset is a small skip (at most 500) on an address-filtered index.
GET /boxes/unspent/byAddress/{address}GET /boxes/unspent/unconfirmed/byAddress/{address}GET /boxes/unspent/byTokenId/{tokenId}GET /boxes/{boxId}GET /transactions/{txId}GET /addresses/{address}/balance/confirmedGET /addresses/{address}/balance/totalGET /addresses/{address}/transactionsGET /tokens/{tokenId}GET /tokens/bySymbol/{symbol}GET /epochs/paramsGET /blocks/headersGET /infoGET /networkStatePOST /mempool/transactions/submit
curl -sS https://api.ergoscan.me/api/v1/info curl -sS https://api.ergoscan.me/api/v1/epochs/params
Rate limit
Reads: 120 requests per minute per IP. Submit (POST /mempool/transactions/submit): 10 per minute and 2 in flight. Over the limit the API returns HTTP 429 { error: "rate_limited", retryAfterSec }.
Machine-readable spec: /openapi.json.