Browse API groups
Tokens & Token Transfers API
/api/v1/{chain}/tokens/QRL 2.0QRL (PoW)List Tokens
Paginated list of tokens for a given chain (stable Gold-projection).
qrl2 supports the full sort/filter surface. qrl only supports
?sort=-newest / ?sort=-supply and ignores type, metadata_status
(qrl native tokens have no per-holder / per-event index).
Wave 4 of the API consistency refactor: ?sort_by= + ?sort_dir= →
?sort= with - prefix for desc (D5). ?age_lte_days= → ?max_age=
duration (D4).
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| page | integermin 1 | no | 1 | |
| page_size | integermin 1 · max 100 | no | 25 | |
| type | string | null | no | — | qrc20|qrc721|qrc1155 (qrl2 only) |
| metadata_status | string | null | no | — | ok|partial|failed (qrl2 only) |
| q | string | null | no | — | Substring match on symbol/name |
| max_age | string | null | no | — | Optional max-age filter (D4 duration). When set, returns only tokens whose first_seen_at falls within the window. Examples: 30d, 90d, 1y. |
| sort | string | null | no | — | Sort spec: '<field>' (asc) or '-<field>' (desc). qrl2 allowed: transfers, transfers_24h, holders, supply, newest. qrl allowed: newest, supply. Default qrl2 = -transfers, qrl = -newest. |
Response 200 · TokensPaginated
▸itemsTokenDetail[]
itemsTokenDetail[]idstring | nullsymbolstring | nullnamestring | nulldecimalsinteger | nullfirst_seen_atstring | nullownerstring | nullheightinteger | nullblock_hashstring | nulltotal_supplystring | nullinitial_balancesstring | nulltotal_supply_rawstring | nulltotal_supply_displaystring | nullcirculating_rawstring | nullcirculating_displaystring | nullholdersinteger | nulltransfer_countinteger | nullis_qrc20integer | nullis_qrc721integer | nullis_qrc1155integer | nullmetadata_statusstring | nullrefresh_countinteger | nullmetadata_refreshed_atstring | nulldeployerstring | nulldeployment_blockinteger | nulldeployment_timestampstring | nulltotalinteger | nullpageinteger | nullpage_sizeinteger | nulltotal_pagesinteger | nulllimitinteger | nulloffsetinteger | nullchainstring | nullnetworkstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/tokens/" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"id": "Qa2f23388d1e3986416a36d2ef113850d6900b69c",
"symbol": "stQRL",
"name": "Staked QRL",
"decimals": 18,
"total_supply_raw": "80192000000000000000000",
"total_supply_display": "80192",
"circulating_raw": "80192000000000000000000",
"circulating_display": "80192",
"holders": 11,
"transfer_count": 6,
"transfers_24h": 0,
"mints_24h": 0,
"lifetime_mints": 0,
"total_assets": 0,
"is_qrc20": 1,
"is_qrc721": 0,
"is_qrc1155": 0,
"metadata_status": "ok",
"refresh_count": 4,
"first_seen_at": "2026-07-27T10:13:31.840000",
"metadata_refreshed_at": "2026-07-27T10:13:31.840000",
"deployer": "Q2e13b52fd3cda0a57f9037856b7df971074e2489",
"deployment_block": 19500,
"deployment_timestamp": "2026-04-14T13:28:36",
"collision_count": 4,
"is_verified": 0,
"match_grade": "unverified"
},
{
"id": "Q4cd5f66b5e011c4ac34737285aaf9bd825702649",
"symbol": "TOK",
"name": "TOKEN123",
"decimals": 18,
"total_supply_raw": "100000000000000000000",
"total_supply_display": "100",
"circulating_raw": "100000000000000000000",
"circulating_display": "100",
"holders": 2,
"transfer_count": 1,
"transfers_24h": 0,
"mints_24h": 0,
"lifetime_mints": 0,
"total_assets": 0,
"is_qrc20": 1,
"is_qrc721": 0,
"is_qrc1155": 0,
"metadata_status": "ok",
"refresh_count": 3,
"first_seen_at": "2026-07-06T23:04:02.481000",
"metadata_refreshed_at": "2026-07-06T23:04:02.481000",
"deployer": "Qe0f172b4416d83544d91b24c3c9bdc69530a8596",
"deployment_block": 44887,
"deployment_timestamp": "2026-05-02T04:35:36",
"collision_count": 4,
"is_verified": 0,
"match_grade": "unverified"
},
"… (21 more)"
],
"total": 23,
"page": 1,
"page_size": 25,
"total_pages": 1,
"limit": 25,
"offset": 0,
"chain": "qrl2",
"network": "testnet"
}/api/v1/{chain}/tokens/{token_id}QRL 2.0QRL (PoW)Get Token
Single-token detail.
The id-format depends on chain (determined by URL prefix):
- /api/v1/qrl2/tokens/{id} → qrl2; id is the contract address (Q + 40 hex)
- /api/v1/qrl/tokens/{id} → qrl; id is the creation tx-hash
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| token_id | string | yes | — |
Response 200 · TokenDetail
idstring | nullsymbolstring | nullnamestring | nulldecimalsinteger | nullfirst_seen_atstring | nullownerstring | nullheightinteger | nullblock_hashstring | nulltotal_supplystring | nullinitial_balancesstring | nulltotal_supply_rawstring | nulltotal_supply_displaystring | nullcirculating_rawstring | nullcirculating_displaystring | nullholdersinteger | nulltransfer_countinteger | nullis_qrc20integer | nullis_qrc721integer | nullis_qrc1155integer | nullmetadata_statusstring | nullrefresh_countinteger | nullmetadata_refreshed_atstring | nulldeployerstring | nulldeployment_blockinteger | nulldeployment_timestampstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/tokens/<token_id>" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"id": "Qa2f23388d1e3986416a36d2ef113850d6900b69c",
"symbol": "stQRL",
"name": "Staked QRL",
"decimals": 18,
"total_supply_raw": "80192000000000000000000",
"total_supply_display": "80192",
"circulating_raw": "80192000000000000000000",
"circulating_display": "80192",
"holders": 11,
"transfer_count": 6,
"is_qrc20": 1,
"is_qrc721": 0,
"is_qrc1155": 0,
"metadata_status": "ok",
"refresh_count": 4,
"first_seen_at": "2026-07-27T10:13:31.840000",
"metadata_refreshed_at": "2026-07-27T10:13:31.840000",
"deployer": "Q2e13b52fd3cda0a57f9037856b7df971074e2489",
"deployment_block": 19500,
"deployment_timestamp": "2026-04-14T13:28:36"
}/api/v1/{chain}/tokens/stats/summaryQRL 2.0QRL (PoW)Get Token Stats
Headline metrics for the tokens-landing page.
Response 200 · TokenStatsSummary
chainstringrequirednetworkstringrequiredtokens_totalintegertokens_with_metadatainteger | nulltransfers_24hinteger | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/tokens/stats/summary" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"chain": "qrl2",
"network": "testnet",
"tokens_total": 136,
"tokens_with_metadata": 23,
"transfers_24h": 1
}/api/v1/qrl2/token-transfersQRL 2.0List Transfers
Cursor-paginated decoded transfers across all QRC token standards.
Wave 8 of the API consistency refactor: token-transfers is a live feed (every new block can emit new Transfer events), so offset paging is broken — page 2 would skip events that arrived between page-clicks. Cursor anchors to (block_height, log_index) so subsequent pages are stable as the head advances.
The unified view collapses QRC-20/721/1155 into one shape, but the
token_standard column lets callers filter. involved is the common
"show me this wallet's transfer history" filter (in OR out). The repo
degrades to an empty page on a missing view, so this never 500s on a
partial deploy.
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| cursor | string | null | no | — | Opaque pagination token from a previous response's `next_cursor`. Omit to start at the chain head (newest). Do not decode/construct. |
| limit | integermin 1 · max 100 | no | 25 | Items per page (1-100). |
| token_contract | string | null | no | — | Filter to one token |
| from | string | null | no | — | |
| to | string | null | no | — | |
| involved | string | null | no | — | Either from_addr OR to_addr equals this address |
| token_standard | string | null | no | — | qrc20 | qrc721 | qrc1155 | qrc1155_batch — also accepts a CSV (e.g. 'qrc721,qrc1155,qrc1155_batch' for the /top-nft hub). |
| since_block | integer | null | no | — | Only transfers with block_height >= this |
Response 200 · TransfersPaginated
▸itemsTransferEvent[]
itemsTransferEvent[]block_heightintegerrequiredtx_hashstringrequiredlog_indexintegerrequiredtoken_standardstringrequiredtoken_contractstringrequiredfrom_addrstring | nullto_addrstring | nullamountstring | nulllimitinteger | nullnext_cursorstring | nullOpaque pagination token for the next page; null when this is the last page. Pass back unchanged in ?cursor=.has_moreboolean | nullTrue when at least one more page is available.networkstring | nullfilters_appliedobject | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/token-transfers" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"block_height": 173934,
"tx_hash": "0x7757ba180d74a02a33350b143bca0c8ee5a55c912ce8e359cfc24646baf85e2c",
"log_index": 0,
"token_standard": "qrc20",
"token_contract": "Q8fb8928dd86629fc6ea9ca41975dbb28a511d2d0",
"from_addr": "Q0000000000000000000000000000000000000000",
"to_addr": "Qedc109a7e31a982023b91f8e2fb46c34ca524f7d",
"amount": "1000000000000000000000",
"tx_index": 0,
"log_pos": 0,
"token_id": null,
"timestamp": "2026-07-30T19:22:36",
"token_symbol": "SPK",
"token_name": "SpikeToken",
"token_decimals": 18
},
{
"block_height": 97680,
"tx_hash": "0x8a98d4b0659c5a6e0f15139ac5f5b68d06bbd020c696ef82c9de4a0a3c1772ab",
"log_index": 2,
"token_standard": "qrc20",
"token_contract": "Qfe5db0e6e0ba4fa01879d86351a700aa62e5e35d",
"from_addr": "Q0000000000000000000000000000000000000000",
"to_addr": "Q6153d37fa4da7193e6219dcbd2bbe62fa12905b1",
"amount": "100000",
"tx_index": 0,
"log_pos": 0,
"token_id": null,
"timestamp": "2026-06-07T20:28:36",
"token_symbol": "USDC",
"token_name": "USDC",
"token_decimals": 3
},
"… (23 more)"
],
"limit": 25,
"next_cursor": "eyJhZnRlcl9ibG9jayI6MjEzNDQsImFmdGVyX2xvZyI6MSwiYWZ0ZXJfbG9nX3BvcyI6MH0",
"has_more": true,
"network": "testnet",
"filters_applied": {
"token_standard": "qrc20"
}
}/api/v1/qrl2/token-transfers/summaryQRL 2.0Transfers Summary
Hero metrics for the token-transfers / nft-transfers feed.
24h + 7d transfer counts (the 7d anchors a daily-average comparison),
all-time total, distinct active contracts, the Mint/Burn/Transfer split, and
the single most-active contract. token_standard selects the feed
(default qrc20; pass the NFT CSV for the /nft-transfers hero). Zero-filled on
a missing view.
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| token_standard | string | null | no | — | qrc20 (default) | qrc721 | qrc1155 | qrc1155_batch — also accepts a CSV (e.g. 'qrc721,qrc1155,qrc1155_batch' for the /nft-transfers hero). |
Response 200 · TransfersFeedSummary
networkstringrequiredtotalintegertransfers_24hintegertransfers_7dintegeractive_tokensintegermint_countintegerburn_countintegertransfer_countinteger▸top_tokenTransfersTopToken | null
top_tokenTransfersTopToken | nulltoken_contractstringrequiredtransfersintegerrequiredsymbolstring | nullnamestring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/token-transfers/summary" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"network": "testnet",
"total": 46,
"transfers_24h": 1,
"transfers_7d": 1,
"active_tokens": 22,
"mint_count": 33,
"burn_count": 2,
"transfer_count": 11,
"top_token": {
"token_contract": "Qa2f23388d1e3986416a36d2ef113850d6900b69c",
"transfers": 11,
"symbol": "stQRL",
"name": "Staked QRL"
}
}/api/v1/qrl2/tokens/{token_contract}/balance/{address}QRL 2.0Get Token Balance
Balance of a single (token, holder) pair, decimals-corrected for display.
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| token_contract | string | yes | — | |
| address | string | yes | — |
Response 200 · TokenHolderBalance
Variable shape — see the example response below.
Request examples
curl -s "https://quantascan.io/api/v1/qrl2/tokens/<token_contract>/balance/<address>" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"token_contract": "Qa2f23388d1e3986416a36d2ef113850d6900b69c",
"holder": "Q2e13b52fd3cda0a57f9037856b7df971074e2489",
"balance_raw": "40000000000000000000000",
"balance_display": "40000",
"total_received_raw": "40000000000000000000000",
"total_received_display": "40000",
"total_sent_raw": "0",
"token_name": "Staked QRL",
"token_symbol": "stQRL",
"token_decimals": 18,
"transfer_count": 1,
"last_activity": "2026-04-14T14:08:36",
"first_activity": "2026-04-14T14:08:36"
}/api/v1/qrl2/tokens/{token_contract}/distributionQRL 2.0Get Token Distribution
Token holder distribution / concentration stats.
Returns top-10 / top-50 / top-100 cumulative share + HHI (Herfindahl-Hirschman Index) over the top-100. Powers a "concentration" widget on the token-detail page.
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| token_contract | string | yes | — |
Response 200 · TokenDistribution
token_contractstringrequirednetworkstringrequiredtotal_supplystringholders_countintegertop_10_sharenumbertop_50_sharenumbertop_100_sharenumberhhinumberconcentration_notestringRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/tokens/<token_contract>/distribution" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"token_contract": "Qa2f23388d1e3986416a36d2ef113850d6900b69c",
"network": "testnet",
"total_supply": "80192000000000000000000",
"holders_count": 11,
"top_10_share": 0.999376,
"top_50_share": 1,
"top_100_share": 1,
"hhi": 0.280049,
"concentration_note": "high (>0.25)"
}/api/v1/qrl2/tokens/{token_contract}/holdersQRL 2.0Get Token Holders
Top holders by balance for a QRL2 QRC-20 token. Zero-address (burn sink)
is excluded via the underlying qrl2_token_top_holders view filter.
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| token_contract | string | yes | — |
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| page | integermin 1 | no | 1 | |
| page_size | integermin 1 · max 100 | no | 20 |
Response 200 · TokenHoldersList
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nulltoken_contractstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/tokens/<token_contract>/holders" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"holder": "Q2e13b52fd3cda0a57f9037856b7df971074e2489",
"balance": "40000000000000000000000",
"total_received": "40000000000000000000000",
"total_sent": "0",
"transfer_count": 1,
"last_activity": "2026-04-14T14:08:36",
"rank_in_token": 1
},
{
"holder": "Q3d8148c344102caf4163aee62540d984b845cb43",
"balance": "5024000000000000000000",
"total_received": "5024000000000000000000",
"total_sent": "0",
"transfer_count": 1,
"last_activity": "2026-04-15T20:13:36",
"rank_in_token": 2
},
"… (9 more)"
],
"total": 11,
"limit": 20,
"offset": 0,
"token_contract": "Qa2f23388d1e3986416a36d2ef113850d6900b69c"
}/api/v1/qrl2/tokens/{token_contract}/transfersQRL 2.0Get Token Transfers
Decoded transfer events for a QRL2 token. Returns QRC-20/721/1155 transfers
via the unified qrl2_qrc_transfers_all view.
Path parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| token_contract | string | yes | — |
Query parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| page | integermin 1 | no | 1 | |
| page_size | integermin 1 · max 100 | no | 20 |
Response 200 · TokenTransfersList
itemsobject[]totalinteger | nulllimitinteger | nulloffsetinteger | nulltoken_contractstring | nullRequest examples
curl -s "https://quantascan.io/api/v1/qrl2/tokens/<token_contract>/transfers" \
-H "Authorization: Bearer qs_YOUR_API_KEY"Example response
{
"items": [
{
"block_height": 74187,
"tx_hash": "0x588e1ee3b0a86ede7a7130021e1c7bb2e32c75499257b95691d94262d37211c0",
"tx_index": 0,
"log_index": 0,
"token_standard": "qrc20",
"from_addr": "Q79b662ce3d663643df4454a8ba3f532c0de6887f",
"to_addr": "Q6153d37fa4da7193e6219dcbd2bbe62fa12905b1",
"amount": "50000000000000000000",
"token_id": null,
"timestamp": "2026-05-22T12:55:36"
},
{
"block_height": 21404,
"tx_hash": "0x0468eca6df78a147d539b52fa3b71e645b88de90c3430552cf36a9009cd5226e",
"tx_index": 0,
"log_index": 1,
"token_standard": "qrc20",
"from_addr": "Q0000000000000000000000000000000000000000",
"to_addr": "Q79b662ce3d663643df4454a8ba3f532c0de6887f",
"amount": "100000000000000000000",
"token_id": null,
"timestamp": "2026-04-15T21:12:36"
},
"… (9 more)"
],
"total": 11,
"limit": 20,
"offset": 0,
"token_contract": "Qa2f23388d1e3986416a36d2ef113850d6900b69c"
}All endpoints verified against a live indexer. Need the raw spec? See openapi.json or the API overview.