← Back to Explorer

API Documentation

Free, open API for accessing Zcash blockchain data. 44 endpoints, no authentication required.

Base URL
https://api.mainnet.cipherscan.app/api
Network
Mainnet
Auto-detected from domain
Rate Limit
100 req/min
Per IP address
Authentication
None Required
Free & open

Privacy & Limitations

Shielded Addresses:Due to Zcash's privacy features, shielded addresses (z-addresses) and their balances cannot be queried. Only transparent addresses (t-addresses) and unified addresses with transparent receivers are supported.

Networks: This API is available on both mainnet ( api.mainnet.cipherscan.app) and testnet ( api.testnet.cipherscan.app). The base URL above reflects the network you are currently viewing.

Rate Limiting:If you exceed 100 requests per minute, you'll receive a 429 Too Many Requests response.

Values: Monetary amounts in responses are in zatoshis (1 ZEC = 100,000,000 zatoshis) unless otherwise noted. Some endpoints return both ZEC and zatoshi values.

Blocks

3 endpoints
GET/api/block/:heightOrHash

Get detailed information about a specific block by height or hash, including all transactions with fee, total_input, and total_output in zatoshis.

Parameters

heightOrHash(number | string)required
- Block height (e.g., 2500000) or 64-character block hash

Example Request

curl https://api.mainnet.cipherscan.app/api/block/2500000
GET/api/blocks

Get a paginated list of recent blocks.

Parameters

limit(number)
- Number of blocks to return (1–100, default: 10)
offset(number)
- Number of blocks to skip (default: 0)

Example Request

curl 'https://api.mainnet.cipherscan.app/api/blocks?limit=10&offset=0'
GET/api/network/blocks/recent

Get recent blocks with miner reward details.

Parameters

limit(number)
- Number of blocks to return (1–50, default: 15)

Example Request

curl 'https://api.mainnet.cipherscan.app/api/network/blocks/recent?limit=5'

Transactions

6 endpoints
GET/api/tx/:txid

Get detailed information about a specific transaction, including transparent inputs/outputs, shielded activity, and cross-chain bridge data if applicable.

Parameters

txid(string)required
- Transaction ID (64-character hex hash)

Example Request

curl https://api.mainnet.cipherscan.app/api/tx/abc123...
GET/api/tx/:txid/raw

Get the raw hex-encoded transaction data.

Parameters

txid(string)required
- Transaction ID

Example Request

curl https://api.mainnet.cipherscan.app/api/tx/abc123.../raw
GET/api/tx/:txid/verbose

Get the full decoded transaction from the Zebra node (raw hex + decoded JSON with all inputs, outputs, shielded data, and script details).

Fetches directly from the Zebra RPC node with verbosity=1. Useful for developers inspecting raw protocol data.

Parameters

txid(string)required
- Transaction ID (64 hex characters)

Example Request

curl https://api.mainnet.cipherscan.app/api/tx/abc123.../verbose
GET/api/tx/shielded

Query shielded transactions with advanced filters. Filter by pool type, fully-shielded vs partial, and minimum shielded actions.

Parameters

limit(number)
- Results per page (1–100, default: 50)
offset(number)
- Pagination offset (default: 0)
pool(string)
- Filter by pool: "sapling", "orchard", or omit for all
type(string)
- Filter: "fully-shielded" (no transparent I/O) or "partial" (mixed)
min_actions(number)
- Minimum number of shielded actions/spends/outputs

Example Request

curl 'https://api.mainnet.cipherscan.app/api/tx/shielded?pool=orchard&type=fully-shielded&limit=10'
GET/api/shielded/list

Paginated list of shielded flows (shielding and deshielding events). Uses cursor-based pagination for efficient traversal.

Parameters

limit(number)
- Results per page (1–100, default: 50)
cursor(string)
- Cursor for pagination (block height)
cursor_id(string)
- Secondary cursor (flow ID within block)
direction(string)
- "next" (default) or "prev"
flow_type(string)
- "all" (default), "shield", or "deshield"
pool(string)
- "all" (default), "sapling", "orchard", or "mixed"

Example Request

curl 'https://api.mainnet.cipherscan.app/api/shielded/list?flow_type=shield&pool=orchard&limit=10'
POST/api/tx/broadcast

Broadcast a signed raw transaction to the Zcash network.

Returns the txid on success. If the transaction is invalid or rejected by the network, returns an error with details.

Parameters

rawTx(string)required
- Hex-encoded signed transaction

Example Request

curl -X POST https://api.mainnet.cipherscan.app/api/tx/broadcast -H "Content-Type: application/json" -d '{"rawTx": "0500..."}'

