API

Every number on this site is served as JSON from the same routes, with no key.

Routes

RouteReturns
GET /api/poolsthe universe: every pool, its gates, weight, and hourly fee and volume series
GET /api/eigenλ, explained variance, λ₁ loadings, factor scores, the correlation matrix
GET /api/navNAV series, per-hour harvest, trailing APR
GET /api/statsprotocol summary: streams, chains, notional, λ₁ share, epoch
GET /api/blocksthe newest Zcash blocks with the miner's take and the shielded delta
GET /api/chainlive Robinhood Chain block number and gas price from the RPC
GET /api/zcashZcash height, hashrate, difficulty and mempool, live
GET /api/epochscurrent epoch and seconds to the next harvest
GET /api/contractsthe address registry this site is built against
GET /api/card/epocha 1080×1080 share card, rendered live

Example

# the spectrum, right now
$ curl https://zecyield.dev/api/eigen

{
  "source": "live",
  "lambda": [3.52, 2.13, 1.37, ...],
  "explained": [0.250, 0.151, 0.097, ...],
  "weights": [ ... ],
  "correlation": [ [ ... ] ]
}

Data sources

Pool discovery, 24-hour volume, liquidity and a week of hourly volume come from GeckoTerminal's cross-network search for ZEC. That free tier rate-limits bursts, so reads are paced, retried with backoff and warmed by a cron job every fifteen minutes; each run spends a small network budget on the pools with the least history first. Zcash height, hashrate and the newest hundred blocks come from Blockchair, whose free tier is metered by request cost; the builder reads that cost from each response and stays inside a per-run budget. Robinhood Chain reads go straight to the RPC with batching disabled, because that node answers JSON-RPC batches in an order viem cannot line back up.

If the indexer is unreachable the whole site falls back to a deterministic day-seeded model in lib/sim.ts and every affected panel is labelled model. The fallback exists so a rate limit degrades the numbers rather than the page.