Public API

Free, keyless access to all Nockchain data powering this explorer — blocks, transactions with resolved senders and recipients, address ledgers, holders, chain-canonical mining statistics and the on-chain supply audit. Served directly from nockscan's self-hosted indexer; no third-party APIs involved.

Base URL
https://nockscan.com/api/v1

RESTful paths (/api/v1/block/112500). The legacy form /api/data?endpoint=… remains supported. CORS is enabled (*).

Rate limit
120 req/min

Per IP, no key required. Exceeding it returns 429 with Retry-After; X-RateLimit-Limit / -Remaining / -Reset headers are set on every response.

Spec & units
OpenAPI 3.1 document →

All amounts are in nicks (65,536 nicks = 1 NOCK). Timestamps are unix seconds. Responses are cached per endpoint (see below).

Quick start
curl "https://nockscan.com/api/v1/tip"
curl "https://nockscan.com/api/v1/block/112500"
curl "https://nockscan.com/api/v1/address/<addr>?limit=20"

Data API#

REST over HTTPS, JSON responses, no key required. Every endpoint below is reachable at https://nockscan.com/api/v1/<endpoint>.

Chain#

GET/api/v1/tip#cache 5s

Current chain tip

Latest block hash, height and timestamp.

Request
curl "https://nockscan.com/api/v1/tip"
Response
{
  "hash": "5WzYgcpE…7gWVkB",
  "height": 112697,
  "timestamp": 1785069858
}
GET/api/v1/stream#cache 0s

Live tip stream (SSE)

Server-Sent Events stream. Emits a `tip` event with the current tip on connect and whenever a new block is indexed (~1s latency). Connect with EventSource; the connection counts once against the rate limit.

Request
curl "https://nockscan.com/api/v1/stream"
Response
event: tip
data: {"hash":"6YBKz4yw…ivvPm","height":119492,"timestamp":1785820352}
GET/api/v1/recent-blocks#cache 30s

Most recent blocks

ParameterTypeDefaultDescription
countinteger5 (max 200)Number of blocks, newest last.
Request
curl "https://nockscan.com/api/v1/recent-blocks?count=3"
Response
{
  "blocks": [
    {
      "hash": "…", "height": 112695, "timestamp": 1785069788, "parent": "…",
      "transactions": [], "transactionCount": 0,
      "coinbase": [ { "address": "5aSmA4…", "nicks": 107374183 }, … ]
    }, …
  ],
  "tipHeight": 112697
}
GET/api/v1/blocks-range#cache 300s

Blocks in a height range

ParameterTypeDefaultDescription
startHeight *integer—First height (inclusive).
endHeight *integer— (max startHeight + 2500)Last height (inclusive).
Request
curl "https://nockscan.com/api/v1/blocks-range?startHeight=100000&endHeight=100010"
Response
{ "blocks": [ … ], "totalBlocks": 112698 }
GET/api/v1/block/{id}#cache 60s

Single block with PoW stats

Block by height or hash, including chain-canonical PoW stats decoded from the block header: difficulty (2^n of expected proof attempts), proofs/sec, epoch counter, target and accumulated work.

ParameterTypeDefaultDescription
id *string—Block height (numeric) or block hash.
Request
curl "https://nockscan.com/api/v1/block/112500"
Response
{
  "block": {
    "hash": "6bEGNU…E7SWHP", "height": 112500, "timestamp": 1785033007,
    "parent": "…", "transactionCount": 2, "coinbase": [ … ],
    "difficulty": "2^33.571", "proofsPerSecond": 85074061.6,
    "epochCounter": 1620, "target": "16738255…", "accumulatedWork": 70158453637520
  },
  "tipHeight": 112697
}
GET/api/v1/block-transactions/{id}#cache 60s

Transactions of a block, with resolved parties

ParameterTypeDefaultDescription
id *string—Block height (numeric) or block hash.
Request
curl "https://nockscan.com/api/v1/block-transactions/112500"
Response
{
  "transactions": [
    {
      "txId": "3rKip2…", "blockHeight": 112500, "version": 1,
      "timestamp": 1785033007, "totalFees": 16146432,
      "parties": {
        "senders": ["2RjfTi…"],
        "outputs": [ { "address": "5NFsB2…", "nicks": 6554058752, "isCoinbase": false } ]
      }
    }, …
  ]
}
GET/api/v1/export-blocks#cache 600s

