Skip to main content
ZondScan home

ZondScan API

Free public REST API for QRL 2.0 data. No API key. No signup.

46 endpoints serve blocks, transactions, addresses, tokens, validators, gas data, and contract tooling for the QRL 2.0 public testnet, straight from the ZondScan indexer. The whole surface is described by one OpenAPI 3.1 document.

Getting started

Base URL

https://zondscan.com/api

The search redirect and the faucet endpoints are served by the explorer web app at the site root; the reference below shows their full paths.

First request

curl -s "https://zondscan.com/api/blocks?page=1&limit=5"

This returns the five newest blocks as JSON. Every data endpoint responds with JSON and needs no authentication headers.

New to QRL 2.0? The Learn section has guides on reading transactions, units, validators, and more.

Conventions

Pagination

List endpoints take page and limit query parameters, and limit is capped at 100 items. Most list endpoints number pages from 1. The contract and token list endpoints number pages from 0. Each endpoint below documents its own defaults.

Numeric encoding

On-chain quantities such as block fields, gas values, and raw transaction values are 0x-prefixed hexadecimal strings. Indexed aggregates are decimal strings or JSON numbers. Coin amounts are denominated in Quanta (1 Quanta = 10^9 Shor = 10^18 Planck), and fields carrying exact amounts use decimal strings. See the units guide or the unit converter.

Addresses

Addresses in responses are Q-prefixed, the canonical QRL 2.0 form, for example Q20d20b8026b8f02540249f42acbd6181dc4a0a48. Most lookup parameters accept both the Q form and the 0x form of the same 40 hex characters; each parameter documents its accepted forms.

Caching

Hot endpoints are cached server side for 5 to 30 seconds, noted per endpoint in the reference below. The transaction detail endpoint is deliberately uncached so a newly mined transaction shows its true confirmation count immediately.

Rate limits and CORS

GET endpoints carry no rate limits today beyond fair use. They respond with Access-Control-Allow-Origin: *, so any web page can call them directly from the browser.

POST endpoints allow cross-origin browser access only from the explorer's own origins and from browser-extension origins. Browser apps hosted elsewhere should call POST endpoints from their server. The three contract POST endpoints carry per-IP rate limits; when a limit is exhausted the API returns 429 with the body {"error": "rate limit exceeded"}.

EndpointPer-IP bucketRefill rate
POST /api/contract/verify5 requests5 per minute
POST /api/contract/call60 requests60 per minute
POST /api/contract/explain/{address}10 requests4 per minute

AI explanations are additionally capped at 5 regenerations per contract per rolling 7 day window. The faucet claim endpoint uses a cooldown per address and per IP (24 hours by default) and reports the remaining wait in a Retry-After header.

Run it locally

The whole explorer stack is open source: the chain synchronizer, the REST API, and this frontend live in one repository at github.com/DigitalGuards/zondscan. Docker Compose starts every service: the frontend serves on port 3000 and the API on port 8082.

Quick start

git clone https://github.com/DigitalGuards/zondscan.git
cd zondscan
docker compose up -d

Endpoint reference

Every endpoint, grouped the same way as the OpenAPI document. Each card links to itself, so anchors are shareable.

46 endpoints

Status

1 endpoint

Service health.

GET/api/health#

Service health check

Pings the database with a 3 second budget. Returns 200 when the API can reach its data store and 503 when it cannot.

Example request

curl -s "https://zondscan.com/api/health"
Try it

Example response

{
  "status": "ok"
}

Network overview and QRL market data.

GET/api/overview#

Network and market overview

Homepage hero data: market figures, wallet count, circulating supply, daily volume, validator count, and contract count in one call. Cached server side for 10 seconds.

Example request

curl -s "https://zondscan.com/api/overview"
Try it

Example response

{
  "marketcap": 32500000,
  "currentPrice": 0.42,
  "priceChange24h": -1.8,
  "countwallets": 10412,
  "circulating": "65000000",
  "volume": 1532,
  "tradingVolume": 210034,
  "validatorCount": 128,
  "contractCount": 342,
  "status": {
    "syncing": true,
    "dataInitialized": true
  }
}
GET/api/price-history#

Historical price samples

Price, market cap, and volume snapshots for charts and wallet apps.