Mempool

2 endpoints
GET/api/mempool

Get current mempool status including all pending transactions and shielded/transparent breakdown.

Example Request

curl https://api.mainnet.cipherscan.app/api/mempool
GET/api/mempool/tx/:txid

Check if a specific transaction is in the mempool and get its details.

Parameters

txid(string)required
- Transaction ID to look up

Example Request

curl https://api.mainnet.cipherscan.app/api/mempool/tx/abc123...

Addresses

3 endpoints
GET/api/address/:address

Get balance, transaction count, and paginated transaction history for a transparent address.

Shielded addresses (z-addresses) cannot be queried due to privacy by design. Only transparent addresses (t-addresses) are supported. Balance is in zatoshis (1 ZEC = 100,000,000 zatoshis).

Parameters

address(string)required
- Zcash transparent address (t-address)
page(number)
- Page number (default: 1)
limit(number)
- Transactions per page (1–100, default: 25)

Example Request

curl 'https://api.mainnet.cipherscan.app/api/address/t1abc...?page=1&limit=25'
GET/api/rich-list

Get the top transparent addresses ranked by balance, with concentration metrics.

Balances are in zatoshis. Known addresses are labeled (exchanges, miners, custodians). Concentration metrics show supply distribution across the transparent pool only.

Parameters

limit(number)
- Number of addresses to return (1–500, default: 100)
offset(number)
- Pagination offset (default: 0)

Example Request

curl 'https://api.mainnet.cipherscan.app/api/rich-list?limit=10'
GET/api/labels

Get all known address labels (exchanges, miners, custodians, government seizures, etc.).

Example Request

curl https://api.mainnet.cipherscan.app/api/labels

Supply

6 endpoints
GET/api/circulating-supply

Get the current ZEC circulating supply. Returns plain text by default (for aggregator compatibility) or JSON with the format parameter.

Without ?format=json, returns a plain text number (e.g., "16234567.89") for compatibility with CoinGecko, CoinMarketCap, and similar aggregators.

Parameters

format(string)
- Set to "json" for structured response. Omit for plain text number.

Example Request

curl 'https://api.mainnet.cipherscan.app/api/circulating-supply?format=json'
GET/api/supply

Get the current value locked in each Zcash pool (Transparent, Sprout, Sapling, Orchard).

Compatible with the zcashexplorer.app value pools format. Values in ZEC and zatoshis.

Example Request

curl https://api.mainnet.cipherscan.app/api/supply
GET/api/supply/transparent-breakdown

Breakdown of transparent supply by labeled category (exchanges, miners, custodians, etc.).

Example Request

curl https://api.mainnet.cipherscan.app/api/supply/transparent-breakdown
GET/api/network/halving

Get information about the next Zcash block reward halving, including countdown, current/next subsidy, and funding stream breakdown.

Example Request

curl https://api.mainnet.cipherscan.app/api/network/halving
GET/api/network/emission

Historical supply emission curve and daily emission data.

Parameters

period(string)
- Time range: "30d", "90d", "1y", "all" (default: "1y")

Example Request

curl 'https://api.mainnet.cipherscan.app/api/network/emission?period=1y'
GET/api/network/pool-history

Historical shielded pool sizes over time. Shows the split between Sprout, Sapling, Orchard, and Transparent pools.

Values are in zatoshis. When hasVerifiedPerPoolBreakdown is true, per-pool values come from verified chain state (not estimates).

Parameters

period(string)
- Time range: "7d", "30d", "90d", "1y", "all" (default: "1y")

Example Request

curl 'https://api.mainnet.cipherscan.app/api/network/pool-history?period=90d'

Network

10 endpoints
GET/api/network/stats

Comprehensive network statistics: mining (hashrate, difficulty, block times), network (peers, height), blockchain (size, tx volume), and supply (pool breakdown).

Cached for 60 seconds. The supply object may not be present on all networks. dailyRevenue is total daily emission from block subsidies (not transaction fees).

Example Request

curl https://api.mainnet.cipherscan.app/api/network/stats
GET/api/network/mining-metrics

Rolling-window mining metrics for charting: solution rate, difficulty, block times, fees, and transaction counts over recent blocks.

Parameters

window(number)
- Rolling average window size in blocks (5–100, default: 20)
limit(number)
- Number of data points to return (20–500, default: 120)

Example Request

curl 'https://api.mainnet.cipherscan.app/api/network/mining-metrics?window=20&limit=60'
GET/api/network/health

Check the health status of the Zebra node.

Example Request

curl https://api.mainnet.cipherscan.app/api/network/health
GET/api/network/peers

Get information about connected Zcash network peers.