Historic block data (CSV)

CSV export of block history: hash, timestamps, transaction count, fees, coinbase reward, difficulty, proof rate and ASERT epoch per block. Max 25,000 blocks per request — page the full chain with from/to.

ParameterTypeDefaultDescription
fromintegerto − 9999Start block height (inclusive).
tointegertipEnd block height (inclusive).
Request
curl "https://nockscan.com/api/v1/export-blocks?from=119398&to=119402"
Response
height,hash,time_utc,timestamp,parent,tx_count,fees_nicks,reward_nicks,log2_difficulty,proofs_per_second,epoch_counter
119400,2tRPPd39…xwgvGwv,2026-08-04T01:39:44.000Z,1785807584,BfvmZiUn…1pfTRU,0,0,134217728,28.745350,3000000,456

Transactions#

GET/api/v1/latest-transactions#cache 30s

Paginated list of latest transactions

ParameterTypeDefaultDescription
limitinteger30 (max 100)Page size.
offsetinteger0Pagination offset (newest first).
Request
curl "https://nockscan.com/api/v1/latest-transactions?limit=2&offset=0"
Response
{
  "transactions": [
    {
      "layer": "l1", "txId": "3rKip2…", "blockId": "6bEGNU…",
      "blockHeight": 112500, "timestamp": 1785033007,
      "transaction": { "totalFees": 16146432 },
      "parties": { "senders": [ … ], "outputs": [ … ] }
    }, …
  ],
  "totalCount": 74742,
  "pagination": { "limit": 2, "offset": 0, "hasMore": true },
  "tipHeight": 112697
}
GET/api/v1/transaction-details/{txId}#cache 3600s

Full transaction drilldown

Spends (with sender addresses, spent-note values, coinbase flags and the creating transaction for tracing), outputs (with resolved owner, owner type, spend status) and fees.

ParameterTypeDefaultDescription
txId *string—Transaction id.
Request
curl "https://nockscan.com/api/v1/transaction-details/3rKip2…"
Response
{
  "version": "v1",
  "data": {
    "id": "3rKip2…", "blockId": "…", "blockHeight": 112500,
    "timestamp": 1785033007, "totalFees": 16146432,
    "spends": [
      { "sender": "5xeqjT…", "inputAssets": 107374183, "inputCoinbase": true,
        "fee": 260823, "createdByTx": null, … }
    ],
    "outputs": [
      { "owner": "5NFsB2…", "ownerType": "pkh", "assets": 6554058752,
        "isCoinbase": false, "spentByTx": "7vr7Zc…" }
    ]
  }
}

Addresses & Holders#

GET/api/v1/address/{address}#cache 30s

Address balance, stats and ledger

Double-entry ledger per address: current balance (sum of unspent notes), totals, and a paginated transaction list with counterparties. Coinbase rows use synthetic ids (coinbase-<blockId>).

ParameterTypeDefaultDescription
address *string—Address (pkh, or v0 public key).
limitinteger20 (max 200)Ledger page size.
offsetinteger0Ledger offset (newest first).
Request
curl "https://nockscan.com/api/v1/address/5NFsB2…?limit=2"
Response
{
  "address": "5NFsB2…", "currentBalance": 6554058752,
  "totalReceived": 329824272384, "totalSent": 323270213632,
  "totalTransactions": 113,
  "transactions": [
    { "txId": "3rKip2…", "blockHeight": 112500, "timestamp": 1785033007,
      "type": "received", "amount": 6554058752, "fee": 0,
      "counterparties": ["7e4dwF…"], "isCoinbase": false }
  ],
  "pagination": { "limit": 2, "offset": 0, "hasMore": true },
  "ownedFirstNames": [ … ]
}
GET/api/v1/address-flows/{address}#cache 60s

Daily in/out flows for an address

ParameterTypeDefaultDescription
address *string—Address.
daysinteger90 (max 3650)Window in days (anchored to chain tip).
Request
curl "https://nockscan.com/api/v1/address-flows/5NFsB2…?days=7"
Response
{
  "address": "5NFsB2…", "days": 7,
  "flows": [ { "date": "2026-07-25", "inNicks": 49809063936, "outNicks": 49809063936 }, … ]
}
GET/api/v1/holders#cache 120s