Parameters

NameInTypeRequiredDescription
intervalquery4h | 12h | 24h | 7d | 30d | allnoTime window for the returned samples. Default 24h.

Example request

curl -s "https://zondscan.com/api/price-history?interval=24h"
Try it

Blocks

4 endpoints

Block lists, block details, and block size history.

GET/api/latestblock#

Latest indexed block height

Returns the latest synced block number as a decimal integer, plus the current QRL/USD price so fee displays need no second request. Cached server side for 5 seconds.

Example request

curl -s "https://zondscan.com/api/latestblock"
Try it

Example response

{
  "blockNumber": 148512,
  "qrlUsdPrice": 0.42
}
GET/api/blocks#

Paginated block list

Newest blocks first, with a per-block activity rollup (token transfers and internal calls). The reported total is capped at 300 pages worth of blocks. Cached server side for 10 seconds.

Parameters

NameInTypeRequiredDescription
pagequeryintegernoPage number, starting at 1. Default 1.
limitqueryintegernoBlocks per page. Capped at 100. Default 5.

Example request

curl -s "https://zondscan.com/api/blocks?page=1&limit=5"
Try it

Example response

{
  "blocks": [
    {
      "number": "0x24420",
      "hash": "0x8a4f0c2b7d1e5f3a9c6b8d0e2f4a6c8e0b2d4f6a8c0e2b4d6f8a0c2e4b6d8f0a",
      "parentHash": "0x7b3e0d1a6c0d4e2f8b5a7c9d1e3f5a7b9d1f3a5c7e9b1d3f5a7c9e1b3d5f7a9c",
      "timestamp": "0x6a743280",
      "gasUsed": "0x5208",
      "gasLimit": "0x1c9c380",
      "baseFeePerGas": "0x3b9aca00",
      "miner": "Q20d20b8026b8f02540249f42acbd6181dc4a0a48",
      "size": "0x2d0",
      "transactions": []
    }
  ],
  "total": 1500,
  "blockActivity": {
    "0x24420": {
      "tokenTransfers": 2,
      "internalCalls": 1
    }
  }
}
GET/api/block/{query}#

Block detail

Fetches one block by number, in decimal or 0x-prefixed hex form, plus per-transaction activity counts.

Parameters

NameInTypeRequiredDescription
querypathstringyesBlock number as a decimal integer or 0x-prefixed hex string.

Example request

curl -s "https://zondscan.com/api/block/148512"
Try it

Example response

{
  "block": {
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
      "number": "0x24420",
      "hash": "0x8a4f0c2b7d1e5f3a9c6b8d0e2f4a6c8e0b2d4f6a8c0e2b4d6f8a0c2e4b6d8f0a",
      "timestamp": "0x6a743280",
      "gasUsed": "0x5208",
      "gasLimit": "0x1c9c380",
      "transactions": []
    }
  },
  "txActivity": {}
}
GET/api/blocksizes#

Block size time series

Precomputed block size samples for charts, sorted by timestamp ascending and capped at 2000 points. Cached server side for 30 seconds.

Example request

curl -s "https://zondscan.com/api/blocksizes"
Try it

Confirmed transactions, the latest-transactions feed, and pending mempool transactions.

GET/api/txs#

Paginated network transaction list

Network-wide confirmed transactions, newest first, with the total count and the latest block height for confirmation math. Cached server side for 10 seconds.

Parameters

NameInTypeRequiredDescription
pagequeryintegernoPage number, starting at 1. Default 1.
limitqueryintegernoItems per page. Capped at 100. Default 10.

Example request

curl -s "https://zondscan.com/api/txs?page=1&limit=10"
Try it
GET/api/transactions#

Latest transactions feed

Fixed-size feed of the most recent confirmed transactions, used by the homepage. Cached server side for 5 seconds.

Example request

curl -s "https://zondscan.com/api/transactions"
Try it
GET/api/tx/{query}#

Transaction detail

Full detail for one confirmed transaction: transfer record, live receipt status and event logs, calldata, token transfers, internal calls, and contract metadata for decoding. This endpoint is deliberately uncached so a newly mined transaction shows its true confirmation count immediately.

Parameters

NameInTypeRequiredDescription
querypathstringyesTransaction hash: 0x followed by 64 hex characters.

