{"openapi":"3.0.3","info":{"title":"ErgoScan API","version":"1.0.0","description":"# ErgoScan API\n\nBase URL: https://api.ergoscan.me/api/v1\n\n`/api/v1` and `/v1` are the same router. No API key. `Access-Control-Allow-Origin: *`.\n\nThis host replaces `api.ergoplatform.com` for a wallet. The explorer website stays at https://ergoscan.me. Do not build a wallet on `/v1/page/*`: those responses follow the website layout.\n\n| | Official explorer | ErgoScan API |\n| --- | --- | --- |\n| Wallet paths | https://api.ergoplatform.com/api/v1/… | The same path on https://api.ergoscan.me/api/v1/… |\n| nanoERG and token amounts | JSON numbers | Decimal strings. Parse with BigInt. |\n| Heights, indexes, sizes, timestamps | JSON numbers. Timestamps are Unix milliseconds. | The same. |\n| Box by id and transaction by id | Explorer document | The same field names. value and asset amounts are strings. |\n| Register search and a full unspent dump | Served | HTTP 501. A wallet does not need them. |\n\n## Not served\n\nThese 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.\n\n- `POST /api/v1/boxes/search`\n- `POST /api/v1/boxes/unspent/search`\n- `POST /api/v1/boxes/unspent/search/union`\n- `GET /api/v1/boxes/unspent/stream`\n- `GET /api/v1/blocks/byGlobalIndex/stream`\n\n## Amounts\n\nnanoERG 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.\n\n## Index\n\n`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.\n\n`dataInputs` on a transaction is an empty list. `inputs` and `outputs` are filled.\n\n## Bounded lookups\n\nExact `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.\n\n## Wallet paths\n\nPaths 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.\n\n- `GET /boxes/unspent/byAddress/{address}`\n- `GET /boxes/unspent/unconfirmed/byAddress/{address}`\n- `GET /boxes/unspent/byTokenId/{tokenId}`\n- `GET /boxes/{boxId}`\n- `GET /transactions/{txId}`\n- `GET /addresses/{address}/balance/confirmed`\n- `GET /addresses/{address}/balance/total`\n- `GET /addresses/{address}/transactions`\n- `GET /tokens/{tokenId}`\n- `GET /tokens/bySymbol/{symbol}`\n- `GET /epochs/params`\n- `GET /blocks/headers`\n- `GET /info`\n- `GET /networkState`\n- `POST /mempool/transactions/submit`\n\n```\ncurl -sS https://api.ergoscan.me/api/v1/info\ncurl -sS https://api.ergoscan.me/api/v1/epochs/params\n```\n\n## Rate limit\n\nReads: 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 }`.\n\nMachine-readable spec: https://api.ergoscan.me/openapi.json\n"},"servers":[{"url":"https://api.ergoscan.me"}],"paths":{"/v1/health":{"get":{"summary":"Public liveness: ok, network, height, mempool count. No node URL or disk.","tags":["ErgoScan"]}},"/v1/info":{"get":{"summary":"Node info lite","tags":["ErgoScan"]}},"/v1/mempool":{"get":{"summary":"Mempool ball snapshot","tags":["ErgoScan"]}},"/v1/fees/histogram":{"get":{"summary":"Fee histogram + ETA","tags":["ErgoScan"]}},"/v1/fees/eta":{"get":{"summary":"Next ordering block ETA","tags":["ErgoScan"]}},"/v1/indexer/status":{"get":{"summary":"Indexer window from snapshot","tags":["ErgoScan"]}},"/v1/blocks":{"get":{"summary":"Latest blocks from indexer snapshot `blocks_latest` (not the node). Raw array when no offset/cursor. Additive ?limit=&offset= or ?cursor= (height) returns { items, hasMore, nextCursor, offset, updatedAt }. Pager is keyset on `blocks.height`, not a 50-row snapshot cap. Additive userValueNano = output sum minus coinbase (emission-box recycle).","tags":["ErgoScan"]}},"/v1/blocks/{id}":{"get":{"summary":"Block card from indexer tables (not the node). Additive ?limit=&offset= packs txs (default 25). limit=0 is header only. Additive txs[].tokenCount = distinct tokens on boxes created or spent by that tx. Additive userValueNano = output sum minus coinbase.","tags":["ErgoScan"]}},"/v1/transactions/{id}":{"get":{"summary":"Transaction from the index only. Mempool RAM first (input addresses hydrated from boxes, not the node). Confirmed = transactions row + boxes that exist. Additive indexInBlock, prevId, nextId, valueNano, inputCount, outputCount, assetsComplete, tokenMeta[], gix (our sequential index or null; not official explorer). Additive rent=rent|rent-renew from rent_collected at the inclusion height (null when the writer has no protocol row). assetsComplete=false suppresses settlement claims in the UI. 404 if missing. source=mempool|indexer.","tags":["ErgoScan"]}},"/v1/boxes/{id}":{"get":{"summary":"Box from the index (mempool RAM if unconfirmed). creationHeight is the declared rent clock; settlementHeight and blockId are creating-tx inclusion (null in mempool). Additive registersTyped plus ergoTreeConstants / ergoTreeScript / ergoTreeTemplateHash (SHA-256 of template bytes; decode on this GET only). Additive gix: our sequential index or null. Not official explorer globalIndex. Unspent/tx byGlobalIndex streams are live. Exact byErgoTree uses the script index. Template hash uses packed.box_template. Both limit ≤ 100, offset ≤ 500, 4s.","tags":["ErgoScan"]}},"/v1/addresses/{address}/rent-due":{"get":{"summary":"Soonest storage rent on this address. Oldest unspent box via the address index (one row). blocksUntilRent is 0 when already due, a block count when due within 90 days, null otherwise. No node, no box list.","tags":["ErgoScan"]}},"/v1/addresses/{id}":{"get":{"summary":"Address showcase. Activity tape is txs from address_tx (boxLimit=0). Unspent boxes are a separate GET. A boxes timeout returns 200 with sources.boxes=stale and does not 503 the txs tape. Additive activity=0 skips live box UNION (activity {}, sources.activity=deferred). Additive mempoolTxs: pending txs whose outputs/inputs match the address ergoTree (node mempool has trees, not Base58). Not counted in pagination.txs.total.","tags":["ErgoScan"]}},"/v1/addresses/{id}/nfts":{"get":{"summary":"Unspent NFT holdings (additive). EIP-4 emission=1, else 1-unit 0-decimal while meta is thin. Name/art from tokens + issuance box in PG. Never the node.","tags":["ErgoScan"]}},"/v1/tokens":{"get":{"summary":"Token catalog from indexer `tokens` (window, not genesis). Additive limit/offset/sort=last|first|holders|supply|txs|name. Names from `tokens.name` only — no node on this GET. Additive names=0 is a no-op. KPIs: unique holders/txs from indexer token_balances (not SUM of rows).","tags":["ErgoScan"]}},"/v1/tokens/{id}":{"get":{"summary":"Token card from indexer `tokens` + issuance box registers in PG. Additive nft { kind, sha256, url, royalty, collectionTokenId, mintAddress } from EIP-4/24. Never the node. Additive ?market=0 skips Spectrum.","tags":["ErgoScan"]}},"/v1/tokens/{id}/price":{"get":{"summary":"Token price (Spectrum + ERG/USD)","tags":["ErgoScan"]}},"/v1/tokens/{id}/holders":{"get":{"summary":"Top token holders from token_balances. Keyset ?cursor=amount|address (LIMIT 26). Additive ?offset only ranks; ignored when cursor is set. Additive ?dir=asc|desc (amount). Default desc. Additive sharePct is % of tokens.emission, not SUM(token_balances). Additive txCount/firstTs/lastTs from token_balances.tx_count + heights (indexer snapshot); GET COUNT only while seed is NULL. Additive nanoerg/tokenCount from address_summary (pip / inventory).","tags":["ErgoScan"]}},"/v1/tokens/{id}/txs":{"get":{"summary":"Token tx tape from token_tx_move. No box walk. flow=all is transfers, swaps excluded. flow=swap is Spectrum/Lithos buy/sell from defi.trades. flow=mintburn is issuance and real burns. Keyset ?cursor=height:txId.","tags":["ErgoScan"]}},"/v1/tokens/{id}/pools":{"get":{"summary":"Spectrum DEX pools for token","tags":["ErgoScan"]}},"/v1/tokens/search":{"get":{"summary":"Search tokens by name or id. Accepts q or official query. Index first (tokens table), then known/Spectrum. Never api.ergoplatform.com. Additive explorerItems[] as official TokenInfo (string emissionAmount).","tags":["ErgoScan"]}},"/v1/tokens/bySymbol/{name}":{"get":{"summary":"Official alias. All tokens with this exact name (case-insensitive). Array of TokenInfo. tokens table only. Decimals from DB or known Rosen/Spectrum map when DB is 0.","responses":{"200":{"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TokenInfo"}}}}}},"tags":["Wallet compat"]}},"/v1/boxes/unspent/unconfirmed/byAddress/{address}":{"get":{"summary":"Official alias. Mempool RAM outputs for this address. Never the node.","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Items_OutputInfo"}}}}},"tags":["Wallet compat"]}},"/v1/boxes/unspent/byAddress/{address}":{"get":{"summary":"Official alias. Unspent boxes for address. items/total from address_summary.box_count. Keyset nextCursor. offset≤500 on the address index, not a table OFFSET.","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Items_OutputInfo"}}}}},"tags":["Wallet compat"]}},"/v1/boxes/byErgoTree/{tree}":{"get":{"summary":"Boxes with this exact ErgoTree hex. Index via script md5. limit ≤ 100, offset ≤ 500. No total. Timeout 4s → 504.","tags":["Wallet compat"]}},"/v1/boxes/unspent/byErgoTree/{tree}":{"get":{"summary":"Unspent boxes with this exact ErgoTree. Same page caps and timeout.","tags":["Wallet compat"]}},"/v1/boxes/byErgoTreeTemplateHash/{hash}":{"get":{"summary":"Boxes whose ErgoTree shares this template hash (SHA-256 of template bytes, 64 hex). Same value as ergoTreeTemplateHash on GET /boxes/{id}. limit ≤ 100, offset ≤ 500. No total. Timeout 4s → 504.","tags":["Wallet compat"]}},"/v1/boxes/unspent/byErgoTreeTemplateHash/{hash}":{"get":{"summary":"Unspent boxes for this template hash. Same page caps and timeout.","tags":["Wallet compat"]}},"/v1/boxes/unspent/byGlobalIndex/stream":{"get":{"summary":"Unspent boxes in our gix window. minGix+maxGix required, max−min+1≤10000. globalIndex and additive gix are ours, not official explorer. Timeout 4s → 504.","tags":["Wallet compat"]}},"/v1/transactions/byGlobalIndex/stream":{"get":{"summary":"Transactions in our gix window. Same minGix/maxGix rules. Official-shaped items; globalIndex and additive gix are ours. Timeout 4s → 504.","tags":["Wallet compat"]}},"/v1/assets":{"get":{"summary":"Official deprecated alias of a token catalog page. TokenInfo items from indexer tokens (holders sort). hideNfts=1 skips emission=1. Does not change GET /v1/tokens.","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Items_TokenInfo"}}}}},"tags":["Wallet compat"]}},"/v1/assets/search/byTokenId":{"get":{"summary":"Official alias. Token id / name search, min query length 5. tokens table only.","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Items_TokenInfo"}}}}},"tags":["Wallet compat"]}},"/v1/boxes/byAddress/{address}":{"get":{"summary":"Official alias. Spent+unspent boxes for address, small page. total is page size (no COUNT boxes).","tags":["Wallet compat"]}},"/v1/addresses/{address}/balance/total":{"get":{"summary":"Official alias. confirmed from address_summary + unspent tokens; unconfirmed from mempool RAM. nanoErgs as strings.","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TotalBalance"}}}}},"tags":["Wallet compat"]}},"/v1/epochs/params":{"get":{"summary":"Official alias. Last node /info.parameters from gateway RAM. Not a node GET.","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EpochInfo"}}}}},"tags":["Wallet compat"]}},"/v1/blocks/headers":{"get":{"summary":"Official alias. Recent block headers from indexer snapshot/tables. items + nextCursor.","tags":["Wallet compat"]}},"/v1/networkState":{"get":{"summary":"Official NetworkState names + our network. params from node /info RAM. maxBoxGix/maxTxGix = *_gix_next − 1 (our gix, not official explorer).","tags":["Wallet compat"]}},"/v1/graphql":{"post":{"summary":"Our GraphQL on this gateway. Indexed roots only (box/tx/address/token/gix/mempool/oracles/defi/rosen + submitTx). submitTx shares the REST submit rate limit; node errors map to rejected/submit_failed. Not nautls or SigmaSpace. GET is 405.","tags":["ErgoScan"]}},"/v1/networkStats":{"get":{"summary":"Official uniqueAddressesNum from home snapshot holderCount. Additive hashRate, transactionAverage. No table COUNT.","tags":["Wallet compat"]}},"/v1/mempool/transactions/submit":{"post":{"summary":"Broadcast a signed tx. Shape-checked, then node POST /transactions. Node errors map to rejected/submit_failed. Separate submit rate limit.","tags":["Wallet compat"]}},"/v1/mempool/transactions/byAddress/{address}":{"get":{"summary":"Official alias. Pending txs in gateway RAM that mention the address.","tags":["Wallet compat"]}},"/v1/mempool/boxes/unspent":{"get":{"summary":"Official alias. Outputs currently in mempool RAM.","tags":["Wallet compat"]}},"/v1/nfts/recent":{"get":{"summary":"Recent emission=1 from tokens.first_height. Mempool amount=1 overlay only. Never the node.","tags":["ErgoScan"]}},"/v1/nfts/catalog":{"get":{"summary":"NFT catalog from tokens.emission=1. Additive ?kind=image|audio|video|collection|file|membership uses tokens.nft_kind. Page items include EIP-4 R7 kind from mint registers. Never the node.","tags":["ErgoScan"]}},"/v1/nfts/search":{"get":{"summary":"Search tokens.emission=1 by name or id. Never box_assets, never the node.","tags":["ErgoScan"]}},"/v1/nfts/collections":{"get":{"summary":"Name series (strip #n). Not EIP-34. Index tokens only.","tags":["ErgoScan"]}},"/v1/nfts/collections/{slug}":{"get":{"summary":"Name-series members from tokens.emission=1.","tags":["ErgoScan"]}},"/v1/nfts/issuers":{"get":{"summary":"Issuer-box addresses with ≥2 emission=1 tokens. Not EIP-34 artist.","tags":["ErgoScan"]}},"/v1/nfts/issuers/{address}":{"get":{"summary":"NFTs minted from this issuer-box address.","tags":["ErgoScan"]}},"/v1/richlist":{"get":{"summary":"Top ERG holders from address_summary","tags":["ErgoScan"]}},"/v1/rent/at-risk":{"get":{"summary":"Upcoming storage-rent tape from indexer (not the node)","tags":["ErgoScan"]}},"/v1/transactions/recent":{"get":{"summary":"Recent confirmed txs (snapshot first pack). Additive mempool=1 prepends up to 15 pending when no cursor. Additive ?cursor= keyset (height, index_in_block, id); hasMore/nextCursor. Not TX_WINDOW OFFSET and not a full-table COUNT. Additive category rent | rent-renew when rent_collected has a protocol row in the page height window (collector set → rent, otherwise renewal). Shape columns stay unchanged.","tags":["ErgoScan"]}},"/v1/network/orbit":{"get":{"summary":"Home Earth: crawl live + connected peers, plus top ISO regions","tags":["ErgoScan"]}},"/v1/page/home":{"get":{"summary":"SSR home composite from list snapshots. Hashrate/tx/circulating/CG price/24h/miner share/holderCount/txTotal from indexer; GET does not scan tables, explorer, or CoinGecko. Does not attach userValueNano (coinbase subtract stays on /v1/blocks and the block card). Additive rank/volume24h/change24h/ergUsd copied from snapshot_kv.market (oracle writer CoinGecko). Additive txTotal is the indexer running SUM(blocks.tx_count), not a GET COUNT. Additive rentTape + rentEpochBoxes + rentEpochNano from snapshot_kv.rent (oldest addresses this week; box count and estimated rent due this header epoch; not a live boxes scan).","tags":["ErgoScan"]}},"/v1/page/addresses":{"get":{"summary":"Address list; additive sort=erg|tokens|txs|address|first|last dir=asc|desc. Additive band= and kind= (comma lists, OR / union, same CASE as holder_bands; not a COUNT). Empty = All. Mixed band+kind omits total (overlap). Additive firstTxId/lastTxId from address_tx at first/last height (pack join, not a COUNT).","tags":["ErgoScan"]}},"/v1/page/address/{id}":{"get":{"summary":"Address card header from address_summary (lists=0 default). lists=1 adds txs/boxes. Additive activity=0 skips live box UNION. Additive txCursor keyset on lists (not txOffset). Additive mempoolTxs always (pending txs matched by address ergoTree). Frozen /v1/addresses/{id} still returns the full showcase.","tags":["ErgoScan"]}},"/v1/page/rent":{"get":{"summary":"Storage rent from indexer unspent boxes. Additive tab=oldest|upcoming, offset/limit. KPIs: due + 24h/7d/30d windows (SigmaSpace). Additive inIndex on each window when the horizon is older than min_height. Additive collected from snapshot_kv.rent_history (recreate/taken heuristic; GET does not scan boxes). Additive collected.series / daily / hourly / forecast / miners / minersDay / minersMonth (weekly, daily, last-7d hourly, 30d becomes-due, all-time pool shares, last-720 / last-21600 from rent_collected + blocks). Additive items[].tokens[] (tokenId + name) from box_assets + tokens for the page ids only. Snapshot keys rent + rent_miners; tape is index ORDER BY creation_height.","tags":["ErgoScan"]}},"/v1/prices/erg":{"get":{"summary":"ERG/USD from snapshot_kv.market (oracle writer CoinGecko); home is a copy. Additive rank, volume24h, change24h. GET does not call CoinGecko. Official pool price is /v1/prices/erg/oracle.","tags":["ErgoScan"]}},"/v1/prices/erg/oracle":{"get":{"summary":"Official Erg-USD from snapshot_kv.market (oracle writer), home copy fallback. usd, nanoPerUsd, boxId, height, source=oracle. GET does not scan oracle boxes or call the node.","tags":["ErgoScan"]}},"/v1/platforms":{"get":{"summary":"Classification platforms","tags":["ErgoScan"]}},"/v1/subblocks":{"get":{"summary":"Ordering-window (synthetic on mainnet)","tags":["ErgoScan"]}},"/v1/graph/tx/{id}":{"get":{"summary":"eUTXO box graph from mempool RAM or indexer. Never the node.","tags":["ErgoScan"]}},"/v1/metrics":{"get":{"summary":"Full network metrics dashboard","tags":["ErgoScan"]}},"/v1/metrics/charts":{"get":{"summary":"Block + mempool/fee time series","tags":["ErgoScan"]}},"/v1/rent/box/{id}":{"get":{"summary":"Storage rent report for box","tags":["ErgoScan"]}},"/v1/rent/health":{"get":{"summary":"ergoscan-rent-writer cursors from indexer_state. mode=history|tip, verifyHeight, liveHeight, lag of the tip cursor. GET does not call the node.","tags":["ErgoScan"]}},"/v1/rosen/events":{"get":{"summary":"Rosen bridge events from schema rosen (writer). Additive ?status=processing|completed|fraud and ?cursor=ts:eventId keyset. Empty items when the writer has not run. GET does not call app.rosen.tech or the node.","tags":["ErgoScan"]}},"/v1/rosen/health":{"get":{"summary":"Rosen KPI snapshot (rosen.kpis). ready=false until the writer has created the schema.","tags":["ErgoScan"]}},"/v1/oracles/health":{"get":{"summary":"Oracle writer cursor (schema oracle). mode, scanHeight, ready, live per feed. ready=false until pool_snap exists. Official page is /oracles/ergusd. GET does not scan boxes.","tags":["ErgoScan"]}},"/v1/oracles/{slug}":{"get":{"summary":"Oracle feed from schema oracle. slug=ergusd|erg-usd|xau-erg. Operators are P2PK from R4, not the datapoint P2S. Additive ?range=7d|30d. Empty when the writer has not run. GET does not call byTokenId or the node.","tags":["ErgoScan"]}},"/v1/oracles/{slug}/buyback":{"get":{"summary":"GORT (xau-erg) or DORT (erg-usd) buyback from the index. Box, LP price, mint top-ups, swaps, returns, chart, tape. Reads that NFT's boxes. Does not call the node.","tags":["ErgoScan"]}},"/v1/search":{"get":{"summary":"Same as /v1/resolve (index + mempool). Never the node.","tags":["ErgoScan"]}},"/v1/resolve":{"get":{"summary":"Canonical path from q. Additive. Height may start with # and use thousand separators (#1 885 000, 1,885,000). Hex hits ordered tx → token → block → box. Address: address_summary PK first, else blake2b256 checksum (P2PK/P2SH/P2S, up to 8000 chars). Token name: exact lower(name), else LIKE. Never the node. Empty hits on miss. Cache like lists.","tags":["ErgoScan"]}},"/v1/stream":{"get":{"summary":"WS: mempool.add/remove, fees, node.info, chain.tip { height, headerId } from list snapshot","tags":["ErgoScan"]}},"/openapi.json":{"get":{"summary":"OpenAPI","tags":["ErgoScan"]}}},"components":{"schemas":{"TokenInfo":{"type":"object","required":["id","boxId","emissionAmount","decimals"],"properties":{"id":{"type":"string"},"boxId":{"type":"string"},"emissionAmount":{"type":"string","description":"Decimal string (safer than official int64)"},"name":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"decimals":{"type":"integer"},"type":{"type":"string","nullable":true}}},"TokenAmount":{"type":"object","required":["tokenId","amount","decimals"],"properties":{"tokenId":{"type":"string"},"amount":{"type":"string"},"decimals":{"type":"integer"},"name":{"type":"string","nullable":true}}},"Balance":{"type":"object","required":["nanoErgs","tokens"],"properties":{"nanoErgs":{"type":"string"},"tokens":{"type":"array","items":{"$ref":"#/components/schemas/TokenAmount"}}}},"TotalBalance":{"type":"object","required":["confirmed","unconfirmed"],"properties":{"confirmed":{"$ref":"#/components/schemas/Balance"},"unconfirmed":{"$ref":"#/components/schemas/Balance"},"total":{"$ref":"#/components/schemas/Balance"},"source":{"type":"string"}}},"EpochInfo":{"type":"object","required":["height","storageFeeFactor","minValuePerByte","maxBlockSize","maxBlockCost","blockVersion","tokenAccessCost","inputCost","dataInputCost","outputCost"],"properties":{"height":{"type":"integer"},"storageFeeFactor":{"type":"integer"},"minValuePerByte":{"type":"integer"},"maxBlockSize":{"type":"integer"},"maxBlockCost":{"type":"integer"},"blockVersion":{"type":"integer"},"tokenAccessCost":{"type":"integer"},"inputCost":{"type":"integer"},"dataInputCost":{"type":"integer"},"outputCost":{"type":"integer"},"subblocksPerBlock":{"type":"integer"}}},"OutputInfo":{"type":"object","required":["boxId","value","mainChain"],"properties":{"boxId":{"type":"string"},"transactionId":{"type":"string","nullable":true},"blockId":{"type":"string","nullable":true},"value":{"type":"string"},"index":{"type":"integer","nullable":true},"globalIndex":{"type":"integer","nullable":true},"creationHeight":{"type":"integer","nullable":true},"settlementHeight":{"type":"integer","nullable":true},"ergoTree":{"type":"string","nullable":true},"address":{"type":"string","nullable":true},"assets":{"type":"array","items":{"type":"object","properties":{"tokenId":{"type":"string"},"amount":{"type":"string"}}}},"additionalRegisters":{"type":"object","additionalProperties":{"type":"string"}},"spentTransactionId":{"type":"string","nullable":true},"mainChain":{"type":"boolean"}}},"Items_OutputInfo":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/OutputInfo"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}}},"Items_TokenInfo":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TokenInfo"}},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"}}},"TxIdResponse":{"type":"object","required":["id"],"properties":{"id":{"type":"string"}}},"NetworkState":{"type":"object","properties":{"lastBlockId":{"type":"string","nullable":true},"height":{"type":"integer","nullable":true},"maxBoxGix":{"type":"integer","nullable":true},"maxTxGix":{"type":"integer","nullable":true},"params":{"$ref":"#/components/schemas/EpochInfo"},"network":{"type":"string"}}},"NetworkStats":{"type":"object","properties":{"uniqueAddressesNum":{"type":"integer"},"hashRate":{"type":"number","nullable":true},"transactionAverage":{"type":"number","nullable":true}}}}},"tags":[{"name":"ErgoScan","description":"Native product routes. What the site uses."},{"name":"Wallet compat","description":"Official explorer path aliases over our index. Same suffixes, our data, string amounts."}]}