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/apiThe 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"}.
| Endpoint | Per-IP bucket | Refill rate |
|---|---|---|
| POST /api/contract/verify | 5 requests | 5 per minute |
| POST /api/contract/call | 60 requests | 60 per minute |
| POST /api/contract/explain/{address} | 10 requests | 4 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 -dEndpoint reference
Every endpoint, grouped the same way as the OpenAPI document. Each card links to itself, so anchors are shareable.
46 endpoints
Status
1 endpointService health.
Overview & Market
2 endpointsNetwork overview and QRL market data.
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"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
}
}Historical price samples
Price, market cap, and volume snapshots for charts and wallet apps.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| interval | query | 4h | 12h | 24h | 7d | 30d | all | no | Time window for the returned samples. Default 24h. |
Example request
curl -s "https://zondscan.com/api/price-history?interval=24h"Blocks
4 endpointsBlock lists, block details, and block size history.
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"Example response
{
"blockNumber": 148512,
"qrlUsdPrice": 0.42
}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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| page | query | integer | no | Page number, starting at 1. Default 1. |
| limit | query | integer | no | Blocks per page. Capped at 100. Default 5. |
Example request
curl -s "https://zondscan.com/api/blocks?page=1&limit=5"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
}
}
}Block detail
Fetches one block by number, in decimal or 0x-prefixed hex form, plus per-transaction activity counts.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| query | path | string | yes | Block number as a decimal integer or 0x-prefixed hex string. |
Example request
curl -s "https://zondscan.com/api/block/148512"Example response
{
"block": {
"jsonrpc": "2.0",
"id": 1,
"result": {
"number": "0x24420",
"hash": "0x8a4f0c2b7d1e5f3a9c6b8d0e2f4a6c8e0b2d4f6a8c0e2b4d6f8a0c2e4b6d8f0a",
"timestamp": "0x6a743280",
"gasUsed": "0x5208",
"gasLimit": "0x1c9c380",
"transactions": []
}
},
"txActivity": {}
}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"Transactions & Mempool
7 endpointsConfirmed transactions, the latest-transactions feed, and pending mempool transactions.
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| page | query | integer | no | Page number, starting at 1. Default 1. |
| limit | query | integer | no | Items per page. Capped at 100. Default 10. |
Example request
curl -s "https://zondscan.com/api/txs?page=1&limit=10"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"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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| query | path | string | yes | Transaction hash: 0x followed by 64 hex characters. |
Example request
curl -s "https://zondscan.com/api/tx/0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d"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"
}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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| query | path | string | yes | Transaction hash: 0x followed by 64 hex characters. |
Example request
curl -s "https://zondscan.com/api/coinbase/0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d"Paginated mempool transactions
Transactions currently observed in the mempool. Cached server side for 5 seconds, matching mempool turnover.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| page | query | integer | no | Page number, starting at 1. Default 1. |
| limit | query | integer | no | Items per page. Capped at 100. Default 10. |
Example request
curl -s "https://zondscan.com/api/pending-transactions?page=1&limit=10"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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| hash | path | string | yes | Transaction hash: 0x followed by 64 hex characters. |
Example request
curl -s "https://zondscan.com/api/pending-transaction/0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d"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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| hash | path | string | yes | Transaction hash: 0x followed by 64 hex characters. |
Example request
curl -s "https://zondscan.com/api/pending-tx-eta/0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d"Addresses
8 endpointsAddress details, balances, per-address history, and wallet statistics.
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| query | path | string | yes | Address: Q or 0x followed by 40 hex characters. |
| page | query | integer | no | Page number for the transaction lists, starting at 1. Default 1. |
| limit | query | integer | no | Items per page. Capped at 100. Default 10. |
Example request
curl -s "https://zondscan.com/api/address/aggregate/Q20d20b8026b8f02540249f42acbd6181dc4a0a48?page=1&limit=10"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
}Non-zero transactions for an address
Paginated list of value-moving transactions touching the address.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| address | path | string | yes | Address: Q or 0x followed by 40 hex characters. |
| page | query | integer | no | Page number, starting at 1. Default 1. |
| limit | query | integer | no | Items per page. Capped at 100. Default 5. |
Example request
curl -s "https://zondscan.com/api/address/Q20d20b8026b8f02540249f42acbd6181dc4a0a48/transactions?page=1&limit=5"Token transfers touching an address
Token and NFT transfer events where the address is sender or recipient, across every contract.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| address | path | string | yes | Address: Q or 0x followed by 40 hex characters. |
| page | query | integer | no | Page number, starting at 1. Default 1. |
| limit | query | integer | no | Items per page. Capped at 100. Default 5. |
Example request
curl -s "https://zondscan.com/api/address/Q20d20b8026b8f02540249f42acbd6181dc4a0a48/token-transfers?page=1&limit=5"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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| address | path | string | yes | Address: Q or 0x followed by 40 hex characters. |
| standard | query | ERC-20 | ERC-721 | ERC-1155 | no | Scope the response to one token standard. |
Example request
curl -s "https://zondscan.com/api/address/Q20d20b8026b8f02540249f42acbd6181dc4a0a48/tokens"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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| address | path | string | yes | Address: Q or 0x followed by 40 hex characters. |
| standard | query | ERC-721 | ERC-1155 | no | Scope the response to one NFT standard. |
Example request
curl -s "https://zondscan.com/api/address/Q20d20b8026b8f02540249f42acbd6181dc4a0a48/nfts"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"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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| query | path | string | yes | Threshold value as a decimal integer. |
Example request
curl -s "https://zondscan.com/api/walletdistribution/100"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)
| Field | Type | Required | Description |
|---|---|---|---|
| address | string | yes | Q 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 endpointsDeployed contracts, token summaries, holders, transfers, and NFT metadata.
Paginated contract list
Deployed contracts with optional search and filters. Pagination is 0-indexed on this endpoint.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| page | query | integer | no | Page number, starting at 0. Default 0. |
| limit | query | integer | no | Items per page. Capped at 100. Default 10. |
| search | query | string | no | Free-text filter over contract fields. |
| isToken | query | string | no | Filter to token contracts (true) or non-token contracts (any other value). |
| standard | query | ERC-20 | ERC-721 | ERC-1155 | no | Filter by token standard. |
Example request
curl -s "https://zondscan.com/api/contracts?page=0&limit=10"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"Example response
{
"erc20": 120,
"erc721": 34,
"erc1155": 12,
"other": 176
}Token summary
Summary statistics for one token contract: identity, supply, holder count, transfer count, and creation provenance.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| address | path | string | yes | Contract address: Q or 0x followed by 40 hex characters. |
Example request
curl -s "https://zondscan.com/api/token/Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6/info"Example response
{
"contractAddress": "Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6",
"name": "Example Token",
"symbol": "EXT",
"decimals": 18,
"totalSupply": "1000000000000000000000000",
"holderCount": 42,
"transferCount": 310,
"creatorAddress": "Q20d20b8026b8f02540249f42acbd6181dc4a0a48",
"creationTxHash": "0x9c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d",
"creationBlock": "0x1a2b3"
}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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| address | path | string | yes | Contract address: Q or 0x followed by 40 hex characters. |
| tokenID | query | string | no | Filter holders to one NFT token id (decimal string). |
| page | query | integer | no | Page number, starting at 0. Default 0. |
| limit | query | integer | no | Items per page. Capped at 100. Default 25. |
Example request
curl -s "https://zondscan.com/api/token/Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6/holders?page=0&limit=25"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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| address | path | string | yes | Contract address: Q or 0x followed by 40 hex characters. |
| page | query | integer | no | Page number, starting at 0. Default 0. |
| limit | query | integer | no | Items per page. Capped at 100. Default 25. |
Example request
curl -s "https://zondscan.com/api/token/Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6/tokens?page=0&limit=25"Transfers of one token contract
Transfer events emitted by one token contract, newest first. Pagination is 0-indexed on this endpoint.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| address | path | string | yes | Contract address: Q or 0x followed by 40 hex characters. |
| page | query | integer | no | Page number, starting at 0. Default 0. |
| limit | query | integer | no | Items per page. Capped at 100. Default 25. |
Example request
curl -s "https://zondscan.com/api/token/Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6/transfers?page=0&limit=25"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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| address | path | string | yes | Contract address: Q or 0x followed by 40 hex characters. |
| id | path | string | yes | Token id as a decimal integer, at most 80 characters. |
Example request
curl -s "https://zondscan.com/api/token/Q30b4e6b5d1a2c3f4e5d6a7b8c9d0e1f2a3b4c5d6/1"Validators & Epochs
7 endpointsProof of stake validator set and beacon chain epoch data.
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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| page_token | query | string | no | Reserved for future server-side pagination. The full set is returned today. |
Example request
curl -s "https://zondscan.com/api/validators"Example response
{
"validators": [
{
"index": "1",
"address": "93f1c2d3e4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1",
"withdrawalCredentialsHex": "0100000000000000000000004a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b",
"status": "active",
"age": 1042,
"stakedAmount": "40000000000000",
"isActive": true
}
],
"validatorCount": 1,
"epoch": "1160",
"totalStaked": "40000000000000"
}Validator count history
Per-epoch historical validator counts for charts.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| limit | query | integer | no | Number of history records. Capped at 100. Default 100. |
Example request
curl -s "https://zondscan.com/api/validators/history?limit=100"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"Validator detail
Detail for one validator, addressed by decimal index.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | yes | Validator index as a decimal integer. |
Example request
curl -s "https://zondscan.com/api/validator/1"Paginated epoch list
Beacon chain epochs, newest first, with per-epoch validator counts and finality status.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| page | query | integer | no | Page number, starting at 1. Default 1. |
| limit | query | integer | no | Items per page. Capped at 100. Default 15. |
Example request
curl -s "https://zondscan.com/api/epochs?page=1&limit=15"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"Epoch detail
Per-slot breakdown of one epoch: proposed and missed slots, proposers, and validator statistics at that epoch.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| id | path | string | yes | Epoch number as a decimal integer. |
Example request
curl -s "https://zondscan.com/api/epoch/1160"Gas
2 endpointsGas price snapshots and history.
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"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": []
}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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| range | query | 24h | 7d | no | Time range for the series. Default 24h. |
Example request
curl -s "https://zondscan.com/api/gas/history?range=24h"Contract Verification
3 endpointsSource verification for deployed contracts (Hyperion compiler).
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)
| Field | Type | Required | Description |
|---|---|---|---|
| address | string | yes | Canonical Q-prefixed contract address (uppercase Q plus 40 hex characters). |
| sourceCode | string | yes | |
| contractName | string | yes | |
| compilerVersion | string | no | Build id from /api/contract/compiler-info. Empty selects the default build. |
| optimizerEnabled | boolean | no | |
| optimizerRuns | integer | no | |
| evmVersion | string | no | |
| constructorArguments | string | no | |
| libraries | object | no | |
| imports | object | no | |
| license | string | no |
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"
}Verification job status
Returns the verification job document. Status moves through pending, compiling, and then success or failed.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| jobId | path | string | yes | Job id returned by POST /api/contract/verify. |
Example request
curl -s "https://zondscan.com/api/contract/verify/9f2c4a6e8b0d1f3a"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"Contract Interaction
2 endpointsRead calls against known contracts and AI explanations of verified source.
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)
| Field | Type | Required | Description |
|---|---|---|---|
| to | string | yes | Canonical Q-prefixed contract address. |
| data | string | yes | ABI-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"
}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
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| address | path | string | yes | Canonical Q-prefixed contract address. |
| regenerate | query | 1 | true | no | Set 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 endpointsEndpoints served by the explorer web app itself: search redirect and the testnet faucet.
Search redirect
Resolves a free-form query (address, transaction hash, or block number) and responds with a 302 redirect to the matching explorer page. Unresolvable queries redirect to the homepage. Served by the explorer web app.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| q | query | string | no | Address (Q or 0x plus 40 hex), transaction hash (64 hex, 0x optional), or block number (decimal or 0x hex). |
Example request
curl -s "https://zondscan.com/search?q=148512"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"Example response
{
"configured": true,
"captchaEnabled": true,
"dripQuanta": "10",
"cooldownHours": 24
}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)
| Field | Type | Required | Description |
|---|---|---|---|
| address | string | yes | Q-prefixed recipient address (Q plus 40 hex characters). |
| turnstileToken | string | no | Cloudflare 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"
}