Top holders by balance

ParameterTypeDefaultDescription
limitinteger50 (max 1000)Page size.
offsetinteger0Offset.
Request
curl "https://nockscan.com/api/v1/holders?limit=2"
Response
{
  "items": [ { "address": "AcsPku…", "balance": 83245799194721, "notes": 424 }, … ],
  "totalCount": 6640,
  "pagination": { "limit": 2, "offset": 0, "hasMore": true }
}
GET/api/v1/holder-stats#cache 300s

Holder distribution statistics

Average and median holding over ordinary holders: wallets with at least 100 NOCK, leaving out the Base bridge lock, NCC's community wallet, Zorp treasury wallets and exchange wallets (named in excludedWallets). Also the holder count and schedule-derived supply figures.

Request
curl "https://nockscan.com/api/v1/holder-stats"
Response
{
  "averageHolding": 333141.71, "medianHolding": 870,
  "countedHolders": 2243, "minHolding": 100,
  "excludedWallets": ["Base Bridge Multisig", "NCC", "SafeTrade", "Zorp 2"],
  "totalHolders": 7557, "currentHeight": 152740,
  "totalSupply": 4294967296, "circulatingSupply": 2247026688
}
GET/api/v1/address-growth#cache 300s

Cumulative unique addresses over time

ParameterTypeDefaultDescription
dataPointsinteger50 (max 200)Number of sample points.
windowSizeinteger30572Window size in blocks (informational).
Request
curl "https://nockscan.com/api/v1/address-growth?dataPoints=4"
Response
{
  "startHeight": 0, "endHeight": 112697, "windowSize": 30572,
  "windows": [ { "endHeight": 28174, "timestamp": 1756871413, "totalUniqueAddresses": 1892, … }, … ]
}
GET/api/v1/export-transactions/{address}#cache 300s

Address transaction history (CSV)

Accounting-style CSV export of an address's full history — one row per transaction or coinbase with credit/debit/fee amounts and a running balance, modeled on the iris-blocks audit ledger. Fees are included in debit amounts (informational column). Capped at 50,000 rows; page longer histories with from/to height bounds.

ParameterTypeDefaultDescription
addressstring—Address (pkh) to export.
frominteger0Start block height (inclusive).
tointegertipEnd block height (inclusive).
Request
curl "https://nockscan.com/api/v1/export-transactions/5NFsB2cW…24igt6X"
Response
block_height,time_utc,type,txid,credit_nicks,debit_nicks,fee_nicks,net_nicks,running_balance_nicks,running_balance_nock
107551,2026-07-19T13:27:31.000Z,in,CRo8TdKs…Diq15fL,32768000,0,0,32768000,32768000,500.00000000

Mining & Network#

GET/api/v1/network#cache 120s

Peers of nockscan's nodes, by area

Who nockscan's own nodes are connected to over p2p, refreshed every five minutes: areas with at least three peers (smaller groups join their country or continent), countries, hosting networks, and round-trip and block-propagation medians. A sample of the network, not a census. No IP address is ever published. IP geolocation by DB-IP (CC BY 4.0).

Request
curl "https://nockscan.com/api/v1/network"
Response
{
  "nodes": [ { "id": "nockscan-de", "name": "nockscan · Germany", "peers": 62, "medianRttMs": 526, … } ],
  "areas": [ { "kind": "place", "name": "Tokyo", "countries": ["Japan"], "lat": 35.68, "lon": 139.65, "peers": 6, "nodes": [ … ] }, … ],
  "countries": [ { "name": "United States", "peers": 20 }, … ],
  "networks": [ { "name": "OVHcloud", "peers": 5 }, … ],
  "summary": { "peers": 66, "countries": 15, "areas": 14, "unplaced": 1, "medianRttMs": 523, … }
}
GET/api/v1/proof-rate#cache 120s

ZK proof-rate history

Realized ZK proof rate (ZK puzzle only — AI-PoW is reported separately by `ai-pow-rate`): ZK work summed over a trailing 100-ZK-block window ÷ the wall time it took. `latest` carries the current realized rate plus the ZK target rate (work ÷ the height-selected ZK ideal: 500s from 147500, 214s from Logos, 150s before Logos), its own height, and the average ZK block interval. Rates are raw: post-147500 Tip5 attempts/s must be divided by 10,000 for display as ZK proof equivalents. Rolling windows reset at that boundary. Downsampled for charting.