Example request

curl -s "https://zondscan.com/api/tx/0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d"
Try it

Example response

{
  "response": {
    "ID": "665f1c2ab3d4e5f60718293a",
    "BlockNumber": "0x24420",
    "BlockTimestamp": "0x6a743280",
    "From": "Q20d20b8026b8f02540249f42acbd6181dc4a0a48",
    "To": "Q105c1fdb2a1b03f8b256d6a0b7a0da2a30653d19",
    "TxHash": "0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d",
    "Value": "0x2386f26fc10000",
    "GasUsed": "0x5208",
    "GasPrice": "0x3b9aca00",
    "Nonce": "0x4",
    "Size": "0x2d0"
  },
  "latestBlock": 148512,
  "receiptStatus": "0x1"
}
GET/api/coinbase/{query}#

Raw transfer record lookup

Returns the stored transfer record for one transaction hash. A missing transaction still returns 200 with an empty record; this preserves the endpoint's historical behavior.

Parameters

NameInTypeRequiredDescription
querypathstringyesTransaction hash: 0x followed by 64 hex characters.

Example request

curl -s "https://zondscan.com/api/coinbase/0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d"
Try it
GET/api/pending-transactions#

Paginated mempool transactions

Transactions currently observed in the mempool. Cached server side for 5 seconds, matching mempool turnover.

Parameters

NameInTypeRequiredDescription
pagequeryintegernoPage number, starting at 1. Default 1.
limitqueryintegernoItems per page. Capped at 100. Default 10.

Example request

curl -s "https://zondscan.com/api/pending-transactions?page=1&limit=10"
Try it
GET/api/pending-transaction/{hash}#

Pending transaction detail

Detail for one mempool transaction, including verified-contract metadata for the recipient when available. Returns 404 once the transaction has been mined or dropped; clients then fetch /api/tx/{hash} for the confirmed payload.

Parameters

NameInTypeRequiredDescription
hashpathstringyesTransaction hash: 0x followed by 64 hex characters.

Example request

curl -s "https://zondscan.com/api/pending-transaction/0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d"
Try it
GET/api/pending-tx-eta/{hash}#

Inclusion ETA for a pending transaction

Best-effort estimate of when a pending transaction will be included, derived from recent block statistics and the gas queued ahead of it in the mempool. Cached server side for 5 seconds.

Parameters

NameInTypeRequiredDescription
hashpathstringyesTransaction hash: 0x followed by 64 hex characters.

Example request

curl -s "https://zondscan.com/api/pending-tx-eta/0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d"
Try it

Addresses

8 endpoints

Address details, balances, per-address history, and wallet statistics.

GET/api/address/aggregate/{query}#

Address detail aggregation

Everything the address page needs in one call: balance record, transaction counts, activity range, richlist rank, paginated transaction and internal-transaction lists, and contract metadata when the address is a contract. Cached server side for 10 seconds.

Parameters

NameInTypeRequiredDescription
querypathstringyesAddress: Q or 0x followed by 40 hex characters.
pagequeryintegernoPage number for the transaction lists, starting at 1. Default 1.
limitqueryintegernoItems per page. Capped at 100. Default 10.

Example request

curl -s "https://zondscan.com/api/address/aggregate/Q20d20b8026b8f02540249f42acbd6181dc4a0a48?page=1&limit=10"
Try it

Example response

{
  "address": {
    "ObjectId": "665f1c2ab3d4e5f60718293a",
    "id": "Q20d20b8026b8f02540249f42acbd6181dc4a0a48",
    "balance": 12.5,
    "nonce": 3
  },
  "transactions_count": 2,
  "internal_transactions_count": 0,
  "first_seen": 1782300000,
  "last_seen": 1786000000,
  "rank": 57,
  "transactions_by_address": [
    {
      "InOut": 1,
      "TxType": "transfer",
      "Address": "Q20d20b8026b8f02540249f42acbd6181dc4a0a48",
      "From": "Q20d20b8026b8f02540249f42acbd6181dc4a0a48",
      "To": "Q105c1fdb2a1b03f8b256d6a0b7a0da2a30653d19",
      "TxHash": "0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d",
      "TimeStamp": "1786000000",
      "Amount": "3.300000000000000000",
      "PaidFees": "0.000021000000000000",
      "BlockNumber": "148512"
    }
  ],
  "internal_transactions_by_address": [],
  "contract_code": {},
  "latestBlock": 148512,
  "page": 1,
  "limit": 10
}
GET/api/address/{address}/transactions#

