{"openapi":"3.1.1","info":{"title":"Burnwood open JSON API","version":"1","description":"Static JSON files describing the NU7 network upgrade of Zcash: the countdown to activation, then the ZEC removed from circulation into the NSM reserve (held there and reissued as block rewards from about 2031), block times and pool figures, for mainnet and testnet.\n\n- **Base URL:** `https://data.burnwood.xyz/v1/` (see `servers`). Per-network files live under `/{network}/`; a network that hasn't published yet returns 404.\n- **Polling:** read-only GET and HEAD, no authentication. Please poll no faster than each file's `Cache-Control` max-age, also given in `index.json` → `pollingAdvice`; fetch the other files only when their revision in `latest.json` → `revs` changes.\n- **Amounts** are integer zatoshi in fields ending in `Zat` (1 ZEC = 100,000,000 zatoshi), always JSON safe integers (below 2^53), never floats. Use integer or decimal arithmetic for exact ZEC.\n- **Times** are Unix seconds, UTC. `null` means not applicable or unknown right now; a value is never silently 0 when unknown.\n- **Versioning:** every file has `schemaVersion: 1`. Ignore unknown fields: fields may be added within v1 and open enums may grow. Breaking changes are published under `/v2/`, alongside `/v1/` for at least 30 days.\n- **Invariants:** cross-field rules that JSON Schema can't express are listed, with stable ids, in the description of each file's schema.\n- **Licence:** CC0-1.0. Every field is CC0; no third-party values are republished.\n\nBurnwood is an independent community tool. It is not affiliated with the Zcash Foundation, ZODL, Shielded Labs or ECC.","license":{"name":"CC0-1.0","identifier":"CC0-1.0"}},"externalDocs":{"description":"Burnwood API documentation","url":"https://burnwood.xyz/api"},"servers":[{"url":"https://data.burnwood.xyz/v1","description":"production"},{"url":"https://staging-data.burnwood.xyz/v1","description":"staging: replayed recorded data for load tests and demos; not live chain data"}],"paths":{"/index.json":{"get":{"operationId":"getIndex","summary":"Networks, files, documentation links and polling advice","description":"What's available and polling advice.","responses":{"200":{"description":"The current `index.json`.","headers":{"Cache-Control":{"description":"Set on the stored object; the CDN and browsers follow it.","schema":{"type":"string","const":"public, max-age=300"}},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/AccessControlAllowOrigin"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndexFile"}}}},"404":{"description":"Not published yet (before the network's first publish) or unknown file; cached at the edge for at most 5 s."}}}},"/{network}/latest.json":{"parameters":[{"$ref":"#/components/parameters/Network"}],"get":{"operationId":"getLatest","summary":"Current state of one network","description":"The current state of one network. Updates every block and at least every 30 seconds (`generatedAt`).","responses":{"200":{"description":"The current `latest.json`.","headers":{"Cache-Control":{"description":"Set on the stored object; the CDN and browsers follow it.","schema":{"type":"string","const":"public, max-age=5"}},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/AccessControlAllowOrigin"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestFile"}}}},"404":{"description":"Not published yet (before the network's first publish) or unknown file; cached at the edge for at most 5 s."}}}},"/{network}/blocks.json":{"parameters":[{"$ref":"#/components/parameters/Network"}],"get":{"operationId":"getBlocks","summary":"The last 200 blocks, newest first","description":"The last 200 blocks, newest first, in the same row format as `latest.json` → `recentBlocks`.","responses":{"200":{"description":"The current `blocks.json`.","headers":{"Cache-Control":{"description":"Set on the stored object; the CDN and browsers follow it.","schema":{"type":"string","const":"public, max-age=5"}},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/AccessControlAllowOrigin"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlocksFile"}}}},"404":{"description":"Not published yet (before the network's first publish) or unknown file; cached at the edge for at most 5 s."}}}},"/{network}/history.json":{"parameters":[{"$ref":"#/components/parameters/Network"}],"get":{"operationId":"getHistory","summary":"One row per UTC day, oldest first","description":"One row per UTC day, oldest first, using blocks with at least 10 confirmations. Days follow the chain clock: a block counts on the UTC day of the latest block timestamp up to it, so each day is an unbroken run of blocks. Today's row is marked `partial`.","responses":{"200":{"description":"The current `history.json`.","headers":{"Cache-Control":{"description":"Set on the stored object; the CDN and browsers follow it.","schema":{"type":"string","const":"public, max-age=300"}},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/AccessControlAllowOrigin"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HistoryFile"}}}},"404":{"description":"Not published yet (before the network's first publish) or unknown file; cached at the edge for at most 5 s."}}}},"/{network}/milestones.json":{"parameters":[{"$ref":"#/components/parameters/Network"}],"get":{"operationId":"getMilestones","summary":"Milestones reached so far","description":"Milestones reached so far. `provisional` until the block has 10 confirmations, then `final`.","responses":{"200":{"description":"The current `milestones.json`.","headers":{"Cache-Control":{"description":"Set on the stored object; the CDN and browsers follow it.","schema":{"type":"string","const":"public, max-age=30"}},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/AccessControlAllowOrigin"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MilestonesFile"}}}},"404":{"description":"Not published yet (before the network's first publish) or unknown file; cached at the edge for at most 5 s."}}}},"/{network}/cards.json":{"parameters":[{"$ref":"#/components/parameters/Network"}],"get":{"operationId":"getCards","summary":"Share-card images with alt text","description":"The current share card and every event card, with image URLs and alt text.","responses":{"200":{"description":"The current `cards.json`.","headers":{"Cache-Control":{"description":"Set on the stored object; the CDN and browsers follow it.","schema":{"type":"string","const":"public, max-age=60"}},"Access-Control-Allow-Origin":{"$ref":"#/components/headers/AccessControlAllowOrigin"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardsFile"}}}},"404":{"description":"Not published yet (before the network's first publish) or unknown file; cached at the edge for at most 5 s."}}}}},"components":{"parameters":{"Network":{"name":"network","in":"path","required":true,"description":"Published network. The files' own `network` field also allows regtest, which is never served.","schema":{"enum":["mainnet","testnet"],"type":"string"}}},"headers":{"AccessControlAllowOrigin":{"description":"Every file can be fetched from any web page (CORS). GET and HEAD only.","schema":{"type":"string","const":"*"}}},"schemas":{"IndexFile":{"title":"index.json","description":"What's available and polling advice.\n\nInvariants: none beyond the field constraints.","type":"object","properties":{"schemaVersion":{"const":1,"description":"Contract version."},"license":{"const":"CC0-1.0","description":"Data licence. Every field is CC0; no third-party values are republished."},"docs":{"type":"string","format":"uri","pattern":"^https?:\\/\\/","description":"This documentation."},"openapi":{"type":"string","format":"uri","pattern":"^https?:\\/\\/","description":"Machine-readable OpenAPI 3.1 description of these files (openapi.json)."},"networks":{"type":"array","items":{"enum":["mainnet","testnet"],"type":"string"},"minItems":1,"description":"Published networks. Never regtest."},"files":{"type":"array","items":{"enum":["latest.json","blocks.json","history.json","milestones.json","cards.json"],"type":"string"},"minItems":1,"description":"Files published per network."},"pollingAdvice":{"type":"object","properties":{"latest":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Poll latest.json no faster than this."},"blocks":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Same for blocks.json."},"history":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Same for history.json."},"milestones":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Same for milestones.json."}},"required":["latest","blocks","history","milestones"],"description":"Seconds between polls, per file (the files' Cache-Control max-age)."}},"required":["schemaVersion","license","docs","openapi","networks","files","pollingAdvice"]},"LatestFile":{"title":"latest.json","description":"The current state of one network. Updates every block and at least every 30 seconds (`generatedAt`).\n\nInvariants (checked by the producer before publishing; not expressible in JSON Schema):\n\n- `state-a`: state = A exactly when nu7.scheduled = false or nu7.status = disabled\n- `state-b`: state = B requires scheduled, not activated and blocksRemaining > 100\n- `state-c-approach`: state = C, phase = approach requires not activated and blocksRemaining ≤ 100\n- `state-c-live`: state = C, phase = live requires activated and blocksSinceActivation < 100\n- `state-d`: state = D requires activated and blocksSinceActivation ≥ 100\n- `phase`: phase is set in state C and null in every other state\n- `state-since`: stateSince ≤ generatedAt and tip.seenAt ≤ generatedAt\n- `nu7-scheduled`: nu7.scheduled, nu7.activationHeight ≠ null and nu7.status ≠ null go together\n- `nu7-activated`: nu7.activated requires status = active, chaintipBranchId = 77190ad9 and tip ≥ A\n- `nu7-activation-block`: nu7.activation is set exactly when activated, and its height is the activation height\n- `nu7-blocks-remaining`: blocksRemaining = max(0, A − tip) in states B and C-approach, null otherwise\n- `nu7-blocks-since`: blocksSinceActivation = tip − A once activated, null before\n- `nu7-eta-pre-activation`: nu7.eta is null outside states B and C-approach (pre-activation only)\n- `nu7-eta-band`: eta.low ≤ eta.time ≤ eta.high, p10IntervalSec ≤ avgIntervalSec ≤ p90IntervalSec and 48 ≤ windowBlocks ≤ 576\n- `nu7-reissuance`: reissuanceHeight and reissuanceHeightStatus are both null or both set; an estimate needs a known A\n- `pools-as-of`: pools.asOfHeight ≤ tip.height\n- `burn-active`: burn.active = nu7.activated\n- `burn-inactive`: burn.active = false requires status = not-active, method = null, sinceNu7Zat = 0, throughHeight = null and zero rolling values\n- `burn-status-active`: burn.active = true requires a status other than not-active\n- `burn-through-height`: burn.throughHeight is between A − 1 and tip.height\n- `burn-windows`: last24h ≤ last7d ≤ last30d ≤ sinceNu7 and avgPerBlock24h ≤ last24h\n- `burn-method-reserve`: burn.method = nsm-reserve requires checks.reserve = agree\n- `burn-disputed-checks`: burn.status = disputed requires checks.reserve = mismatch or checks.perBlock = mismatch\n- `seed-locked`: seed.status = locked requires seed.source, seed.zat and seed.lockedAtHeight\n- `seed-provisional`: seed.status = provisional requires seed.source and seed.zat, and no lockedAtHeight\n- `seed-unknown`: seed.status = unknown requires seed.source, seed.zat and seed.lockedAtHeight to be null\n- `zecstats-testnet`: network = testnet or regtest requires crossChecks.zecstats = null\n- `network-regtest`: network = regtest requires nu7.reissuanceHeight = null\n- `source-regtest`: source id regtest (in tip.source, sources.ingest or sources.items[].id) appears exactly when network = regtest\n- `zecstats-values`: a zecstats status of agree or differs requires zecstatsHeight, ourShieldedPct and ourIronwoodMigrationPct\n- `stats-target-spacing`: stats.targetSpacingSec is 75 before NU7 activation and 25 after\n- `recent-blocks-tip`: recentBlocks[0] is the tip (same height and hash)\n- `recent-blocks-contiguous`: recentBlocks are newest first with heights strictly decreasing by 1\n- `sources-ingest`: tip.source = sources.ingest, which is listed in sources.items; item ids are unique\n- `sources-overall`: sources.overall = down exactly when every item is down or stalled; otherwise ok exactly when the ingest item is healthy, else degraded","type":"object","properties":{"schemaVersion":{"const":1,"description":"Contract version."},"network":{"enum":["mainnet","testnet","regtest"],"type":"string","description":"Network of this file. regtest appears only in local test output, never on the public data host."},"generatedAt":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When this file was built. Rebuilt at least every 30 s, so an old value means our pipeline is delayed."},"state":{"enum":["A","B","C","D"],"type":"string","description":"A: NU7 not scheduled. B: countdown, more than 100 blocks to go. C: 100 blocks either side of activation. D: 100+ blocks since activation."},"phase":{"anyOf":[{"enum":["approach","live"],"type":"string"},{"type":"null"}],"description":"Only in state C: approach before activation, live after it."},"stateSince":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When the current state began."},"tip":{"$ref":"#/components/schemas/Tip","description":"The best block, from the source currently driving ingest."},"nu7":{"$ref":"#/components/schemas/Nu7","description":"NU7 schedule, activation and countdown, read from the network's nodes."},"pools":{"$ref":"#/components/schemas/Pools","description":"Value pools at asOfHeight."},"shielded":{"$ref":"#/components/schemas/Shielded","description":"Shielded shares computed from pools."},"burn":{"$ref":"#/components/schemas/Burn","description":"ZEC removed from circulation into the NSM reserve since NU7 (held there and reissued as block rewards from about 2031). The seed is never counted."},"crossChecks":{"$ref":"#/components/schemas/CrossChecks","description":"Display cross-checks against third-party figures. They never change our numbers."},"attribution":{"type":"array","items":{"type":"string","minLength":1},"description":"Data credits to show with the numbers."},"stats":{"$ref":"#/components/schemas/Stats","description":"Block and fee statistics over windows ending at the tip."},"recentBlocks":{"type":"array","items":{"$ref":"#/components/schemas/BlockRow"},"minItems":1,"maxItems":10,"description":"The last 10 blocks, newest first (fewer only right after the first start)."},"sources":{"$ref":"#/components/schemas/Sources","description":"Health of the chain data sources."},"revs":{"$ref":"#/components/schemas/Revs","description":"Revision of each other file. Refetch a file only when its revision changes."},"notices":{"type":"array","items":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$"},"description":"Notice codes (open list). The list may grow; show unknown codes generically or ignore them."}},"required":["schemaVersion","network","generatedAt","state","phase","stateSince","tip","nu7","pools","shielded","burn","crossChecks","attribution","stats","recentBlocks","sources","revs","notices"]},"BlocksFile":{"title":"blocks.json","description":"The last 200 blocks, newest first, in the same row format as `latest.json` → `recentBlocks`.\n\nInvariants (checked by the producer before publishing; not expressible in JSON Schema):\n\n- `blocks-tip`: blocks[0].h = tipHeight\n- `blocks-contiguous`: blocks are newest first with heights strictly decreasing by 1","type":"object","properties":{"schemaVersion":{"const":1,"description":"Contract version."},"network":{"enum":["mainnet","testnet","regtest"],"type":"string","description":"Network of this file. regtest appears only in local test output, never on the public data host."},"generatedAt":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When this file was built."},"rev":{"type":"string","pattern":"^[0-9a-f]{16}$","description":"Content revision of this file (a hash of everything except generatedAt and rev). If it differs from latest.json revs for this file, you have an older cached copy: fetch it again after your next latest.json poll."},"tipHeight":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Height of the newest row."},"blocks":{"type":"array","items":{"$ref":"#/components/schemas/BlockRow"},"minItems":1,"maxItems":200,"description":"Up to 200 blocks, newest first."}},"required":["schemaVersion","network","generatedAt","rev","tipHeight","blocks"]},"HistoryFile":{"title":"history.json","description":"One row per UTC day, oldest first, using blocks with at least 10 confirmations. Days follow the chain clock: a block counts on the UTC day of the latest block timestamp up to it, so each day is an unbroken run of blocks. Today's row is marked `partial`.\n\nInvariants (checked by the producer before publishing; not expressible in JSON Schema):\n\n- `history-order`: days are oldest first with strictly increasing dates, none before firstDate\n- `history-contiguous`: each day has blocks = lastHeight − firstHeight + 1, and each day after the first has firstHeight = previous lastHeight + 1\n- `history-partial`: only the last day may be partial\n- `history-pre-nu7`: removedZat is 0 for days before nu7Date (all days when nu7Date is null)","type":"object","properties":{"schemaVersion":{"const":1,"description":"Contract version."},"network":{"enum":["mainnet","testnet","regtest"],"type":"string","description":"Network of this file. regtest appears only in local test output, never on the public data host."},"generatedAt":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When this file was built."},"rev":{"type":"string","pattern":"^[0-9a-f]{16}$","description":"Content revision of this file (a hash of everything except generatedAt and rev). If it differs from latest.json revs for this file, you have an older cached copy: fetch it again after your next latest.json poll."},"firstDate":{"type":"string","format":"date","description":"First day of the block history. Pool figures may start later: days before the first pool snapshot have a null shieldedPct (notice history-starts-late)."},"nu7Date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"UTC date of the row that contains the activation block: the date of the latest block timestamp up to A (the chain's clock). Null before activation."},"days":{"type":"array","items":{"$ref":"#/components/schemas/HistoryDay"},"description":"One row per UTC day, oldest first."}},"required":["schemaVersion","network","generatedAt","rev","firstDate","nu7Date","days"]},"MilestonesFile":{"title":"milestones.json","description":"Milestones reached so far. `provisional` until the block has 10 confirmations, then `final`.\n\nInvariants (checked by the producer before publishing; not expressible in JSON Schema):\n\n- `milestones-unique`: each milestone id appears at most once\n- `milestones-kind`: each milestone's kind matches its id\n- `milestones-value`: value has the shape of its id: t-minus-N { eta }, first-sub-25s-block { intervalSec, avgBlockTime1hSec | null }, first-removal { removedZat }, first-6-hours { blocks, avgIntervalSec, removedZat | null, shieldedPct | null }; null for every other id\n- `milestones-eta-band`: a countdown value's eta has low ≤ time ≤ high\n- `milestones-first-6-hours`: the first-6-hours value has blocks = height − activationHeight and avgIntervalSec > 0\n- `milestones-activation-height`: the activation milestone is at activationHeight; countdown milestones are at or after A − N and before A\n- `milestones-post-activation`: post-activation milestones need an activation height and are at or after it","type":"object","properties":{"schemaVersion":{"const":1,"description":"Contract version."},"network":{"enum":["mainnet","testnet","regtest"],"type":"string","description":"Network of this file. regtest appears only in local test output, never on the public data host."},"generatedAt":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When this file was built."},"rev":{"type":"string","pattern":"^[0-9a-f]{16}$","description":"Content revision of this file (a hash of everything except generatedAt and rev). If it differs from latest.json revs for this file, you have an older cached copy: fetch it again after your next latest.json poll."},"activationHeight":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Activation height A the countdown milestones refer to."},"items":{"type":"array","items":{"$ref":"#/components/schemas/Milestone"},"description":"Milestones reached so far."}},"required":["schemaVersion","network","generatedAt","rev","activationHeight","items"]},"CardsFile":{"title":"cards.json","description":"The current share card and every event card, with image URLs and alt text.\n\nInvariants (checked by the producer before publishing; not expressible in JSON Schema):\n\n- `cards-current-size`: current.landscape is 1200×630 and current.portrait is 1080×1350\n- `cards-unique-keys`: item keys are unique\n- `cards-url-key`: each item's url ends with /<key>.png","type":"object","properties":{"schemaVersion":{"const":1,"description":"Contract version."},"network":{"enum":["mainnet","testnet","regtest"],"type":"string","description":"Network of this file. regtest appears only in local test output, never on the public data host."},"generatedAt":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When this file was built."},"rev":{"type":"string","pattern":"^[0-9a-f]{16}$","description":"Content revision of this file (a hash of everything except generatedAt and rev). If it differs from latest.json revs for this file, you have an older cached copy: fetch it again after your next latest.json poll."},"current":{"type":"object","properties":{"landscape":{"type":"object","properties":{"url":{"type":"string","format":"uri","pattern":"^https?:\\/\\/","description":"Current card, 1200×630."},"width":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Width in pixels."},"height":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Height in pixels."},"alt":{"type":"string","pattern":"\\S","description":"Alt text, also the share text."},"renderedAt":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When the image was rendered."}},"required":["url","width","height","alt","renderedAt"],"description":"Current card, 1200×630."},"portrait":{"type":"object","properties":{"url":{"type":"string","format":"uri","pattern":"^https?:\\/\\/","description":"Current card, 1080×1350."},"width":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Width in pixels."},"height":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Height in pixels."},"alt":{"type":"string","pattern":"\\S","description":"Alt text, also the share text."},"renderedAt":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When the image was rendered."}},"required":["url","width","height","alt","renderedAt"],"description":"Current card, 1080×1350."}},"required":["landscape","portrait"],"description":"The current share card in both sizes."},"items":{"type":"array","items":{"$ref":"#/components/schemas/CardItem"},"description":"Every event card rendered so far."}},"required":["schemaVersion","network","generatedAt","rev","current","items"]},"BlockRow":{"type":"object","properties":{"h":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Block height."},"hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Block hash, lowercase hex."},"t":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Miner timestamp (noisy)."},"seenAt":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When Burnwood first saw the block."},"dt":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Raw interval time(h) − time(h − 1). Can be zero or negative; clamp to at least 1 s before displaying it."},"tx":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Transactions in the block, incl. coinbase."},"actions":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Shielded actions: Sapling spends + Sapling outputs + Orchard actions + Ironwood actions + Sprout JoinSplits, over all transactions incl. the coinbase. Null when no complete count was possible: no source returned transaction detail for the block, or the Sprout JoinSplit count couldn't be determined in backup-only mode."},"feesZat":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Total fees of the block. Null when fees are unavailable for it. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"removedZat":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"ZEC moved to the NSM reserve by this block (0 before NU7). Null while it can't be determined. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"method":{"anyOf":[{"enum":["nsm-reserve","pool-delta","fee-share","none"],"type":"string"},{"type":"null"}],"description":"Method that produced removedZat; none before NU7."},"check":{"enum":["confirmed","pending","single-source","disputed"],"type":"string","description":"Cross-check status of this block."}},"required":["h","hash","t","seenAt","dt","tx","actions","feesZat","removedZat","method","check"]},"Tip":{"type":"object","properties":{"height":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Height of the best block. Never lower than in the previous latest.json, except after a chain reorganisation below that height."},"hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Hash of the best block."},"time":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Miner timestamp of the best block."},"seenAt":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When Burnwood first saw the best block."},"source":{"enum":["quicknode","cipherscan","tatum","regtest"],"type":"string","description":"Data source that supplied the tip (the ingest driver). regtest only when network is regtest."}},"required":["height","hash","time","seenAt","source"]},"Nu7":{"type":"object","properties":{"branchId":{"const":"77190ad9","description":"NU7 consensus branch id."},"scheduled":{"type":"boolean","description":"NU7 is listed in the node's upgrades."},"activationHeight":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Activation height A as reported by the network's nodes. Never hard-coded."},"status":{"anyOf":[{"enum":["pending","active","disabled"],"type":"string"},{"type":"null"}],"description":"Raw NU7 status from the node."},"activated":{"type":"boolean","description":"True only when the status is active, the chain tip follows branch 77190ad9 and the tip is at or past A. Once true, it stays true until a chain reorganisation replaces block A; no later node response turns it back to false."},"activation":{"anyOf":[{"$ref":"#/components/schemas/ActivationBlock"},{"type":"null"}],"description":"The activation block A, once seen."},"blocksRemaining":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"A − tip while NU7 is pending (never below 0). Null otherwise."},"blocksSinceActivation":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Tip − A once NU7 is active. Null before."},"eta":{"anyOf":[{"$ref":"#/components/schemas/Eta"},{"type":"null"}],"description":"Estimated activation time, before activation only. Null with fewer than 48 blocks of data."},"progress":{"anyOf":[{"$ref":"#/components/schemas/Progress"},{"type":"null"}],"description":"Progress from the previous upgrade's activation height to A."},"chaintipBranchId":{"type":"string","pattern":"^[0-9a-f]{8}$","description":"Consensus branch id of the chain tip."},"nextblockBranchId":{"type":"string","pattern":"^[0-9a-f]{8}$","description":"Consensus branch id of the next block."},"reissuanceHeight":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Height from which the NSM reserve is reissued as block rewards. Until it's assigned, an estimate: the ZIP 237 crossover as the NU7 node computes it, mainnet 16,026,474 − 2 × A, testnet 16,235,274 − 2 × A. The estimate applies only for A from the second halving up to the third halving at 75 s spacing (mainnet 2,726,400 to 4,406,399, testnet 2,796,000 to 4,475,999); outside that range it's null. Null while A is unknown, in state A (NU7 not scheduled or disabled), and on regtest. An assigned height is published whatever A is."},"reissuanceHeightStatus":{"anyOf":[{"enum":["estimate","assigned"],"type":"string"},{"type":"null"}],"description":"Whether reissuanceHeight is the provisional estimate or the assigned constant."}},"required":["branchId","scheduled","activationHeight","status","activated","activation","blocksRemaining","blocksSinceActivation","eta","progress","chaintipBranchId","nextblockBranchId","reissuanceHeight","reissuanceHeightStatus"]},"ActivationBlock":{"type":"object","properties":{"height":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Height of block A."},"hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Hash of block A."},"time":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Miner timestamp of A."},"txCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Transactions in block A."},"shieldedActions":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Shielded actions in block A, counted like recentBlocks[].actions. Null until the count is known; it fills in when a re-check completes."},"feesZat":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Total fees of block A, like recentBlocks[].feesZat. Null until the fee is known; it fills in when a re-check completes. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."}},"required":["height","hash","time","txCount","shieldedActions","feesZat"]},"Eta":{"type":"object","properties":{"time":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Estimate: seen time of the tip + blocks remaining × average interval."},"low":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Early end of the likely range: seen time of the tip + blocks remaining × p10IntervalSec. Never after time."},"high":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Late end of the likely range: seen time of the tip + blocks remaining × p90IntervalSec. Never before time."},"avgIntervalSec":{"type":"number","description":"Average block interval over the window. At most 1 decimal."},"p10IntervalSec":{"type":"number","description":"10th percentile of the 48-block sub-window averages, lowered to avgIntervalSec if it's above it, so the range always contains the estimate. At most 1 decimal."},"p90IntervalSec":{"type":"number","description":"90th percentile of the 48-block sub-window averages, raised to avgIntervalSec if it's below it, so the range always contains the estimate. At most 1 decimal."},"windowBlocks":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Blocks in the averaging window (48 to 576)."}},"required":["time","low","high","avgIntervalSec","p10IntervalSec","p90IntervalSec","windowBlocks"]},"Progress":{"type":"object","properties":{"fromUpgrade":{"type":"string","minLength":1,"description":"Previous upgrade, e.g. NU6.3."},"fromHeight":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Activation height of the previous upgrade."},"pct":{"type":"number","minimum":0,"maximum":100,"description":"Share of the way to A. At most 2 decimals."}},"required":["fromUpgrade","fromHeight","pct"]},"Pools":{"type":"object","properties":{"status":{"enum":["confirmed","pending","single-source","disputed"],"type":"string","description":"Cross-check status of the pool figures. With \"disputed\", notice pools-disputed means they are the last confirmed snapshot (asOfHeight below the tip); notice pools-unconfirmed means the sources have never agreed, so they are the main source's unconfirmed values."},"asOfHeight":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Height the pool figures describe."},"transparentZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Transparent pool. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"sproutZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Sprout shielded pool. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"saplingZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Sapling shielded pool. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"orchardZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Orchard shielded pool. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"ironwoodZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Ironwood shielded pool. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"lockboxZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Lockbox (protocol-held, not in circulation). Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"chainSupplyZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Chain supply as reported by the node (the sum of the value pools). Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"nsmReserveZat":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"NSM reserve balance, including the seed. Null when the node doesn't report it. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."}},"required":["status","asOfHeight","transparentZat","sproutZat","saplingZat","orchardZat","ironwoodZat","lockboxZat","chainSupplyZat","nsmReserveZat"]},"Shielded":{"type":"object","properties":{"pct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}],"description":"(Sprout + Sapling + Orchard + Ironwood) ÷ (Transparent + Sprout + Sapling + Orchard + Ironwood) × 100. Lockbox and NSM reserve excluded. At most 2 decimals."},"ironwoodMigrationPct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}],"description":"Ironwood ÷ (Ironwood + Orchard) × 100. At most 2 decimals."}},"required":["pct","ironwoodMigrationPct"]},"Burn":{"type":"object","properties":{"active":{"type":"boolean","description":"NU7 is active, so removal is counted."},"status":{"enum":["not-active","confirmed","single-source","disputed"],"type":"string","description":"Status of the headline total. See /method#sources."},"method":{"anyOf":[{"enum":["nsm-reserve","pool-delta","fee-share"],"type":"string"},{"type":"null"}],"description":"Method that produced sinceNu7Zat. See /method#active-method."},"sinceNu7Zat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"ZEC removed from circulation into the NSM reserve since NU7, through throughHeight. Excludes the seed. Never lower than in the previous latest.json, except after a chain reorganisation below the previous throughHeight, or when a newly found source disagreement sets status to disputed and moves throughHeight back to the last confirmed block. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"throughHeight":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Last height included. Can be below the tip while blocks are being confirmed or disputed."},"last24hZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Removed by the blocks in the 24 h window ending at throughHeight, measured on the chain's clock (the latest block timestamp so far), so the window is an unbroken run of blocks. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"last7dZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Same, over 7 days. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"last30dZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Same, over 30 days. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"avgPerBlock24hZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"last24hZat ÷ blocks in that window at or after the activation height A, rounded down (0 when there are none). Blocks before NU7 don't dilute the average. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"seed":{"$ref":"#/components/schemas/Seed","description":"The reserve's starting balance at NU7 (never counted as removed)."},"checks":{"$ref":"#/components/schemas/BurnChecks","description":"Latest cross-checks of the removal figures."}},"required":["active","status","method","sinceNu7Zat","throughHeight","last24hZat","last7dZat","last30dZat","avgPerBlock24hZat","seed","checks"]},"Seed":{"type":"object","properties":{"status":{"enum":["unknown","provisional","locked"],"type":"string","description":"Measurement status of the reserve seed (never counted as removed)."},"source":{"anyOf":[{"enum":["observed-a-1","implied"],"type":"string"},{"type":"null"}],"description":"observed-a-1: the reserve observed at block A − 1. implied: reserve − Σ removed, provisional only."},"zat":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Seed value."},"lockedAtHeight":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Tip height when the seed was locked."}},"required":["status","source","zat","lockedAtHeight"]},"BurnChecks":{"type":"object","properties":{"reserve":{"enum":["agree","mismatch","n/a"],"type":"string","description":"Latest check of reserve − seed against the sum of per-block removals."},"perBlock":{"enum":["agree","mismatch","n/a"],"type":"string","description":"\"mismatch\" when any stored block since NU7 is disputed (for any cause: hash, height, removal methods, fees, a negative removal) or has removal methods that disagree; otherwise the agreement of the methods at throughHeight (\"n/a\" when only one method is available there or nothing is published yet)."}},"required":["reserve","perBlock"]},"CrossChecks":{"type":"object","properties":{"zecstats":{"anyOf":[{"$ref":"#/components/schemas/ZecstatsCheck"},{"type":"null"}],"description":"ZecStats display cross-check of the shielded share (mainnet only; null on testnet and regtest). It never changes our numbers. No ZecStats value is republished: it carries only our result and our own figures."}},"required":["zecstats"]},"ZecstatsCheck":{"type":"object","properties":{"status":{"enum":["agree","differs","unavailable"],"type":"string","description":"agree when our formulas applied to ZecStats' pool values give the same percentages as ours within 0.01 points."},"observedAt":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When the cross-check last ran."},"zecstatsHeight":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Block ZecStats' pool values describe, matched by chain supply."},"ourShieldedPct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}],"description":"Our shielded share at the compared height. At most 2 decimals."},"ourIronwoodMigrationPct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}],"description":"Our Ironwood share at the compared height. At most 2 decimals."}},"required":["status","observedAt","zecstatsHeight","ourShieldedPct","ourIronwoodMigrationPct"]},"Stats":{"type":"object","properties":{"avgBlockTime1hSec":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Average block time over the 1 h window ending at the tip, measured on the chain's clock (the latest block timestamp so far). Null with fewer than 2 blocks in the window. At most 1 decimal."},"avgBlockTime24hSec":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Same, over the 24 h window ending at the tip. Null with fewer than 2 blocks in the window. At most 1 decimal."},"blocksLastHour":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Blocks in the 1 h window ending at the tip, measured on the chain's clock (the latest block timestamp so far), so the window is an unbroken run of blocks."},"blocksLast24h":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Blocks in the 24 h window ending at the tip, on the same clock."},"txLast24h":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Non-coinbase transactions in the 24 h window ending at the tip."},"feesLast24hZat":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Fees in the 24 h window ending at the tip. Null if any block in the window lacks a fee value. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"medianFeePerTx24hZat":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Lower median fee of non-coinbase transactions in the 24 h window ending at the tip. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"targetSpacingSec":{"enum":[75,25],"type":"number","description":"Target block spacing: 75 s before NU7, 25 s after."}},"required":["avgBlockTime1hSec","avgBlockTime24hSec","blocksLastHour","blocksLast24h","txLast24h","feesLast24hZat","medianFeePerTx24hZat","targetSpacingSec"]},"Sources":{"type":"object","properties":{"overall":{"enum":["ok","degraded","down"],"type":"string","description":"Health of the source we're ingesting from: ok, degraded (it's failing or recovering), down (no source can deliver blocks). Other sources' state is in items; lost cross-checks show in burn.status and pools.status."},"ingest":{"enum":["quicknode","cipherscan","tatum","regtest"],"type":"string","description":"Source currently driving ingest. regtest only when network is regtest."},"items":{"type":"array","items":{"$ref":"#/components/schemas/SourceItem"},"minItems":1,"description":"One row per configured source."}},"required":["overall","ingest","items"]},"SourceItem":{"type":"object","properties":{"id":{"enum":["quicknode","cipherscan","tatum","regtest"],"type":"string","description":"Source id. regtest only when network is regtest."},"role":{"enum":["primary","backup","standby"],"type":"string","description":"Role of the source."},"status":{"enum":["healthy","degraded","down","stalled"],"type":"string","description":"Health of the source."},"tipHeight":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"The source's tip height. Null if it hasn't answered yet."},"lagBlocks":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Blocks behind the highest tip seen across sources."},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Node software and version, e.g. Zakura 1.5.1."},"nu7Aware":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Whether the source's node supports NU7. Null if unknown."},"lastOkAt":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Last successful response."}},"required":["id","role","status","tipHeight","lagBlocks","version","nu7Aware","lastOkAt"]},"Revs":{"type":"object","properties":{"blocks":{"anyOf":[{"type":"string"},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}],"description":"Revision of blocks.json: its rev, or 0 while the file isn't available yet (don't fetch it then). Refetch the file only when this changes, and again while the file's own rev still differs."},"history":{"anyOf":[{"type":"string"},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}],"description":"Revision of history.json, or 0 while it isn't available yet."},"milestones":{"anyOf":[{"type":"string"},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}],"description":"Revision of milestones.json, or 0 while it isn't available yet."},"cards":{"anyOf":[{"type":"string"},{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}],"description":"Revision of cards.json, or 0 while it isn't available yet."}},"required":["blocks","history","milestones","cards"]},"HistoryDay":{"type":"object","properties":{"date":{"type":"string","format":"date","description":"UTC date on the chain's clock: a block counts on the day of the latest block timestamp up to it, so each day is an unbroken run of blocks."},"blocks":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Blocks counted on that day (lastHeight − firstHeight + 1)."},"firstHeight":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Lowest height of the day (the previous day's lastHeight + 1)."},"lastHeight":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Highest height of the day."},"avgIntervalSec":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Average block interval of the day. At most 1 decimal."},"txCount":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Transactions of the day."},"feesZat":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"Fees of the day. Null when fees were unavailable for part of the day. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"removedZat":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"ZEC moved to the NSM reserve that day. 0 before NU7. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"shieldedPct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}],"description":"Shielded share at the day's last confirmed pool snapshot. Null without a snapshot. At most 2 decimals."},"ironwoodMigrationPct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}],"description":"Ironwood share at the same snapshot. At most 2 decimals."},"partial":{"type":"boolean","description":"True for today's row, which is still filling in."}},"required":["date","blocks","firstHeight","lastHeight","avgIntervalSec","txCount","feesZat","removedZat","shieldedPct","ironwoodMigrationPct","partial"]},"Milestone":{"type":"object","properties":{"id":{"enum":["t-minus-10000","t-minus-1000","t-minus-100","t-minus-10","activation","first-sub-25s-block","first-144-block-hour","first-removal","first-6-hours","removed-1-zec","removed-10-zec","removed-100-zec","removed-1000-zec"],"type":"string","description":"t-minus-10000, t-minus-1000, t-minus-100, t-minus-10, activation, first-sub-25s-block, first-144-block-hour, first-removal, first-6-hours, removed-1-zec, removed-10-zec, removed-100-zec, removed-1000-zec."},"kind":{"enum":["countdown","activation","speed","removal"],"type":"string","description":"Milestone group."},"label":{"type":"string","minLength":1,"description":"Plain-English label."},"height":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Block that reached the milestone."},"hash":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"Hash of that block."},"time":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Miner timestamp of that block."},"status":{"enum":["provisional","final"],"type":"string","description":"final once the block has 10 confirmations."},"value":{"anyOf":[{"$ref":"#/components/schemas/MilestoneValue"},{"type":"null"}],"description":"The numbers of the milestone's card, computed at its block and fixed once it is final. Its shape depends on the id: t-minus-N { eta }, first-sub-25s-block { intervalSec, avgBlockTime1hSec }, first-removal { removedZat }, first-6-hours { blocks, avgIntervalSec, removedZat, shieldedPct }. Null for the other ids."}},"required":["id","kind","label","height","hash","time","status","value"]},"MilestoneValue":{"anyOf":[{"$ref":"#/components/schemas/MilestoneValueFirstSixHours"},{"$ref":"#/components/schemas/MilestoneValueInterval"},{"$ref":"#/components/schemas/MilestoneValueCountdown"},{"$ref":"#/components/schemas/MilestoneValueFirstRemoval"}]},"MilestoneValueFirstSixHours":{"type":"object","properties":{"blocks":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"first-6-hours: blocks after the activation block, up to and including this one."},"avgIntervalSec":{"type":"number","description":"first-6-hours: average block time over those blocks, on the chain clock (latest block timestamp so far). At most 1 decimal."},"removedZat":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}],"description":"first-removal: ZEC removed in this block. first-6-hours: ZEC removed from the activation block through this one, or null while a block in that range is disputed or not yet published. Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."},"shieldedPct":{"anyOf":[{"type":"number","minimum":0,"maximum":100},{"type":"null"}],"description":"first-6-hours: shielded share at the end of the 6 hours, from our newest pool snapshot of blocks h − 10 … h, never before the activation block (same formula as shielded.pct). Null when we have none. At most 2 decimals."}},"required":["blocks","avgIntervalSec","removedZat","shieldedPct"]},"MilestoneValueInterval":{"type":"object","properties":{"intervalSec":{"type":"integer","minimum":1,"maximum":24,"description":"first-sub-25s-block: raw interval of the first block under 25 s."},"avgBlockTime1hSec":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"first-sub-25s-block: average block time over the 1 h window ending at this block, on the chain's clock (as stats.avgBlockTime1hSec was with this block as the tip). Null with fewer than 2 blocks in the window. At most 1 decimal."}},"required":["intervalSec","avgBlockTime1hSec"]},"MilestoneValueCountdown":{"type":"object","properties":{"eta":{"anyOf":[{"$ref":"#/components/schemas/MilestoneEta"},{"type":"null"}],"description":"t-minus-N: the NU7 ETA as published at this block. Null with fewer than 48 blocks of history, or when our poller didn't see the block live."}},"required":["eta"]},"MilestoneValueFirstRemoval":{"type":"object","properties":{"removedZat":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Integer zatoshi (1 ZEC = 100,000,000 zat), safe integer; never a float."}},"required":["removedZat"]},"MilestoneEta":{"type":"object","properties":{"time":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Estimated activation time."},"low":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Early end of the estimate's band."},"high":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Late end of the estimate's band."}},"required":["time","low","high"]},"CardItem":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-z0-9][a-z0-9-]*$","description":"Image key (file name without .png)."},"kind":{"type":"string","pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","description":"Card kind: daily, countdown, activation, activation-art, event or first-6-hours. The list may grow; show unknown kinds generically or ignore them."},"url":{"type":"string","format":"uri","pattern":"^https?:\\/\\/","description":"Image URL."},"width":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Width in pixels."},"height":{"type":"integer","minimum":1,"maximum":9007199254740991,"description":"Height in pixels."},"alt":{"type":"string","pattern":"\\S","description":"Alt text, also the share text."},"heightRef":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Block height the card describes."},"renderedAt":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"When the image was rendered."}},"required":["key","kind","url","width","height","alt","heightRef","renderedAt"]}}}}