Example Request

curl https://api.mainnet.cipherscan.app/api/network/peers
GET/api/network/nodes

Get geographic distribution of Zcash nodes for map visualization.

Example Request

curl https://api.mainnet.cipherscan.app/api/network/nodes
GET/api/network/fees

Get current fee estimates based on ZIP-317 conventional fee structure.

Example Request

curl https://api.mainnet.cipherscan.app/api/network/fees
GET/api/blockchain-info

Raw blockchain info from the Zebra node (getblockchaininfo RPC), including consensus rules and upgrade activation heights.

Example Request

curl https://api.mainnet.cipherscan.app/api/blockchain-info
GET/api/price

Get the current ZEC/USD price and 24-hour change (sourced from CoinGecko).

Example Request

curl https://api.mainnet.cipherscan.app/api/price
GET/api/price/at

Get the historical ZEC/USD price for a specific date. Falls back to the closest earlier date if exact date is unavailable.

Parameters

date(string)required
- Date in YYYY-MM-DD format

Example Request

curl https://api.mainnet.cipherscan.app/api/price/at?date=2025-01-15
GET/api/network/protocol-stats

Commitment tree sizes and nullifier set sizes for Sapling and Orchard pools, with monthly historical growth data.

Sapling commitments = total Sapling note outputs (commitment tree size). Orchard actions each produce both a commitment and a nullifier. Cached for 5 minutes.

Example Request

curl https://api.mainnet.cipherscan.app/api/network/protocol-stats

Privacy

6 endpoints
GET/api/privacy-stats

Blockchain-wide privacy statistics: shielded adoption rates, pool sizes, privacy score, and daily trends.

Example Request

curl https://api.mainnet.cipherscan.app/api/privacy-stats
GET/api/stats/shielded-count

Total count of shielded transactions since a given date. With detailed=true, includes Sapling/Orchard breakdown.

Parameters

since(string)required
- Start date in ISO format (e.g., "2025-01-01")
detailed(boolean)
- If "true", returns pool breakdown and fully/partially shielded counts

Example Request

curl 'https://api.mainnet.cipherscan.app/api/stats/shielded-count?since=2025-01-01&detailed=true'
GET/api/stats/shielded-daily

Daily shielded transaction counts for a date range. Useful for building adoption trend charts.

Parameters

since(string)required
- Start date in ISO format
until(string)
- End date in ISO format (default: now)

Example Request

curl 'https://api.mainnet.cipherscan.app/api/stats/shielded-daily?since=2026-04-01&until=2026-05-01'
GET/api/blend-check

Check how common a ZEC amount is in shielded transactions. Higher blend scores mean better privacy — your transaction blends in with more others.

Blend score ranges: 0–20 (Poor), 20–40 (Fair), 40–60 (Good), 60–80 (Very Good), 80–100 (Excellent). Using common amounts improves your transaction privacy.

Parameters

amount(number)required
- ZEC amount to check (e.g., 1.0)

Example Request

curl 'https://api.mainnet.cipherscan.app/api/blend-check?amount=1.0'
GET/api/blend-check/split

Get recommendations for splitting an amount into common denominations to improve privacy.

Parameters

amount(number)required
- ZEC amount to split (e.g., 3.7)

Example Request

curl 'https://api.mainnet.cipherscan.app/api/blend-check/split?amount=3.7'
GET/api/tx/:txid/linkability

Analyze potential linkability between a shielding transaction and subsequent deshielding transactions based on amount, timing, and other heuristics.

Linkability analysis uses amount matching, timing correlation, and transaction graph analysis. A high score does not prove linkage — it indicates statistical correlation.

Parameters

txid(string)required
- Transaction ID of a shielding/deshielding tx
limit(number)
- Max linked transactions to return (1–20, default: 5)
tolerance(number)
- Amount tolerance in ZEC (default: 0.001)

Example Request

curl 'https://api.mainnet.cipherscan.app/api/tx/abc123.../linkability?limit=5'

Cross-Chain

3 endpoints
GET/api/crosschain/stats

Live cross-chain swap statistics via NEAR Intents. Shows 24h volume, inflows, outflows, and recent swaps.

Example Request

curl https://api.mainnet.cipherscan.app/api/crosschain/stats
GET/api/crosschain/history

Paginated history of all cross-chain swaps with optional filters.

Parameters

page(number)
- Page number (default: 1)
limit(number)
- Results per page (default: 20)
direction(string)
- "entry" (into ZEC) or "exit" (out of ZEC)
chain(string)
- Filter by chain (e.g., "ethereum", "bitcoin")

Example Request

