{"openapi":"3.0.3","info":{"title":"ErgoScan API","version":"1.0.0","description":"# Introduction\nAccess ErgoScan data such as blocks, boxes, transactions, addresses, tokens, NFTs, Spectrum DEX, Rosen, oracles, storage rent and mempool.\n\nUse our free API to power wallets and applications. No signup. No key. Same host as the explorer: https://ergoscan.me\n\nA link to ErgoScan is welcome. It is not required.\n\n# API Specification\nThis API is documented in **OpenAPI format** at https://ergoscan.me/openapi.json\n\nHuman docs: https://ergoscan.me/docs\n\n`/api/v1/*` and `/v1/*` are the same router. GraphQL is **POST** only (`/v1/graphql`, `/api/v1/graphql`). GET GraphQL returns 405.\n\nResponses come from our Postgres index and mempool RAM. This is the ErgoScan explorer API, not a live proxy of another site.\n\nnanoERG and token raw amounts are decimal **strings**. Parse with BigInt. Official explorer uses int64 and overflows LP and emission.\n\nHeights, global indexes, and sizes are JSON numbers. Timestamps are milliseconds since the Unix epoch (UTC).\n\nUser GET does not call the node. The only user write is `POST /mempool/transactions/submit` and GraphQL `submitTx`. Client errors are `rejected` or `submit_failed`.\n\nAn address that fails the Ergo checksum returns HTTP 400 `{ error: \"bad_address\", reason: \"checksum\" }`. A valid address with no history returns an empty result.\n\nExisting fields stay. New fields and paths may appear. `GET /tokens` catalog shape is frozen.\n\nGraphQL reads the same index. Query depth ≤ 7. gix windows ≤ 10000 (4s timeout). `submitTx` shares the submit rate limit.\n\n# Cross-Origin Resource Sharing\nThis API sends `Access-Control-Allow-Origin: *`. Wallets and dApps may call from the browser. Do not send cookies or credentials.\n\n# Authentication\nThis API does not require authentication. There is no API key and no paid plan.\n\n# Pagination\nThis API uses keyset (cursor) pagination. When another page exists the JSON includes `hasMore: true` and `nextCursor`. Repeat the request with `?cursor=` set to that value.\n\nWallet list endpoints also accept `limit` (max 100) and `offset` (max 500) as a small skip on an address-filtered index, not a table OFFSET down the chain. Prefer `cursor`.\n\n# Rate Limit\nReads: **120 requests per minute per IP**. The window is one minute.\n\nSubmit (`POST /mempool/transactions/submit` and GraphQL `submitTx`): **10 per minute** and **2 in flight**, one shared bucket.\n\nOver the limit the API returns HTTP 429 `{ error: \"rate_limited\", retryAfterSec }`. Read responses also send `X-RateLimit-Limit` and `X-RateLimit-Remaining`.\n\nWebSocket `/v1/stream` and `/v1/media/` are not counted in the read bucket."},"servers":[{"url":"https://ergoscan.me"},{"url":"/"}],"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."}]}