Request
curl "https://nockscan.com/api/v1/proof-rate"
Response
{
  "data": [ { "height": 119820, "proofrate": 7011233.4, "timestamp": 1785858360 }, … ],
  "latest": { "realized": 7011233.4, "target": 3672041.5, "avgBlockTime": 78.1 },
  "tipHeight": 119826
}
GET/api/v1/epoch-proof-rate#cache 120s

ZK proof rate, rolling 2,016-block window

Request
curl "https://nockscan.com/api/v1/epoch-proof-rate"
Response
{
  "data": [ { "height": 110682, "proofrate": 79916013.2, "timestamp": 1784859164 }, … ],
  "epochStart": 110682,
  "tipHeight": 112697
}
GET/api/v1/prover-stats#cache 300s

Prover leaderboard

Blocks mined, rewards and share per prover group over a period (anchored to the chain tip). Fixed protocol cuts (NCC) are listed after the prover.

ParameterTypeDefaultDescription
periodstring24hOne of 24h, 7d, 30d.
Request
curl "https://nockscan.com/api/v1/prover-stats?period=24h"
Response
{
  "period": "24h", "totalBlocks": 864, "totalRewards": 116017816928,
  "provers": [
    { "addresses": ["27YaGW…", "9EhcJi…"], "blocksMined": 398,
      "totalRewards": 53418655744, "sharePercentage": 46.06 }, …
  ],
  "fromTimestamp": 1784983499, "toTimestamp": 1785069858
}
GET/api/v1/block-time-stats#cache 60s

Average block times

epochAvg is a rolling 24h window (576 blocks at the 150s target); last100Avg covers the last 100 blocks.

Request
curl "https://nockscan.com/api/v1/block-time-stats"
Response
{
  "epochAvg": 115.2, "last100Avg": 108.41,
  "epochStart": 112122, "tipHeight": 112697
}
GET/api/v1/epoch-progress#cache 60s

Emission era progress

Progress through the current emission era (eon) with an ETA to the next reward drop.

Request
curl "https://nockscan.com/api/v1/epoch-progress"
Response
{
  "epoch": 3, "epochStart": 65501, "epochSize": 105000,
  "blocksInEpoch": 47197, "remainingBlocks": 57803, "progress": 44.95,
  "avgBlockTime": 115.2, "eta": 6659006.1, "tipHeight": 112697
}
GET/api/v1/mining-metrics#cache 30s

One-call mining dashboard

Current difficulty, target and realized proof rate (difficulty ÷ actual avg block time over the last 100 blocks), block cadence vs the 150s ASERT target, current block reward and legacy epoch counter. `puzzles` splits the last 100 blocks by puzzle: block share, and work share in normalized work — ZK in Tip5 hashes, AI in MACs ÷ the network's normalized work rate (`workNormalization`: 14,285,714 MAC per hash from block 154500). Ideal for bots and status pages.

Request
curl "https://nockscan.com/api/v1/mining-metrics"
Response
{
  "latestBlock": 112697,
  "latestBlockHash": "5WzYgcpE…7gWVkB",
  "latestBlockTimestamp": 1785069858,
  "difficulty": "2^33.396",
  "log2Difficulty": 33.396,
  "proofsPerSecondTarget": 75341016,
  "proofsPerSecondRealized": 104246041,
  "avgBlockTime100": 108.41,
  "targetBlockTime": 150,
  "cadence": 1.38,
  "epochCounter": 1817,
  "blockRewardNock": 2048
}
GET/api/v1/supply-audit#cache 300s

On-chain supply audit

Ground truth: the sum of all unspent notes. Matching the emission schedule proves no NOCK exists outside consensus.

Request
curl "https://nockscan.com/api/v1/supply-audit"
Response
{
  "unspentNicks": 147261141024768,
  "utxoCount": 93249,
  "tipHeight": 112697
}
GET/api/v1/block-proof/{id}#cache 86400s

Raw block STARK proof (.jam)

