{"openapi":"3.1.0","info":{"title":"NULL explorer API","description":"Public, read-only view of the NULL chain. NULL is shielded-only: the chain reveals blocks, transaction ids, action counts, nullifiers, note commitments, fees and sizes, never addresses, amounts or memos.","license":{"name":"AGPL-3.0-only"},"version":"0.1.0"},"paths":{"/v1/blocks":{"get":{"tags":["blocks"],"summary":"Newest blocks first.","operationId":"list","parameters":[{"name":"before","in":"query","description":"Only blocks below this height (the previous page's `next`).","required":false,"schema":{"type":["integer","null"],"format":"int32","minimum":0}},{"name":"limit","in":"query","description":"Page size, 1 to the configured maximum (default 20).","required":false,"schema":{"type":["integer","null"],"format":"int32","minimum":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_BlockSummary"}}}}}}},"/v1/blocks/{block}":{"get":{"tags":["blocks"],"summary":"One block by height or hash, with its transactions.","operationId":"get","parameters":[{"name":"block","in":"path","description":"Height or block hash","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlockDetail"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/commitments/{cmx}":{"get":{"tags":["lookup"],"summary":"Where a note commitment was created.","operationId":"commitment","parameters":[{"name":"cmx","in":"path","description":"Note commitment, 64 hex characters","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Location"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/disclosures/verify":{"post":{"tags":["disclosures"],"summary":"Verifies a payment disclosure against the chain.","operationId":"verify","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisclosureRequest"}}},"required":true},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisclosureResult"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"429":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/mempool":{"get":{"tags":["transactions"],"summary":"Pooled transactions as of the indexer's last pass.","operationId":"mempool","parameters":[{"name":"limit","in":"query","description":"How many transactions, 1 to the configured maximum (default 20).","required":false,"schema":{"type":["integer","null"],"format":"int32","minimum":0}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Mempool"}}}}}}},"/v1/nullifiers/{nullifier}":{"get":{"tags":["lookup"],"summary":"Where a nullifier was revealed: the spend of the note it names. A\nnullifier that is not found has not been spent on the indexed chain.","operationId":"nullifier","parameters":[{"name":"nullifier","in":"path","description":"Nullifier, 64 hex characters","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Location"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/search":{"get":{"tags":["lookup"],"summary":"Resolves a search string to the page to open. Addresses cannot be\nsearched: NULL addresses never appear on the chain.","operationId":"search","parameters":[{"name":"q","in":"query","description":"A height, block hash, txid, nullifier or note commitment.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/stats":{"get":{"tags":["network"],"summary":"Supply, totals, difficulty and network rate.","operationId":"stats","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stats"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/status":{"get":{"tags":["network"],"summary":"Indexer progress and the node's state at the last pass.","operationId":"status","responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}},"503":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/transactions":{"get":{"tags":["transactions"],"summary":"Newest mined transactions first.","operationId":"list","parameters":[{"name":"cursor","in":"query","description":"The previous page's `next`.","required":false,"schema":{"type":["string","null"]}},{"name":"limit","in":"query","description":"Page size, 1 to the configured maximum (default 20).","required":false,"schema":{"type":["integer","null"],"format":"int32","minimum":0}},{"name":"coinbase","in":"query","description":"Include coinbases (default false: payments only).","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_TxSummary"}}}},"400":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}},"/v1/transactions/{txid}":{"get":{"tags":["transactions"],"summary":"One transaction, mined or pooled, with its actions.","operationId":"get","parameters":[{"name":"txid","in":"path","description":"Transaction id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TxDetail"}}}},"404":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorBody"}}}}}}}},"components":{"schemas":{"Action":{"type":"object","description":"One action.","required":["position","nullifier","rk","cmx","cv_net"],"properties":{"cmx":{"type":"string","description":"Note commitment created."},"cv_net":{"type":"string","description":"Net value commitment."},"nullifier":{"type":"string","description":"Nullifier revealed."},"position":{"type":"integer","format":"int32","description":"Position in the transaction.","minimum":0},"rk":{"type":"string","description":"Randomized spend validating key."}}},"BlockDetail":{"allOf":[{"$ref":"#/components/schemas/BlockSummary","description":"Summary fields."},{"type":"object","required":["prev_hash","confirmations","version","target","commitment_root","tx_root","nonce","reward","transactions"],"properties":{"commitment_root":{"type":"string","description":"Note commitment tree root after this block."},"confirmations":{"type":"integer","format":"int64","description":"Confirmations at the indexed tip.","minimum":0},"difficulty":{"type":["number","null"],"format":"double","description":"Difficulty relative to the easiest target."},"next_hash":{"type":["string","null"],"description":"Next block's id, if indexed."},"nonce":{"type":"string","description":"Proof-of-work nonce."},"prev_hash":{"type":"string","description":"Parent id."},"reward":{"type":"string","description":"Coinbase plus fees: what the miner received."},"target":{"type":"string","description":"Target, compact hex."},"transactions":{"type":"array","items":{"$ref":"#/components/schemas/TxSummary"},"description":"Transactions, coinbase first."},"tx_root":{"type":"string","description":"Root over the block's txids."},"version":{"type":"integer","format":"int32","description":"Header version.","minimum":0}}}],"description":"A block with its header and transactions."},"BlockSummary":{"type":"object","description":"A block in a list.","required":["height","hash","time","size","tx_count","action_count","fees","subsidy"],"properties":{"action_count":{"type":"integer","format":"int32","description":"Actions across all transactions.","minimum":0},"fees":{"type":"string","description":"Fees paid by the block's transactions."},"hash":{"type":"string","description":"Block id."},"height":{"$ref":"#/components/schemas/u32","description":"Height."},"size":{"type":"integer","format":"int32","description":"Bytes.","minimum":0},"subsidy":{"type":"string","description":"Subsidy the coinbase created."},"time":{"type":"integer","format":"int64","description":"Unix seconds.","minimum":0},"tx_count":{"type":"integer","format":"int32","description":"Transactions, coinbase included.","minimum":0}}},"DisclosureRequest":{"type":"object","description":"A payment disclosure to verify.","required":["disclosure"],"properties":{"disclosure":{"type":"string","description":"Hex from the sender wallet's `getpaymentdisclosure`."}}},"DisclosureResult":{"type":"object","description":"The verdict on a disclosure. The fields past `reason` are present only\nwhen `valid`.","required":["valid"],"properties":{"address":{"type":["string","null"],"description":"Recipient address."},"amount":{"type":["string","null"],"description":"Amount paid."},"confirmations":{"type":["integer","null"],"format":"int64","description":"Confirmations.","minimum":0},"height":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/u32","description":"Height, once mined."}]},"index":{"type":["integer","null"],"format":"int32","description":"Action index of the output.","minimum":0},"memo":{"type":["string","null"],"description":"Memo text."},"reason":{"type":["string","null"],"description":"Why it proves nothing, when not valid."},"txid":{"type":["string","null"],"description":"Transaction."},"valid":{"type":"boolean","description":"Whether the disclosure opens the output it names."}}},"ErrorBody":{"type":"object","description":"The body of every error response.","required":["error","message"],"properties":{"error":{"type":"string","description":"Stable machine-readable code: `bad_request`, `not_found`,\n`rate_limited`, `not_ready`, `node_unavailable`, `internal`."},"message":{"type":"string","description":"Human-readable detail."}}},"Location":{"type":"object","description":"Where an action sits on the chain.","required":["txid","height","tx_position","action_position"],"properties":{"action_position":{"type":"integer","format":"int32","description":"Action position in the transaction.","minimum":0},"height":{"$ref":"#/components/schemas/u32","description":"Block height."},"tx_position":{"type":"integer","format":"int32","description":"Transaction position in the block.","minimum":0},"txid":{"type":"string","description":"Transaction id."}}},"Mempool":{"type":"object","description":"The mempool.","required":["size","items"],"properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/PooledTx"},"description":"The most recently seen, up to the requested limit."},"size":{"type":"integer","format":"int64","description":"Pooled transactions in total.","minimum":0}}},"Page_BlockSummary":{"type":"object","description":"A page of results with the cursor for the next one.","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","description":"A block in a list.","required":["height","hash","time","size","tx_count","action_count","fees","subsidy"],"properties":{"action_count":{"type":"integer","format":"int32","description":"Actions across all transactions.","minimum":0},"fees":{"type":"string","description":"Fees paid by the block's transactions."},"hash":{"type":"string","description":"Block id."},"height":{"$ref":"#/components/schemas/u32","description":"Height."},"size":{"type":"integer","format":"int32","description":"Bytes.","minimum":0},"subsidy":{"type":"string","description":"Subsidy the coinbase created."},"time":{"type":"integer","format":"int64","description":"Unix seconds.","minimum":0},"tx_count":{"type":"integer","format":"int32","description":"Transactions, coinbase included.","minimum":0}}},"description":"Items, newest first."},"next":{"type":["string","null"],"description":"Pass as `before` (blocks) or `cursor` (transactions) for the next\npage; absent on the last page."}}},"Page_TxSummary":{"type":"object","description":"A page of results with the cursor for the next one.","required":["items"],"properties":{"items":{"type":"array","items":{"type":"object","description":"A transaction in a list.","required":["txid","height","position","time","coinbase","action_count","fee","size"],"properties":{"action_count":{"type":"integer","format":"int32","description":"2, 4, 8 or 16.","minimum":0},"coinbase":{"type":"boolean","description":"Whether this is the block's coinbase."},"fee":{"type":"string","description":"Fee; \"0\" for a coinbase."},"height":{"$ref":"#/components/schemas/u32","description":"Block height."},"position":{"type":"integer","format":"int32","description":"Position in the block; 0 is the coinbase.","minimum":0},"size":{"type":"integer","format":"int32","description":"Bytes.","minimum":0},"time":{"type":"integer","format":"int64","description":"Block time, Unix seconds.","minimum":0},"txid":{"type":"string","description":"Transaction id."}}},"description":"Items, newest first."},"next":{"type":["string","null"],"description":"Pass as `before` (blocks) or `cursor` (transactions) for the next\npage; absent on the last page."}}},"PooledTx":{"type":"object","description":"A pooled transaction.","required":["txid","action_count","fee","size","first_seen"],"properties":{"action_count":{"type":"integer","format":"int32","description":"2, 4, 8 or 16.","minimum":0},"fee":{"type":"string","description":"Fee."},"first_seen":{"type":"integer","format":"int64","description":"First seen by the explorer, Unix seconds.","minimum":0},"size":{"type":"integer","format":"int32","description":"Bytes.","minimum":0},"txid":{"type":"string","description":"Transaction id."}}},"SearchKind":{"type":"string","description":"What a search matched.","enum":["block","transaction","nullifier","commitment"]},"SearchResult":{"type":"object","description":"A search result: where the frontend should navigate.","required":["kind","id"],"properties":{"height":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/u32","description":"Block height, for blocks and mined matches."}]},"id":{"type":"string","description":"The id to open: block hash, txid, nullifier or commitment."},"kind":{"$ref":"#/components/schemas/SearchKind","description":"What matched."}}},"Stats":{"type":"object","description":"Network-wide figures.","required":["network","height","supply","transactions","actions","fees","mempool_size"],"properties":{"actions":{"type":"integer","format":"int64","description":"Actions ever mined.","minimum":0},"block_interval_secs":{"type":["integer","null"],"format":"int32","description":"Target seconds per block.","minimum":0},"difficulty":{"type":["number","null"],"format":"double","description":"Difficulty of the next block relative to the easiest target."},"fees":{"type":"string","description":"Fees ever paid."},"height":{"$ref":"#/components/schemas/u32","description":"Indexed tip."},"mean_block_time_secs":{"type":["number","null"],"format":"double","description":"Mean seconds per block over the last 60 blocks."},"mempool_size":{"type":"integer","format":"int64","description":"Pooled transactions.","minimum":0},"network":{"type":"string","description":"`main` or `test`."},"supply":{"$ref":"#/components/schemas/Supply","description":"Supply."},"transactions":{"type":"integer","format":"int64","description":"Transactions ever mined, coinbases included.","minimum":0},"work_per_second":{"type":["string","null"],"description":"Estimated network Equihash solutions per second."}}},"Status":{"type":"object","description":"Indexer and node health.","required":["network","indexed_height","indexed_hash"],"properties":{"indexed_hash":{"type":"string","description":"Its hash."},"indexed_height":{"$ref":"#/components/schemas/u32","description":"Highest indexed block."},"last_pass_at":{"type":["integer","null"],"format":"int64","description":"Unix seconds of the last completed indexer pass.","minimum":0},"network":{"type":"string","description":"`main` or `test`."},"node_connections":{"type":["integer","null"],"format":"int32","description":"Ready peer connections of the node.","minimum":0},"node_height":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/u32","description":"The node's tip at the last indexer pass."}]},"node_syncing":{"type":["boolean","null"],"description":"The node was still syncing with its peers."}}},"Supply":{"type":"object","description":"Supply, from the emission schedule (exact; see the README).","required":["emitted","premine","max","next_subsidy"],"properties":{"emitted":{"type":"string","description":"Units in existence at the indexed tip: premine plus subsidies."},"max":{"type":"string","description":"The cap."},"next_subsidy":{"type":"string","description":"Subsidy of the next block."},"premine":{"type":"string","description":"The development fund paid by genesis."}}},"TxDetail":{"type":"object","description":"A transaction with its actions.","required":["status","txid","time","confirmations","coinbase","version","anchor","action_count","fee","size","proof_size","actions"],"properties":{"action_count":{"type":"integer","format":"int32","description":"2, 4, 8 or 16.","minimum":0},"actions":{"type":"array","items":{"$ref":"#/components/schemas/Action"},"description":"Actions, in order."},"anchor":{"type":"string","description":"Commitment-tree root the proof is against."},"anchor_height":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/u32","description":"Height of the block that produced the anchor, if indexed."}]},"coinbase":{"type":"boolean","description":"Whether this is a coinbase."},"confirmations":{"type":"integer","format":"int64","description":"Confirmations at the indexed tip; 0 while pooled.","minimum":0},"fee":{"type":"string","description":"Fee; \"0\" for a coinbase."},"height":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/u32","description":"Block height, when confirmed."}]},"position":{"type":["integer","null"],"format":"int32","description":"Position in the block, when confirmed.","minimum":0},"proof_size":{"type":"integer","format":"int32","description":"Proof bytes.","minimum":0},"size":{"type":"integer","format":"int32","description":"Bytes.","minimum":0},"status":{"$ref":"#/components/schemas/TxState","description":"Confirmed or pooled."},"time":{"type":"integer","format":"int64","description":"Block time (confirmed) or first seen in the mempool, Unix seconds.","minimum":0},"txid":{"type":"string","description":"Transaction id."},"version":{"type":"integer","format":"int32","description":"Format version.","minimum":0}}},"TxState":{"type":"string","description":"`confirmed` or `pooled`.","enum":["confirmed","pooled"]},"TxSummary":{"type":"object","description":"A transaction in a list.","required":["txid","height","position","time","coinbase","action_count","fee","size"],"properties":{"action_count":{"type":"integer","format":"int32","description":"2, 4, 8 or 16.","minimum":0},"coinbase":{"type":"boolean","description":"Whether this is the block's coinbase."},"fee":{"type":"string","description":"Fee; \"0\" for a coinbase."},"height":{"$ref":"#/components/schemas/u32","description":"Block height."},"position":{"type":"integer","format":"int32","description":"Position in the block; 0 is the coinbase.","minimum":0},"size":{"type":"integer","format":"int32","description":"Bytes.","minimum":0},"time":{"type":"integer","format":"int64","description":"Block time, Unix seconds.","minimum":0},"txid":{"type":"string","description":"Transaction id."}}},"u32":{"type":"integer","format":"int32","minimum":0}}},"tags":[{"name":"network","description":"Indexer status, supply and network figures"},{"name":"blocks","description":"Blocks"},{"name":"transactions","description":"Mined and pooled transactions"},{"name":"lookup","description":"Search, nullifiers and note commitments"},{"name":"disclosures","description":"Payment disclosure verification"}]}