Non-zero transactions for an address

Paginated list of value-moving transactions touching the address.

Parameters

NameInTypeRequiredDescription
addresspathstringyesAddress: Q or 0x followed by 40 hex characters.
pagequeryintegernoPage number, starting at 1. Default 1.
limitqueryintegernoItems per page. Capped at 100. Default 5.

Example request

curl -s "https://zondscan.com/api/address/Q20d20b8026b8f02540249f42acbd6181dc4a0a48/transactions?page=1&limit=5"
Try it
GET/api/address/{address}/token-transfers#

Token transfers touching an address

Token and NFT transfer events where the address is sender or recipient, across every contract.

Parameters

NameInTypeRequiredDescription
addresspathstringyesAddress: Q or 0x followed by 40 hex characters.
pagequeryintegernoPage number, starting at 1. Default 1.
limitqueryintegernoItems per page. Capped at 100. Default 5.

Example request

curl -s "https://zondscan.com/api/address/Q20d20b8026b8f02540249f42acbd6181dc4a0a48/token-transfers?page=1&limit=5"
Try it
GET/api/address/{address}/tokens#

Token balances for an address

All indexed token holdings for a wallet. By default every standard is returned (ERC-20 plus per-id ERC-721 and ERC-1155 rows); use the standard filter to scope to one.

Parameters

NameInTypeRequiredDescription
addresspathstringyesAddress: Q or 0x followed by 40 hex characters.
standardqueryERC-20 | ERC-721 | ERC-1155noScope the response to one token standard.

Example request

curl -s "https://zondscan.com/api/address/Q20d20b8026b8f02540249f42acbd6181dc4a0a48/tokens"
Try it
GET/api/address/{address}/nfts#

NFT holdings for an address

Per (contract, tokenID) NFT holdings joined with collection metadata and per-token off-chain metadata (name, image, attributes) in one call. Covers ERC-721 and ERC-1155.

Parameters

NameInTypeRequiredDescription
addresspathstringyesAddress: Q or 0x followed by 40 hex characters.
standardqueryERC-721 | ERC-1155noScope the response to one NFT standard.

Example request

curl -s "https://zondscan.com/api/address/Q20d20b8026b8f02540249f42acbd6181dc4a0a48/nfts"
Try it
GET/api/richlist#

Top addresses by balance

Wallet ranking by indexed balance, with contract flag, first-seen timestamp, and supply share per row. Cached server side for 30 seconds.

Example request

curl -s "https://zondscan.com/api/richlist"
Try it
GET/api/walletdistribution/{query}#

Count addresses above a balance threshold

Returns the number of indexed addresses whose balance exceeds a threshold derived from the supplied value. The value is scaled by 10^12 before comparison against the indexed balance.

Parameters

NameInTypeRequiredDescription
querypathstringyesThreshold value as a decimal integer.

Example request

curl -s "https://zondscan.com/api/walletdistribution/100"
Try it
POST/api/getBalance#

Live balance lookup via the node

Form-encoded balance lookup proxied to the node's qrl_getBalance. Always returns 200: on success balance is a JSON number denominated in Quanta, and on failure balance is an error message string. Because POST endpoints carry a restricted CORS policy, cross-origin browser apps should use GET /api/address/aggregate/{address} instead; it is open to every origin and includes the indexed balance.

Request body (application/x-www-form-urlencoded)

FieldTypeRequiredDescription
addressstringyesQ or 0x prefixed address.

Example request

curl -s -X POST "https://zondscan.com/api/getBalance" --data-urlencode "address=Q20d20b8026b8f02540249f42acbd6181dc4a0a48"

Example response

{
  "balance": 12.5
}

Tokens & NFTs

7 endpoints

Deployed contracts, token summaries, holders, transfers, and NFT metadata.

GET/api/contracts#

Paginated contract list

Deployed contracts with optional search and filters. Pagination is 0-indexed on this endpoint.

Parameters