The block's full zero-knowledge proof of work as a jammed noun. Verify it independently with vanilla nockchain tooling: `cargo build --release -p roswell` in the nockchain repo, then `roswell check-proof --proof <file>` — exit code 0 means the STARK proof is valid. Recent proofs are served from storage; older ones are fetched from the node on demand. ~90–120 KB binary.

ParameterTypeDefaultDescription
idstring—Block hash or height.
Request
curl "https://nockscan.com/api/v1/block-proof/119400"
Response
(binary application/octet-stream, Content-Disposition: nockchain-proof-119400.jam)
GET/api/v1/ai-pow-rate#cache 60s

AI-PoW work-rate history (MAC/s)

Realized AI-PoW work rate in multiply-accumulates per second: the MAC work of the AI blocks stamped within a trailing window of time ÷ that window (AI blocks only; the ZK puzzle is `proof-rate`). `window` is 3h, 12h (the protocol's 43,200 s ASERT half-life, what the site shows), 24h or 7d (the default, as before); the response names it (`window`, `windowSeconds`, `windowHours`; `windowDays` kept for older clients). The series restarts at block 154500, Nockchain's balance upgrade (both difficulty lanes restarted from their anchors, AI from 10 ExaMAC/s, and AI work was repriced against ZK work; MACs are counted as before), so no average mixes blocks from both sides; `since` (a height) returns the series from that height on at full chart resolution, its `ath` and `first` included, and `last` (a block count) the trailing blocks. `latest` carries realized, the difficulty-implied target (work ÷ the AI ideal: 500s before 147500, 214s from that height), data and target heights, and the mean AI block interval over the window; `ath` and `first` are the exact maximum and first reading of the full series; `firstAiBlock` is the first AI-PoW block. Downsampled for charting.

ParameterTypeDefaultDescription
windowstring7dSmoothing window: 3h, 12h, 24h or 7d.
sinceinteger—Only points from this height on (e.g. 154500), downsampled within that range.
lastinteger—Only the trailing blocks (e.g. 2016): since = tip − last.
Request
curl "https://nockscan.com/api/v1/ai-pow-rate"
Response
{ "data": [ { "height": 154765, "macPerSecond": 1.85e19, "targetMacPerSecond": 1.24e19, "timestamp": 1790439500 }, … ], "window": "12h", "windowSeconds": 43200, "windowHours": 12, "windowDays": 0.5, "windows": ["3h", "12h", "24h", "7d"], "latest": { "realized": 1.85e19, "target": 1.24e19, "avgBlockTime": 130 }, "ath": { … }, "first": { … }, "firstAiBlock": { "height": 126859, "timestamp": 1786805223 } }
GET/api/v1/merge-mining#cache 120s

Pearl merge-mining forensics

AI-PoW blocks can be merge-mined with the Pearl chain. `declared` counts AI blocks whose consensus cert embeds a Pearl coinbase committing to this exact Nockchain block (verified by nockchain consensus itself); `pearl` counts Pearl chain blocks carrying the NOCKCHAIN-AI-POW-AUX commitment and how many are matched to their Nockchain AI block by exact 32-byte commitment equality. `recentPairs` lists the latest matched pairs.

Request
curl "https://nockscan.com/api/v1/merge-mining"
Response
{ "declared": { "totalAi": 3242, "declaredAi": 2178, "share": 0.67 }, "pearl": { "taggedBlocks": 320, "matchedPairs": 300 }, "recentPairs": [ … ] }
GET/api/v1/forensics#cache 300s

Mining forensics aggregates

Proof-level forensic data across the chain: an independent digest≤target integrity re-check of every indexed proof, proof-version eras, trace-commitment reuse (grinding fingerprint), timestamp anomalies, and per-prover proof behavior (average luck, near-target share).

Request
curl "https://nockscan.com/api/v1/forensics"
Response
{
  "tipHeight": 119721,
  "coverage": 119722,
  "integrity": { "checked": 119722, "violations": 0 },
  "binding": { "checked": 54222, "violations": 0 },
  "stark": { "verified": 8120, "failed": 0 },
  "versions": [{ "version": 3, "blocks": 322, "fromHeight": 119400, "toHeight": 119721 }],
  "commitmentReuse": [],
  "timestampAnomalies": { "total": 119, "recent": [] },
  "provers": [{ "address": "3fCa…", "blocks": 40213, "avgLuck": 0.497, "nearTargetShare": 0.101 }]
}

Node gRPC API#

The vanilla Nockchain public gRPC surface, served straight from our own fully-synced node — the same protos as any Nockchain node, so wallets and tools can point at it as a drop-in endpoint. TLS on port 443, HTTP/2, gRPC reflection enabled (tooling auto-discovers every method). No key required; 120 req/min per IP — the same limit as the Data API. The node's private API (Peek/Poke/WatchEffects) is not served here — it stays bound to localhost.

Endpoint
api.nockscan.com:443
grpcurl api.nockscan.com:443 list
grpcurl api.nockscan.com:443 nockchain.public.v2.NockchainMetricsService/GetExplorerMetrics
Logos (block 126,000) — action needed for clients

From the Logos activation, blocks may be mined by AI-PoW as well as ZK-PoW, and AI-PoW blocks carry their proof as a structured noun rather than a bare atom or byte list. Clients decoding pages with a nockchain-types build older than 3e72d53f will fail to decode those proofs. Legacy atom and byte-list proofs still decode unchanged, so pre-Logos history is unaffected — only newly mined AI-PoW blocks require the updated decoder. Our node already runs that commit (see above); this is a client-side upgrade.

nockchain.public.v2.NockchainMetricsService#
Node and chain health metrics.
rpcGetExplorerMetrics#Chain tip, cache coverage and sync freshness.
grpcurl -d '{}' \
  api.nockscan.com:443 nockchain.public.v2.NockchainMetricsService/GetExplorerMetrics
rpcGetPeerStats#Connected peers with request/failure counts.
grpcurl -d '{}' \
  api.nockscan.com:443 nockchain.public.v2.NockchainMetricsService/GetPeerStats
rpcGetReqResMetrics#Request/response latency percentiles.
grpcurl -d '{}' \
  api.nockscan.com:443 nockchain.public.v2.NockchainMetricsService/GetReqResMetrics
nockchain.public.v2.NockchainBlockService#
Block and transaction reads.
rpcGetBlocks#Paginated list of blocks.
grpcurl -d '{"page":{"client_page_items_limit":10}}' \
  api.nockscan.com:443 nockchain.public.v2.NockchainBlockService/GetBlocks
page_token is an opaque server cursor — treat it as a black box.
rpcGetBlockDetails#One block, by height or block id.
grpcurl -d '{"height":120500}' \
  api.nockscan.com:443 nockchain.public.v2.NockchainBlockService/GetBlockDetails
Or by id: {"block_id":{"hash":"<base58>"}}
rpcGetTransactionDetails#Full transaction detail by tx id.
grpcurl -d '{"tx_id":{"hash":"<base58 tx id>"}}' \
  api.nockscan.com:443 nockchain.public.v2.NockchainBlockService/GetTransactionDetails
rpcGetTransactionBlock#The block containing a given transaction.
grpcurl -d '{"tx_id":{"hash":"<base58 tx id>"}}' \
  api.nockscan.com:443 nockchain.public.v2.NockchainBlockService/GetTransactionBlock
nockchain.public.v2.NockchainService#
Wallet operations.
rpcWalletGetBalance#Balance and notes for a public key.
grpcurl -d '{"address":{"key":"<base58 public key>"},"page":{"client_page_items_limit":50}}' \
  api.nockscan.com:443 nockchain.public.v2.NockchainService/WalletGetBalance
Takes a raw public key, NOT a pkh address — a pkh returns "Address is improperly formatted". The page field is required.
rpcWalletSendTransaction#Broadcast a signed raw transaction.
grpcurl -d '{"tx_id":{...},"raw_tx":{...}}' \
  api.nockscan.com:443 nockchain.public.v2.NockchainService/WalletSendTransaction
rpcTransactionAccepted#Whether a transaction has been accepted.
grpcurl -d '{"tx_id":{"hash":"<base58 tx id>"}}' \
  api.nockscan.com:443 nockchain.public.v2.NockchainService/TransactionAccepted

Fair use

This API is free and requires no key. Respect the 120 req/min limit, honor Cache-Control headers, and prefer paginated requests. If you are building something that needs more, reach out — we're happy to help.