QFC Explorer API
Complete REST API reference for the QFC blockchain explorer. 61 endpoints across 16 categories.
Base URL
https://explorer-api.testnet.qfc.networkFormat
JSONChain
QFC Testnet (9000)Response Format
All endpoints return a consistent JSON envelope. Check the ok field to determine success or failure.
Success
{
"ok": true,
"data": { ... }
}Error
{
"ok": false,
"error": "Human-readable message"
}Authentication
Most public endpoints (blocks, transactions, tokens, search, etc.) are accessible without authentication. User-specific endpoints (watchlist, API keys, profile) require a JWT access token.
JWT Access Tokens
Obtained via /auth/login or /auth/register. Pass as a Bearer token in the Authorization header:
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
API Keys
For programmatic access with higher rate limits. Create via /api-keys (requires JWT auth). Pass the key as a query parameter or header:
# Query parameter curl "https://explorer-api.testnet.qfc.network/blocks?apikey=qfc_ab12cd34..." # Header curl "https://explorer-api.testnet.qfc.network/blocks" -H "X-Api-Key: qfc_ab12cd34..."
Refresh Tokens
Stored as an HTTP-only cookie (qfc_refresh). Refreshed automatically via /auth/refresh with token rotation for security.
Rate Limiting
Requests are rate-limited per IP (anonymous) or per API key (authenticated). Exceeding limits returns 429 Too Many Requests.
| Tier | Rate Limit | Daily Limit | Notes |
|---|---|---|---|
| Anonymous | 100 req/min/IP | -- | No API key required |
| Free | 5 req/sec | 10,000 | Default tier for new API keys |
| Standard | 20 req/sec | 100,000 | Available on request |
| Pro | 50 req/sec | Unlimited | Available on request |
Auth endpoints (/auth/*) have a stricter limit of 10 requests per minute per IP.
Blocks
Paginated list of blocks. Supports offset-based and cursor-based pagination.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
page | number | 1 | Page number (offset pagination) |
limit | number | 25 | Items per page (1-100) |
order | string | desc | "desc" or "asc" |
producer | string | -- | Filter by block producer address |
cursor | string | -- | Cursor token for cursor-based pagination (overrides page) |
Example Request
curl "https://explorer-api.testnet.qfc.network/blocks?page=1&limit=5"
Example Response
{
"ok": true,
"data": {
"page": 1,
"limit": 5,
"order": "desc",
"producer": null,
"items": [
{
"hash": "0xabc...",
"height": "42000",
"producer": "0x1234...",
"timestamp_ms": "1709900000000",
"gas_used": "210000",
"tx_count": 3
}
],
"next_cursor": "aGVpZ2h0OjQxOTk1"
}
}Single block by height, including paginated transactions.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
page | number | 1 | Transaction page |
limit | number | 25 | Transactions per page (1-100) |
order | string | desc | "desc" or "asc" |
Example Request
curl "https://explorer-api.testnet.qfc.network/blocks/42000"
Example Response
{
"ok": true,
"data": {
"block": {
"hash": "0xabc...",
"height": "42000",
"producer": "0x1234...",
"timestamp_ms": "1709900000000",
"gas_used": "210000",
"gas_limit": "30000000",
"tx_count": 3
},
"transactions": [ ... ]
}
}Internal transactions within a block.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
page | number | 1 | Page number |
limit | number | 25 | Items per page (1-100) |
Example Request
curl "https://explorer-api.testnet.qfc.network/blocks/42000/internal"
Example Response
{
"ok": true,
"data": {
"block_height": "42000",
"page": 1,
"limit": 25,
"items": [ ... ],
"total": 5
}
}Transactions
Paginated list of transactions with optional filters.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
page | number | 1 | Page number |
limit | number | 25 | Items per page (1-100) |
order | string | desc | "desc" or "asc" |
address | string | -- | Filter by from or to address |
status | string | -- | Filter by status ("1" success, "0" fail) |
min_value | string | -- | Minimum value in wei |
max_value | string | -- | Maximum value in wei |
method | string | -- | Filter by function selector |
from_date | string | -- | Start date (YYYY-MM-DD) |
to_date | string | -- | End date (YYYY-MM-DD) |
tx_type | string | -- | Transaction type filter |
cursor | string | -- | Cursor-based pagination token |
Example Request
curl "https://explorer-api.testnet.qfc.network/txs?page=1&limit=5&status=1"
Example Response
{
"ok": true,
"data": {
"page": 1,
"limit": 5,
"order": "desc",
"items": [
{
"hash": "0xdef...",
"block_height": "42000",
"from_address": "0xaaaa...",
"to_address": "0xbbbb...",
"value": "1000000000000000000",
"status": "1",
"gas_used": "21000",
"gas_price": "1000000000"
}
],
"next_cursor": "..."
}
}Single transaction by hash. Falls back to archive, then RPC if not indexed.
Example Request
curl "https://explorer-api.testnet.qfc.network/txs/0xdef..."
Example Response
{
"ok": true,
"data": {
"transaction": {
"hash": "0xdef...",
"block_height": "42000",
"from_address": "0xaaaa...",
"to_address": "0xbbbb...",
"value": "1000000000000000000",
"status": "1",
"gas_used": "21000",
"gas_price": "1000000000",
"decoded_input": { "name": "transfer", "params": [ ... ] }
},
"defi_label": "Transfer",
"logs": [ ... ],
"decoded_logs": [ ... ],
"source": "indexed"
}
}Internal transactions (traces) for a given transaction hash.
Example Request
curl "https://explorer-api.testnet.qfc.network/txs/0xdef.../internal"
Example Response
{
"ok": true,
"data": {
"tx_hash": "0xdef...",
"items": [
{ "from_address": "0x...", "to_address": "0x...", "value": "500000", "type": "CALL" }
],
"total": 1
}
}Fund flow graph for Sankey visualization (native + ERC-20 + internal calls).
Example Request
curl "https://explorer-api.testnet.qfc.network/txs/0xdef.../flow"
Example Response
{
"ok": true,
"data": {
"nodes": [
{ "address": "0xaaaa...", "label": "Deployer" }
],
"links": [
{ "source": "0xaaaa...", "target": "0xbbbb...", "value": "1000000", "type": "native" }
]
}
}Addresses
Comprehensive address overview: balance, stats, contract info, token holdings, NFTs, and paginated transactions or token transfers.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
tab | string | transactions | "transactions" | "token_transfers" | "internal_txs" |
page | number | 1 | Page number |
limit | number | 25 | Items per page (1-100) |
order | string | desc | "desc" or "asc" |
Example Request
curl "https://explorer-api.testnet.qfc.network/address/0x1234...?tab=transactions&limit=10"
Example Response
{
"ok": true,
"data": {
"address": "0x1234...",
"label": "Deployer",
"overview": { "balance": "50000000000000000000", "nonce": 42 },
"stats": { "sent": 100, "received": 55 },
"contract": null,
"tokenHoldings": [ ... ],
"nftHoldings": [ ... ],
"balance_usd": 125.50,
"total_portfolio_usd": 340.00,
"transactions": [ ... ]
}
}CSV export of address transactions or token transfers with optional date range.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
type | string | transactions | "transactions" | "token_transfers" |
limit | number | 5000 | Max rows (100-10000) |
order | string | desc | "desc" or "asc" |
start_date | string | -- | Start date (YYYY-MM-DD) |
end_date | string | -- | End date (YYYY-MM-DD) |
Example Request
curl "https://explorer-api.testnet.qfc.network/address/0x1234.../export?type=transactions&limit=100" -o txs.csv
Example Response
hash,block_height,from_address,to_address,value,status,gas_used,gas_price 0xabc...,42000,0x1234...,0x5678...,1000000000000000000,1,21000,1000000000
Token approval checker -- lists active ERC-20 approvals for the address.
Example Request
curl "https://explorer-api.testnet.qfc.network/address/0x1234.../approvals"
Example Response
{
"ok": true,
"data": {
"address": "0x1234...",
"approvals": [
{
"tokenAddress": "0xtoken...",
"tokenSymbol": "USDT",
"spender": "0xspender...",
"allowance": "115792089237316195423570985008687907853269984665...",
"isUnlimited": true,
"txHash": "0x..."
}
]
}
}Comprehensive activity analysis: value sums, gas spent, top interactions, activity heatmap, and activity level.
Example Request
curl "https://explorer-api.testnet.qfc.network/address/0x1234.../profile"
Example Response
{
"ok": true,
"data": {
"address": "0x1234...",
"total_sent": 100,
"total_received": 55,
"total_sent_value": "50000000000000000000",
"total_gas_spent": "2100000000000000",
"unique_interactions": 23,
"activity_level": "active",
"activity_heatmap": [
{ "day": "2026-03-01", "count": 5 }
],
"top_interactions": [
{ "address": "0xbbbb...", "tx_count": 12 }
]
}
}Detect if address is a Safe (Gnosis) multisig wallet and return details.
Example Request
curl "https://explorer-api.testnet.qfc.network/address/0x1234.../multisig"
Example Response
{
"ok": true,
"data": {
"isSafe": true,
"version": "1.3.0",
"threshold": 2,
"owners": ["0xaaaa...", "0xbbbb...", "0xcccc..."],
"nonce": 15
}
}Fetch NFT tokenURI and metadata for up to 20 NFT holdings.
Example Request
curl "https://explorer-api.testnet.qfc.network/address/0x1234.../nft-metadata"
Example Response
{
"ok": true,
"data": {
"address": "0x1234...",
"nfts": [
{
"tokenAddress": "0xnft...",
"tokenId": "42",
"tokenName": "CoolNFT",
"metadata": {
"uri": "ipfs://...",
"name": "Cool #42",
"image": "https://ipfs.io/ipfs/..."
}
}
]
}
}Contracts
Paginated list of all deployed contracts.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
limit | number | 25 | Items per page (1-100) |
offset | number | 0 | Offset |
Example Request
curl "https://explorer-api.testnet.qfc.network/contract?limit=10"
Example Response
{
"ok": true,
"data": {
"items": [
{ "address": "0x...", "creator_tx_hash": "0x...", "is_verified": true }
],
"total": 150,
"limit": 10,
"offset": 0
}
}Top verified contracts ranked by interaction count.
Example Request
curl "https://explorer-api.testnet.qfc.network/contract/verified"
Example Response
{
"ok": true,
"data": {
"items": [
{
"address": "0x...",
"compiler_version": "v0.8.28",
"token_name": "QFC Token",
"interaction_count": 1234
}
],
"total": 15
}
}Deep contract info: bytecode, balance, verification status, ABI, proxy detection, similar contracts.
Example Request
curl "https://explorer-api.testnet.qfc.network/contract/0xcontract..."
Example Response
{
"ok": true,
"data": {
"address": "0xcontract...",
"is_contract": true,
"balance": "0",
"is_verified": true,
"source_code": "pragma solidity ^0.8.0; ...",
"abi": [ ... ],
"compiler_version": "v0.8.28",
"evm_version": "paris",
"proxy_type": "EIP-1967",
"implementation_address": "0ximpl...",
"similar_contracts": [ ... ]
}
}Get the implementation ABI for proxy contracts.
Example Request
curl "https://explorer-api.testnet.qfc.network/contract/0xproxy.../proxy-abi"
Example Response
{
"ok": true,
"data": {
"isProxy": true,
"implementation": "0ximpl...",
"proxyType": "EIP-1967",
"abi": [ ... ],
"implementationVerified": true
}
}Compare source code of two verified contracts with unified diff output.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
a* | string | -- | Address of contract A |
b* | string | -- | Address of contract B |
Example Request
curl "https://explorer-api.testnet.qfc.network/contract/diff?a=0xaaaa...&b=0xbbbb..."
Example Response
{
"ok": true,
"data": {
"contract_a": { "address": "0xaaaa...", "compiler": "v0.8.28" },
"contract_b": { "address": "0xbbbb...", "compiler": "v0.8.28" },
"hunks": [ ... ],
"stats": { "additions": 5, "deletions": 3, "unchanged": 120 },
"abi_diff": { "added": ["newFunc(uint256)"], "removed": [], "modified": [] }
}
}Verify a single-file Solidity contract by comparing compiled bytecode against deployed code.
Request Body
{
"address": "0x...",
"sourceCode": "pragma solidity ^0.8.0; ...",
"compilerVersion": "v0.8.28",
"evmVersion": "paris",
"optimizationRuns": 200,
"constructorArgs": "0x..."
}Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/contract/verify" \
-H "Content-Type: application/json" \
-d '{"address":"0x...","sourceCode":"...","compilerVersion":"v0.8.28"}'Example Response
{
"ok": true,
"data": {
"address": "0x...",
"verified": true,
"contractName": "MyToken",
"compiler": "v0.8.28",
"evmVersion": "paris"
}
}Verify using Solidity Standard JSON Input (multi-file).
Request Body
{
"address": "0x...",
"standardJsonInput": "{ \"language\": \"Solidity\", ... }",
"compilerVersion": "v0.8.28"
}Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/contract/verify-json" \
-H "Content-Type: application/json" \
-d '{"address":"0x...","standardJsonInput":"...","compilerVersion":"v0.8.28"}'Example Response
{
"ok": true,
"data": {
"address": "0x...",
"verified": true,
"contractName": "contracts/Token.sol:Token"
}
}Verify with multiple source files and an entry contract.
Request Body
{
"address": "0x...",
"compiler_version": "v0.8.28",
"evm_version": "paris",
"optimization_runs": 200,
"files": { "contracts/Token.sol": "...", "contracts/IERC20.sol": "..." },
"entry_contract": "contracts/Token.sol:Token"
}Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/contract/verify-multi" \
-H "Content-Type: application/json" \
-d '{"address":"0x...","compiler_version":"v0.8.28","files":{...},"entry_contract":"contracts/Token.sol:Token"}'Example Response
{
"ok": true,
"data": {
"address": "0x...",
"verified": true,
"contractName": "contracts/Token.sol:Token"
}
}Verify a Vyper contract.
Request Body
{
"address": "0x...",
"source_code": "# @version ^0.3.10 ...",
"compiler_version": "0.3.10",
"evm_version": "paris"
}Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/contract/verify-vyper" \
-H "Content-Type: application/json" \
-d '{"address":"0x...","source_code":"...","compiler_version":"0.3.10"}'Example Response
{
"ok": true,
"data": {
"address": "0x...",
"verified": true,
"contractName": "VyperContract",
"compiler": "vyper:0.3.10"
}
}Execute a read-only contract call (supports common functions like name, symbol, balanceOf, etc.).
Request Body
{
"address": "0xtoken...",
"function": "balanceOf",
"inputs": [{ "type": "address", "value": "0xuser..." }]
}Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/contract/call" \
-H "Content-Type: application/json" \
-d '{"address":"0x...","function":"balanceOf","inputs":[{"type":"address","value":"0x..."}]}'Example Response
{
"ok": true,
"data": {
"function": "balanceOf",
"raw": "0x00000000000000000000000000000000000000000000003635c9adc5dea00000",
"result": "1000000000000000000000"
}
}Decode calldata using a verified contract ABI.
Request Body
{
"address": "0x...",
"input": "0xa9059cbb000000000000000000000000..."
}Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/contract/decode" \
-H "Content-Type: application/json" \
-d '{"address":"0x...","input":"0xa9059cbb..."}'Example Response
{
"ok": true,
"data": {
"decoded": {
"name": "transfer",
"params": [
{ "name": "to", "type": "address", "value": "0x..." },
{ "name": "amount", "type": "uint256", "value": "1000000000000000000" }
]
}
}
}Decode an event log using a verified contract ABI.
Request Body
{
"address": "0x...",
"topics": ["0xddf252ad...", "0x000...sender", "0x000...receiver"],
"data": "0x00000000000000000000000000000000000000000000003635c9adc5dea00000"
}Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/contract/decode-log" \
-H "Content-Type: application/json" \
-d '{"address":"0x...","topics":["0xddf252ad..."],"data":"0x..."}'Example Response
{
"ok": true,
"data": {
"decoded": {
"name": "Transfer",
"params": [
{ "name": "from", "type": "address", "value": "0x..." },
{ "name": "to", "type": "address", "value": "0x..." },
{ "name": "value", "type": "uint256", "value": "1000000000000000000" }
]
}
}
}Tokens
Paginated token list with sorting, filtering by type, and market data.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
page | number | 1 | Page number |
limit | number | 25 | Items per page (1-100) |
order | string | desc | "desc" or "asc" |
sort | string | market_cap | "market_cap" | "holders" | "volume" | "price" | "name" | "transfers" |
type | string | all | "erc20" | "erc721" | "erc1155" | "all" |
Example Request
curl "https://explorer-api.testnet.qfc.network/tokens?sort=holders&limit=10"
Example Response
{
"ok": true,
"data": {
"page": 1,
"limit": 10,
"sort": "holders",
"type": "all",
"total": 42,
"items": [
{
"address": "0xtoken...",
"name": "QFC Token",
"symbol": "QFC",
"decimals": 18,
"token_type": "erc20",
"price_usd": 2.50,
"market_cap_usd": 25000000,
"holder_count": 1500,
"transfer_count": 8000
}
]
}
}Recent token transfers across all tokens.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
page | number | 1 | Page number |
limit | number | 25 | Items per page (1-100) |
order | string | desc | "desc" or "asc" |
type | string | -- | Filter by token type: "ERC-20", "ERC-721", "ERC-1155" |
Example Request
curl "https://explorer-api.testnet.qfc.network/tokens/transfers?limit=10&type=ERC-20"
Example Response
{
"ok": true,
"data": {
"page": 1,
"limit": 10,
"order": "desc",
"type": "ERC-20",
"items": [ ... ]
}
}Token detail with price info and paginated transfer history.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
page | number | 1 | Transfers page |
limit | number | 25 | Transfers per page (1-100) |
order | string | desc | "desc" or "asc" |
Example Request
curl "https://explorer-api.testnet.qfc.network/tokens/0xtoken..."
Example Response
{
"ok": true,
"data": {
"token": {
"address": "0xtoken...",
"name": "QFC Token",
"symbol": "QFC",
"decimals": 18,
"total_supply": "100000000000000000000000000"
},
"price": { "priceUsd": 2.50 },
"transfers": [ ... ]
}
}Top token holders (ERC-20 and NFT holders).
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
limit | number | 25 | Max holders (1-200) |
Example Request
curl "https://explorer-api.testnet.qfc.network/tokens/0xtoken.../holders?limit=10"
Example Response
{
"ok": true,
"data": {
"token": { ... },
"holders": [
{ "address": "0x...", "balance": "50000000000000000000000" }
],
"nftHolders": [ ... ]
}
}7-day price history for sparkline charts.
Example Request
curl "https://explorer-api.testnet.qfc.network/tokens/0xtoken.../sparkline"
Example Response
{
"ok": true,
"data": {
"tokenAddress": "0xtoken...",
"sparkline": [2.40, 2.42, 2.45, 2.50, 2.48, 2.52, 2.50]
}
}Search
Universal search across blocks, transactions, addresses, tokens, contracts, and labels.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
q* | string | -- | Search query (block height, hash, address, or text) |
Example Request
curl "https://explorer-api.testnet.qfc.network/search?q=0x1234..."
Example Response
{
"ok": true,
"data": {
"query": "0x1234...",
"total": 2,
"results": [
{ "type": "address", "data": { "balance": "...", "label": "Deployer" } },
{ "type": "contract", "data": { ... } }
]
}
}Autocomplete suggestions for the search bar.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
q* | string | -- | Partial search query |
Example Request
curl "https://explorer-api.testnet.qfc.network/search/suggest?q=QFC"
Example Response
{
"ok": true,
"data": {
"query": "QFC",
"blockHeights": [],
"tokens": [{ "address": "0x...", "name": "QFC Token", "symbol": "QFC" }],
"contracts": [ ... ],
"labels": [ ... ]
}
}Batch-resolve addresses to human-readable labels (max 200).
Request Body
{ "addresses": ["0xaaaa...", "0xbbbb..."] }Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/search/labels" \
-H "Content-Type: application/json" \
-d '{"addresses":["0xaaaa...","0xbbbb..."]}'Example Response
{
"ok": true,
"data": {
"0xaaaa...": { "label": "Deployer", "category": "system" },
"0xbbbb...": { "label": "Faucet", "category": "infrastructure" }
}
}Analytics
Network overview: totals, block time series (TPS, gas, block time), and validator stats.
Example Request
curl "https://explorer-api.testnet.qfc.network/analytics"
Example Response
{
"ok": true,
"data": {
"overview": {
"total_blocks": "42000",
"total_transactions": "150000",
"total_addresses": "3000",
"total_gas_used": "8500000000"
},
"series": {
"tps": [ { "label": "42000", "value": 3, "timestamp": 1709900000000 } ],
"gas_used": [ ... ],
"block_time": [ ... ]
},
"validators": [ ... ]
}
}Historical daily aggregated metrics.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
days | number | 30 | Number of days (1-365) |
Example Request
curl "https://explorer-api.testnet.qfc.network/analytics/daily?days=7"
Example Response
{
"ok": true,
"data": {
"days": 7,
"stats": [
{ "date": "2026-03-01", "blocks": 1440, "transactions": 5000, "addresses": 120 }
]
}
}Gas tracker: price percentiles, block gas usage, and top gas-consuming contracts.
Example Request
curl "https://explorer-api.testnet.qfc.network/analytics/gas"
Example Response
{
"ok": true,
"data": {
"prices": {
"low": "1000000000",
"median": "2000000000",
"average": "2500000000",
"high": "10000000000",
"sampleSize": 200
},
"blocks": [ ... ],
"topContracts": [
{ "address": "0x...", "totalGas": "5000000", "txCount": 120 }
]
}
}Export analytics data as JSON or CSV.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
type | string | tps | "tps" | "gas" | "block_time" | "validators" | "blocks" | "transactions" |
format | string | json | "json" | "csv" |
limit | number | 1000 | Max rows for blocks/transactions (100-10000) |
address | string | -- | Filter transactions by address (type=transactions only) |
Example Request
curl "https://explorer-api.testnet.qfc.network/analytics/export?type=blocks&format=csv&limit=100" -o blocks.csv
Example Response
height,timestamp_ms,gas_used,gas_limit,tx_count,block_time_ms 42000,1709900000000,210000,30000000,3,5000
Network
Network status: current epoch, node info, validators list, and total hashrate.
Example Request
curl "https://explorer-api.testnet.qfc.network/network"
Example Response
{
"ok": true,
"data": {
"epoch": { "number": 100, "startBlock": 41000, "endBlock": 42000 },
"nodeInfo": { "version": "0.5.0", "peers": 12 },
"validators": [
{ "address": "0x...", "stake": "1000000", "providesCompute": true, "hashrate": 500 }
],
"totalHashrate": 2500
}
}Stats
Network overview stats and mini chart series for the homepage.
Example Request
curl "https://explorer-api.testnet.qfc.network/stats"
Example Response
{
"ok": true,
"data": {
"stats": {
"block_height": "42000",
"total_transactions": "150000",
"total_accounts": "3000",
"avg_block_time_ms": 5000,
"tps": 3.2
},
"series": { ... }
}
}Gas Oracle
Gas price oracle with percentile-based recommendations (slow/standard/fast), base fee, and suggested tip.
Example Request
curl "https://explorer-api.testnet.qfc.network/gas-oracle"
Example Response
{
"ok": true,
"data": {
"slow": { "gwei": "1.00", "wait_sec": 30 },
"standard": { "gwei": "2.00", "wait_sec": 15 },
"fast": { "gwei": "3.50", "wait_sec": 5 },
"base_fee_gwei": "0.50",
"suggested_tip": "0.75",
"block_number": 42000,
"last_updated": "2026-03-08T12:00:00.000Z"
}
}Leaderboard
Top accounts by balance, activity, block production, and contract interactions.
Example Request
curl "https://explorer-api.testnet.qfc.network/leaderboard"
Example Response
{
"ok": true,
"data": {
"topBalances": [
{ "address": "0x...", "balance": "50000000000000000000000" }
],
"mostActive": [
{ "address": "0x...", "sent": 500, "received": 300, "total": 800 }
],
"topValidators": [
{ "address": "0x...", "blocks_produced": 1200 }
],
"topContracts": [
{ "address": "0x...", "tx_count": 5000, "is_verified": true }
]
}
}Batch
Query multiple addresses at once for balances, nonces, tx counts, labels, and contract status. Max 20 addresses.
Request Body
{ "addresses": ["0xaaaa...", "0xbbbb...", "0xcccc..."] }Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/batch/addresses" \
-H "Content-Type: application/json" \
-d '{"addresses":["0xaaaa...","0xbbbb..."]}'Example Response
{
"ok": true,
"data": {
"addresses": [
{
"address": "0xaaaa...",
"balance": "50000000000000000000",
"nonce": 42,
"tx_count": { "sent": 100, "received": 55 },
"label": "Deployer",
"is_contract": false
}
]
}
}Authentication
Register a new user account. Returns an access token and sets a refresh token cookie.
Request Body
{ "email": "user@example.com", "password": "securepassword" }Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/auth/register" \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"securepassword"}'Example Response
{
"ok": true,
"data": {
"user": { "id": "uuid", "email": "user@example.com", "displayName": null },
"accessToken": "eyJhbGciOiJIUzI1NiIs..."
}
}Log in with email and password.
Request Body
{ "email": "user@example.com", "password": "securepassword" }Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/auth/login" \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"securepassword"}'Example Response
{
"ok": true,
"data": {
"user": { "id": "uuid", "email": "user@example.com" },
"accessToken": "eyJhbGciOiJIUzI1NiIs..."
}
}Refresh the access token using the refresh token cookie. Performs token rotation.
Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/auth/refresh" --cookie "qfc_refresh=..."
Example Response
{
"ok": true,
"data": { "accessToken": "eyJhbGciOiJIUzI1NiIs..." }
}Revoke the refresh token and clear the cookie.
Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/auth/logout" --cookie "qfc_refresh=..."
Example Response
{ "ok": true }Get the authenticated user profile. Requires Authorization header.
Example Request
curl "https://explorer-api.testnet.qfc.network/auth/me" -H "Authorization: Bearer eyJ..."
Example Response
{
"ok": true,
"data": {
"user": { "id": "uuid", "email": "user@example.com", "displayName": "Alice" }
}
}Update profile (display name, avatar URL). Requires auth.
Request Body
{ "displayName": "Alice", "avatarUrl": "https://..." }Example Request
curl -X PATCH "https://explorer-api.testnet.qfc.network/auth/me" \
-H "Authorization: Bearer eyJ..." \
-H "Content-Type: application/json" \
-d '{"displayName":"Alice"}'Example Response
{
"ok": true,
"data": {
"user": { "id": "uuid", "email": "user@example.com", "displayName": "Alice" }
}
}Request a password reset email. Always returns success to prevent email enumeration.
Request Body
{ "email": "user@example.com" }Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/auth/password/forgot" \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com"}'Example Response
{
"ok": true,
"data": { "message": "If that email is registered, a reset link has been sent." }
}Reset password using a valid reset token.
Request Body
{ "token": "reset-token-uuid", "password": "newpassword123" }Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/auth/password/reset" \
-H "Content-Type: application/json" \
-d '{"token":"reset-token-uuid","password":"newpassword123"}'Example Response
{
"ok": true,
"data": { "message": "Password has been reset. Please log in again." }
}Watchlist
List watched addresses with current balances. Requires auth.
Example Request
curl "https://explorer-api.testnet.qfc.network/watchlist" -H "Authorization: Bearer eyJ..."
Example Response
{
"ok": true,
"data": {
"items": [
{
"address": "0x...",
"label": "My Wallet",
"balance": "50000000000000000000",
"txCount": 155,
"notifyIncoming": true,
"notifyOutgoing": false
}
]
}
}Add an address to the watchlist (max 50). Requires auth.
Request Body
{
"address": "0x...",
"label": "My Wallet",
"notifyIncoming": true,
"notifyOutgoing": false,
"notifyThreshold": "1000000000000000000",
"webhookUrl": "https://..."
}Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/watchlist" \
-H "Authorization: Bearer eyJ..." \
-H "Content-Type: application/json" \
-d '{"address":"0x...","label":"My Wallet"}'Example Response
{
"ok": true,
"data": { "item": { "address": "0x...", "label": "My Wallet" } }
}Update watchlist item settings (label, notifications, webhook). Requires auth.
Request Body
{ "label": "Updated Name", "notifyIncoming": false }Example Request
curl -X PATCH "https://explorer-api.testnet.qfc.network/watchlist/0x..." \
-H "Authorization: Bearer eyJ..." \
-H "Content-Type: application/json" \
-d '{"label":"Updated Name"}'Example Response
{
"ok": true,
"data": { "item": { "address": "0x...", "label": "Updated Name" } }
}Remove an address from the watchlist. Requires auth.
Example Request
curl -X DELETE "https://explorer-api.testnet.qfc.network/watchlist/0x..." -H "Authorization: Bearer eyJ..."
Example Response
{ "ok": true, "data": { "removed": true } }Check if an address is in the authenticated user's watchlist.
Example Request
curl "https://explorer-api.testnet.qfc.network/watchlist/0x.../check" -H "Authorization: Bearer eyJ..."
Example Response
{
"ok": true,
"data": { "watching": true, "item": { "address": "0x...", "label": "My Wallet" } }
}API Keys
List user's API keys with usage stats. Requires auth.
Example Request
curl "https://explorer-api.testnet.qfc.network/api-keys" -H "Authorization: Bearer eyJ..."
Example Response
{
"ok": true,
"data": {
"keys": [
{
"id": "uuid",
"keyPrefix": "qfc_ab12",
"name": "Production",
"tier": "free",
"rateLimit": 5,
"dailyLimit": 10000,
"requestsToday": 150,
"usage": [{ "date": "2026-03-08", "count": 150 }]
}
]
}
}Create a new API key (max 3 per user). The full key is shown only once. Requires auth.
Request Body
{ "name": "Production" }Example Request
curl -X POST "https://explorer-api.testnet.qfc.network/api-keys" \
-H "Authorization: Bearer eyJ..." \
-H "Content-Type: application/json" \
-d '{"name":"Production"}'Example Response
{
"ok": true,
"data": {
"key": "qfc_ab12cd34ef56...",
"id": "uuid",
"name": "Production",
"tier": "free",
"rateLimit": 5,
"dailyLimit": 10000
}
}Rename an API key. Requires auth.
Request Body
{ "name": "New Name" }Example Request
curl -X PATCH "https://explorer-api.testnet.qfc.network/api-keys/uuid" \
-H "Authorization: Bearer eyJ..." \
-H "Content-Type: application/json" \
-d '{"name":"New Name"}'Example Response
{ "ok": true, "data": { "updated": true } }Revoke an API key. Requires auth.
Example Request
curl -X DELETE "https://explorer-api.testnet.qfc.network/api-keys/uuid" -H "Authorization: Bearer eyJ..."
Example Response
{ "ok": true, "data": { "revoked": true } }Usage stats for an API key over the last N days.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
days | number | 30 | Number of days (1-90) |
Example Request
curl "https://explorer-api.testnet.qfc.network/api-keys/uuid/usage?days=7" -H "Authorization: Bearer eyJ..."
Example Response
{
"ok": true,
"data": {
"usage": [
{ "date": "2026-03-02", "count": 120 },
{ "date": "2026-03-03", "count": 85 }
]
}
}Health
Health check: database connectivity, RPC status, and indexer lag.
Example Request
curl "https://explorer-api.testnet.qfc.network/health"
Example Response
{
"ok": true,
"data": {
"db": true,
"rpc": true,
"indexer_lag": 0,
"uptime_seconds": 86400
}
}