NameInTypeRequiredDescription
pagequeryintegernoPage number, starting at 0. Default 0.
limitqueryintegernoItems per page. Capped at 100. Default 10.
searchquerystringnoFree-text filter over contract fields.
isTokenquerystringnoFilter to token contracts (true) or non-token contracts (any other value).
standardqueryERC-20 | ERC-721 | ERC-1155noFilter by token standard.

Example request

curl -s "https://zondscan.com/api/contracts?page=0&limit=10"
Try it
GET/api/contracts/counts#

Contract counts by standard

Counts of deployed contracts bucketed by token standard, plus an "other" bucket for non-token contracts. Cached server side for 30 seconds.

Example request

curl -s "https://zondscan.com/api/contracts/counts"
Try it

Example response

{
  "erc20": 120,
  "erc721": 34,
  "erc1155": 12,
  "other": 176
}
GET/api/token/{address}/info#

Token summary

Summary statistics for one token contract: identity, supply, holder count, transfer count, and creation provenance.

Parameters

NameInTypeRequiredDescription
addresspathstringyesContract address: Q or 0x followed by 40 hex characters.

Example request

curl -s "https://zondscan.com/api/token/Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6/info"
Try it

Example response

{
  "contractAddress": "Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6",
  "name": "Example Token",
  "symbol": "EXT",
  "decimals": 18,
  "totalSupply": "1000000000000000000000000",
  "holderCount": 42,
  "transferCount": 310,
  "creatorAddress": "Q20d20b8026b8f02540249f42acbd6181dc4a0a48",
  "creationTxHash": "0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d",
  "creationBlock": "0x1a2b3"
}
GET/api/token/{address}/holders#

Token holders

Holders of a token contract. For NFT contracts an optional tokenID filter scopes to holders of one id; without it holders are aggregated across all ids. Pagination is 0-indexed on this endpoint.

Parameters

NameInTypeRequiredDescription
addresspathstringyesContract address: Q or 0x followed by 40 hex characters.
tokenIDquerystringnoFilter holders to one NFT token id (decimal string).
pagequeryintegernoPage number, starting at 0. Default 0.
limitqueryintegernoItems per page. Capped at 100. Default 25.

Example request

curl -s "https://zondscan.com/api/token/Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6/holders?page=0&limit=25"
Try it
GET/api/token/{address}/tokens#

Minted token ids on an NFT contract

Distinct token ids minted on an NFT contract with per-id holder counts and, when fetched, off-chain metadata (name, image, description). Returns an empty list for ERC-20 contracts. Pagination is 0-indexed on this endpoint.

Parameters

NameInTypeRequiredDescription
addresspathstringyesContract address: Q or 0x followed by 40 hex characters.
pagequeryintegernoPage number, starting at 0. Default 0.
limitqueryintegernoItems per page. Capped at 100. Default 25.

Example request

curl -s "https://zondscan.com/api/token/Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6/tokens?page=0&limit=25"
Try it
GET/api/token/{address}/transfers#

Transfers of one token contract

Transfer events emitted by one token contract, newest first. Pagination is 0-indexed on this endpoint.

Parameters

NameInTypeRequiredDescription
addresspathstringyesContract address: Q or 0x followed by 40 hex characters.
pagequeryintegernoPage number, starting at 0. Default 0.
limitqueryintegernoItems per page. Capped at 100. Default 25.

Example request

curl -s "https://zondscan.com/api/token/Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6/transfers?page=0&limit=25"
Try it
GET/api/token/{address}/{id}#

Per-token NFT metadata

Full off-chain metadata for one (contract, tokenID) pair, including OpenSea-style attributes. The id must be a decimal integer; the concrete sibling segments (info, holders, tokens, transfers) take priority over this route.

Parameters

NameInTypeRequiredDescription
addresspathstringyesContract address: Q or 0x followed by 40 hex characters.
idpathstringyesToken id as a decimal integer, at most 80 characters.

Example request

curl -s "https://zondscan.com/api/token/Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6/1"
Try it

Proof of stake validator set and beacon chain epoch data.

GET/api/validators#

Validator set

The full validator set with per-validator status, age, and stake, plus the current epoch and the total staked amount. Cached server side for 30 seconds.

Parameters