curl 'https://api.mainnet.cipherscan.app/api/crosschain/history?direction=entry&chain=ethereum&limit=10'

Names (ZNS)

2 endpoints
GET/api/name/:name

Resolve a ZNS (Zcash Name Service) name to its registered address, along with marketplace listing if any.

Returns 404 if the name is not registered. Listing is null if the name is not for sale. Price is in zatoshis (1 ZEC = 100,000,000 zatoshis).

Parameters

name(string)required
- ZNS name to resolve (e.g., "satoshi")

Example Request

curl https://api.mainnet.cipherscan.app/api/name/satoshi
GET/api/name/:name/events

Get the full event history for a ZNS name: claims, listings, delistings, sales, and updates.

Actions: CLAIM, LIST, DELIST, UPDATE, BUY.

Parameters

name(string)required
- ZNS name (e.g., "satoshi")

Example Request

curl https://api.mainnet.cipherscan.app/api/name/satoshi/events

Pool Analytics

3 endpoints
GET/api/pools/overview

Current shielded pool sizes (Sapling, Orchard, Sprout) with 24h, 7d, and 30d deltas showing supply movement between pools.

Supply values in ZEC (not zatoshis). Deltas represent net flow into the pool over the period (positive = more ZEC shielded, negative = more deshielded).

Example Request

curl https://api.mainnet.cipherscan.app/api/pools/overview
GET/api/pools/flows

Time-series shield/deshield volume data. Supports daily or hourly granularity with optional pool filtering.

Values in ZEC. Net = shield - deshield. Hourly mode returns ISO timestamps; daily mode returns date strings (YYYY-MM-DD). Hourly cached 2min, daily cached 5min.

Parameters

period(string)
- Time window: 30d, 90d, 1y, all (default: 30d)
pool(string)
- Filter by pool: all, orchard, sapling, sprout (default: all)
granularity(string)
- Bucket size: daily or hourly (default: daily)

Example Request

curl "https://api.mainnet.cipherscan.app/api/pools/flows?period=7d&granularity=hourly&pool=orchard"
GET/api/pools/turnstile

Turnstile analysis: tracks where deshielded ZEC goes after exiting a shielded pool (still held, reshielded, transferred, sent to exchange, sent to bridge).

All amounts in zatoshis (1 ZEC = 100,000,000 zat). Categories are mutually exclusive. "Still held" means the deshielded output has not been spent yet. Updated daily at 04:00 UTC.

Parameters

since(string)
- Start date in YYYY-MM-DD format (default: 2020-01-01)

Example Request

curl "https://api.mainnet.cipherscan.app/api/pools/turnstile?since=2026-01-01"

Code Examples

JavaScript / Node.js

const BASE = 'https://api.mainnet.cipherscan.app';

// Latest blocks
const blocks = await fetch(BASE + '/api/blocks?limit=5');
console.log(await blocks.json());

// Privacy stats
const stats = await fetch(BASE + '/api/privacy-stats');
const { metrics } = await stats.json();
console.log('Privacy score:', metrics.privacyScore);

// Blend check — how common is 1 ZEC?
const blend = await fetch(BASE + '/api/blend-check?amount=1.0');
console.log(await blend.json());

Python

import requests

BASE = 'https://api.mainnet.cipherscan.app'

# Circulating supply
supply = requests.get(f'{BASE}/api/circulating-supply?format=json').json()
print(f"Circulating: {supply['circulatingSupply']} ZEC")

# Rich list top 10
rich = requests.get(f'{BASE}/api/rich-list?limit=10').json()
for addr in rich['addresses']:
    label = addr.get('label', 'Unknown')
    print(f"#{addr['rank']} {label}: {addr['balance'] / 1e8:.2f} ZEC")

# Mempool
mempool = requests.get(f'{BASE}/api/mempool').json()
print(f"Pending: {mempool['count']} txs ({mempool['stats']['shieldedPercentage']}% shielded)")

cURL

# Halving countdown
curl https://api.mainnet.cipherscan.app/api/network/halving

# Cross-chain swap volume
curl https://api.mainnet.cipherscan.app/api/crosschain/stats

# Shielded transaction count since 2025
curl 'https://api.mainnet.cipherscan.app/api/stats/shielded-count?since=2025-01-01&detailed=true'

Error Responses

200Success. Response body contains the requested data.
400Bad request. Invalid parameters (e.g., non-numeric block height, missing required param).
404Not found. The requested block, transaction, address, or name does not exist.
429Rate limit exceeded. Wait and retry. Limit: 100 requests per minute per IP.
500Server error. The node or database may be temporarily unavailable.

Need Help?

If you have questions or need support, feel free to reach out: