API
Every number on this site is served as JSON from the same routes, with no key.
Routes
| Route | Returns |
|---|---|
GET /api/pools | the 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/nav | NAV series, per-hour harvest, trailing APR |
GET /api/stats | protocol summary: streams, chains, notional, λ₁ share, epoch |
GET /api/blocks | the newest Zcash blocks with the miner's take and the shielded delta |
GET /api/chain | live Robinhood Chain block number and gas price from the RPC |
GET /api/zcash | Zcash height, hashrate, difficulty and mempool, live |
GET /api/epochs | current epoch and seconds to the next harvest |
GET /api/contracts | the address registry this site is built against |
GET /api/card/epoch | a 1080×1080 share card, rendered live |
Example
# the spectrum, right now $ curl https://zecyield.dev/api/eigen { "source": "live", "lambda": [3.66, 2.17, 1.54, ...], "explained": [0.260, 0.154, 0.110, ...], "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.