NameInTypeRequiredDescription
page_tokenquerystringnoReserved for future server-side pagination. The full set is returned today.

Example request

curl -s "https://zondscan.com/api/validators"
Try it

Example response

{
  "validators": [
    {
      "index": "1",
      "address": "93f1c2d3e4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1",
      "withdrawalCredentialsHex": "0100000000000000000000004a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b",
      "status": "active",
      "age": 1042,
      "stakedAmount": "40000000000000",
      "isActive": true
    }
  ],
  "validatorCount": 1,
  "epoch": "1160",
  "totalStaked": "40000000000000"
}
GET/api/validators/history#

Validator count history

Per-epoch historical validator counts for charts.

Parameters

NameInTypeRequiredDescription
limitqueryintegernoNumber of history records. Capped at 100. Default 100.

Example request

curl -s "https://zondscan.com/api/validators/history?limit=100"
Try it
GET/api/validators/stats#

Aggregated validator statistics

Totals across the validator set: counts per status, total staked, and the current epoch.

Example request

curl -s "https://zondscan.com/api/validators/stats"
Try it
GET/api/validator/{id}#

Validator detail

Detail for one validator, addressed by decimal index.

Parameters

NameInTypeRequiredDescription
idpathstringyesValidator index as a decimal integer.

Example request

curl -s "https://zondscan.com/api/validator/1"
Try it
GET/api/epochs#

Paginated epoch list

Beacon chain epochs, newest first, with per-epoch validator counts and finality status.

Parameters

NameInTypeRequiredDescription
pagequeryintegernoPage number, starting at 1. Default 1.
limitqueryintegernoItems per page. Capped at 100. Default 15.

Example request

curl -s "https://zondscan.com/api/epochs?page=1&limit=15"
Try it
GET/api/epoch#

Current epoch information

Head, finalized, and justified epoch state plus slot timing for the beacon chain.

Example request

curl -s "https://zondscan.com/api/epoch"
Try it
GET/api/epoch/{id}#

Epoch detail

Per-slot breakdown of one epoch: proposed and missed slots, proposers, and validator statistics at that epoch.

Parameters

NameInTypeRequiredDescription
idpathstringyesEpoch number as a decimal integer.

Example request

curl -s "https://zondscan.com/api/epoch/1160"
Try it

Gas

2 endpoints

Gas price snapshots and history.

GET/api/gas/summary#

Live gas snapshot

Headline gas price plus block and mempool statistics and a gas price histogram. Gas values are 0x-prefixed hex strings. Cached server side for 5 seconds.

Example request

curl -s "https://zondscan.com/api/gas/summary"
Try it

Example response

{
  "avgGasPriceHex": "0x3b9aca00",
  "recentTxMedianHex": "0x3b9aca00",
  "recentTxSampleSize": 20,
  "recentMedianGasPriceHex": "0x3b9aca00",
  "mempoolMedianGasPriceHex": "0x0",
  "recentTxCount": 14,
  "qrlUsdPrice": 0.42,
  "avgGasUsedHex": "0x5208",
  "avgGasLimitHex": "0x1c9c380",
  "avgBlockTimeSec": 15.2,
  "pendingCount": 0,
  "lastBlockNumberHex": "0x24420",
  "lastGasUsedHex": "0x5208",
  "lastGasLimitHex": "0x1c9c380",
  "gasPriceHistogram": []
}
GET/api/gas/history#

Gas usage time series

Per-block gas history for the last 24 hours, or hourly buckets for the 7 day range. Unrecognized range values fall back to 24h. Cached server side for 30 seconds.

Parameters

NameInTypeRequiredDescription
rangequery24h | 7dnoTime range for the series. Default 24h.

Example request

curl -s "https://zondscan.com/api/gas/history?range=24h"
Try it

Source verification for deployed contracts (Hyperion compiler).

POST/api/contract/verify#

Submit contract source for verification

Enqueues an async source-verification job compiled with the Hyperion toolchain. Request bodies are capped at 1 MiB. Rate limited per IP: bucket of 5 requests, refilling 5 per minute. Poll GET /api/contract/verify/{jobId} for the outcome.

Request body (application/json)

FieldTypeRequiredDescription
addressstringyesCanonical Q-prefixed contract address (uppercase Q plus 40 hex characters).
sourceCodestringyes
contractNamestringyes
compilerVersionstringnoBuild id from /api/contract/compiler-info. Empty selects the default build.
optimizerEnabledbooleanno
optimizerRunsintegerno
evmVersionstringno
constructorArgumentsstringno
librariesobjectno
importsobjectno
licensestringno

Example request

curl -s -X POST "https://zondscan.com/api/contract/verify" -H "Content-Type: application/json" -d '{"address":"Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6","sourceCode":"<contract source>","contractName":"ExampleToken"}'

Example response

{
  "jobId": "9f2c4a6e8b0d1f3a",
  "status": "pending",
  "address": "Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6"
}
GET/api/contract/verify/{jobId}#

Verification job status

Returns the verification job document. Status moves through pending, compiling, and then success or failed.

Parameters

NameInTypeRequiredDescription
jobIdpathstringyesJob id returned by POST /api/contract/verify.

Example request

curl -s "https://zondscan.com/api/contract/verify/9f2c4a6e8b0d1f3a"
Try it
GET/api/contract/compiler-info#

Available compiler builds

Lists every selectable Hyperion compiler build and identifies the default. Use a listed buildId as the compilerVersion in verify submissions.

Example request

curl -s "https://zondscan.com/api/contract/compiler-info"
Try it

Read calls against known contracts and AI explanations of verified source.

POST/api/contract/call#

Read-only contract call

Typed proxy for qrl_call against the latest block, scoped to addresses the explorer knows as contracts. Calldata is capped at 8 KiB of hex, request bodies at 32 KiB, gas at 50 million, and each call at an 8 second timeout. Rate limited per IP: bucket of 60 requests, refilling 60 per minute.

Request body (application/json)

FieldTypeRequiredDescription
tostringyesCanonical Q-prefixed contract address.
datastringyesABI-encoded calldata: 0x-prefixed, even-length, lowercase hex. 0x alone is allowed for zero-argument functions.

Example request

curl -s -X POST "https://zondscan.com/api/contract/call" -H "Content-Type: application/json" -d '{"to":"Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6","data":"0x06fdde03"}'

Example response

{
  "result": "0x0000000000000000000000000000000000000000000000000000000000000012"
}
POST/api/contract/explain/{address}#

AI explanation of a verified contract

Generates or returns a cached plain-language explanation of a verified contract's source. Only verified contracts can be analyzed. Rate limited per IP: bucket of 10 requests, refilling 4 per minute. Regeneration is capped at 5 per contract per 7 day window.

Parameters

NameInTypeRequiredDescription
addresspathstringyesCanonical Q-prefixed contract address.
regeneratequery1 | truenoSet to 1 or true to force a fresh explanation instead of the cached one.

Example request

curl -s -X POST "https://zondscan.com/api/contract/explain/Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6"

Faucet & Site

3 endpoints

Endpoints served by the explorer web app itself: search redirect and the testnet faucet.

GET/faucet/claim#

Faucet status

Public faucet configuration so clients can render the claim form or a disabled state. Served by the explorer web app.

Example request

curl -s "https://zondscan.com/faucet/claim"
Try it

Example response

{
  "configured": true,
  "captchaEnabled": true,
  "dripQuanta": "10",
  "cooldownHours": 24
}
POST/faucet/claim#

Claim testnet Quanta

Sends a drip of testnet Quanta to the given address. Gated by a Cloudflare Turnstile captcha token, a per-address and per-IP cooldown (default 24 hours), and an optional rolling 24 hour global cap on total dripped Quanta. Testnet coins have no monetary value. Served by the explorer web app.

Request body (application/json)

FieldTypeRequiredDescription
addressstringyesQ-prefixed recipient address (Q plus 40 hex characters).
turnstileTokenstringnoCloudflare Turnstile response token.

Example request

curl -s -X POST "https://zondscan.com/faucet/claim" -H "Content-Type: application/json" -d '{"address":"Q20d20b8026b8f02540249f42acbd6181dc4a0a48","turnstileToken":"<turnstile-token>"}'

Example response

{
  "txHash": "0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d",
  "amount": "10",
  "to": "Q20d20b8026b8f02540249f42acbd6181dc4a0a48",
  "explorerUrl": "/tx/0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d"
}