Developer

API & Embed Widgets

Pull live Zephyr data into your site, bot, or wallet with one HTTP call or one iframe.

All endpoints are CORS-open and return JSON. The proxy automatically fails over across four public Zephyr nodes: harborwallet.io (SSL, primary) → node.zeph.network (SSL) → remote-node.zephyrprotocol.com:17767 (HTTP) → node.zeph.network (HTTP fallback). HTTPS calls use standard fetch(); HTTP calls go through the Cloudflare Sockets API (since Workers' fetch can't reach plain HTTP on non-standard ports). When an SSL node fails, the proxy enters a 60-second backoff so subsequent requests skip SSL and go straight to sockets — no wasted timeouts.

Most responses carry secure and transport fields telling you which node served the data. Hot endpoints are edge-cached on Cloudflare for 4–600 seconds depending on volatility. No auth, no API key, no rate limit beyond Cloudflare's defaults. Thanks to Harbor, zeph.network, and Zephyr Protocol for running the public nodes that keep this API alive.
block_reward_breakdown (cross-cutting)
Several endpoints (/api/last_block, /api/block, /api/block_full, and per-block in /api/pricing_history) attach a block_reward_breakdown object that splits the chain's consensus 65/30/5 emission rule into its component parts. The block header's reward field only contains the miner share (the only output in vout); the reserve and yield slices are protocol-level. The breakdown surfaces all three plus the ZSD-denominated yield amount (yield_zeph × spot_price), so consumers don't need to derive it themselves.
{
  "total_atomic":      6757309232029,   // miner / 0.65 — total ZEPH emission
  "miner_atomic":      4392251000819,   // 65% — only output in vout
  "reserve_atomic":    2027192769609,   // 30% — protocol-level
  "yield_zeph_atomic":  337865461601,   //  5% in ZEPH equivalent
  "yield_zsd_atomic":   114384872338,   //  5% × spot — actual ZSD payout to ZYS pool
  "split": { "miner": 0.65, "reserve": 0.30, "yield": 0.05 }
}

REST endpoints

GET /api/info
Chain stats: height, hashrate, difficulty, mempool size, network type, version. Wraps Zephyr's get_info JSON-RPC.
curl https://explorer.zephflow.live/api/info
GET /api/height
Just the chain tip count. Light, cached for 4 s.
curl https://explorer.zephflow.live/api/height
GET /api/last_block
Header of the most recent block: hash, timestamp, reward, miner_tx_hash, difficulty, plus the chain's decoded pricing_record. Now also includes block_reward_breakdown with the full 65/30/5 split (see cross-cutting note above).
curl https://explorer.zephflow.live/api/last_block
GET /api/block/:id
Block header by height (numeric) or 64-char hex hash. Long-cached (1d) since blocks are immutable.
curl https://explorer.zephflow.live/api/block/766349
GET /api/block_full/:id
Full block payload — header + tx_hashes + miner_tx_hash + raw block JSON (incl. embedded pricing record).
curl https://explorer.zephflow.live/api/block_full/766349
GET /api/headers?from=X&to=Y
Range of block headers (max 50 per call). Used by the homepage's "Latest blocks" table.
curl 'https://explorer.zephflow.live/api/headers?from=766300&to=766349'
POST /api/tx
Look up one or more transactions by hash. Body: {"hashes": ["...", ...]} (max 25).
curl -X POST https://explorer.zephflow.live/api/tx \
  -H 'Content-Type: application/json' \
  -d '{"hashes":["abc123...64hex..."]}'
GET /api/circulating
Per-currency circulating supply tally (ZPH / ZSD / ZRS / ZYS / DJED / YIELD). Wraps Zephyr's get_circulating_supply.
curl https://explorer.zephflow.live/api/circulating
GET /api/reserve
Full reserve state: assets, equity, liabilities, num_stables, num_reserves, reserve_ratio, plus the embedded pricing record (.pr).
curl https://explorer.zephflow.live/api/reserve
GET /api/pricing
Just the live oracle pricing record: spot, moving_average, stable, reserve, yield_price, signature, timestamp.
curl https://explorer.zephflow.live/api/pricing
GET /api/pricing_history?from=X&to=Y&step=N
Decoded pricing record + block_reward_breakdown for each block in a range. step controls sampling density; the explorer's chart UI uses ~360 samples per range (step 2 for 24h, 15 for 7d, 60 for 30d, 180 for 3m, 360 for 6m, 720 for 1y, 3650 for 5y, adaptive for ALL). Max 1000 samples per call.

Architecture: this endpoint is Cloudflare-cached (10 min TTL) but the origin is a Python HTTP server on the community VPS at liquidity.zephflow.live. That server hits the public Zephyr nodes directly (no Cloudflare Worker subrequest ceiling), which lets it fan out hundreds of parallel get_block_header_by_height calls to keep ZephDash-density charts loading in a second or two. Per-block in-memory cache on the VPS means repeat visitors touch the nodes rarely.

Response includes a requested and count field so consumers can detect partial loads. If Harbor and both zeph.network endpoints go dark simultaneously, this endpoint returns 502 rather than partial garbage.
curl 'https://explorer.zephflow.live/api/pricing_history?from=826680&to=827400&step=60'
GET /api/fee
Network fee estimate (per-byte) from get_fee_estimate.
curl https://explorer.zephflow.live/api/fee
GET /api/health
Per-node liveness probe. Each entry reports node, url, secure (SSL?), transport (fetch or sockets), ok, and current height. When ≥2 nodes report heights, the proxy adds divergent: true + a divergence delta to any node whose tip differs by more than 5 blocks from the leader — a tampering canary.
curl https://explorer.zephflow.live/api/health
POST /api/rpc
Generic JSON-RPC passthrough. Body: {"method": "...", "params": {}}. Use this to call any daemon method we haven't surfaced explicitly.
curl -X POST https://explorer.zephflow.live/api/rpc \
  -H 'Content-Type: application/json' \
  -d '{"method":"get_block_count"}'

Embed widgets

Stablecoin health gauge
The full speedometer-style collateralization gauge with animated needle, 4-zone color arc, and 5-state status pill (very healthy / healthy / paused / depegged). Same component used on the explorer homepage. Auto-refreshes every 30 s.
<iframe src="https://explorer.zephflow.live/embed/health.html"
        width="420" height="400" frameborder="0"></iframe>
Compact collateralization ratio
Just the percentage with a colored status pill — no gauge. For small spaces / sidebars. Auto-refreshes every 30 s.
<iframe src="https://explorer.zephflow.live/embed/ratio.html"
        width="300" height="140" frameborder="0"></iframe>
Oracle spot & prices
Live oracle: spot ZEPH price, 24h moving average, ZRS index, ZYS index — stacked. Auto-refreshes every 30 s.
<iframe src="https://explorer.zephflow.live/embed/spot.html"
        width="300" height="180" frameborder="0"></iframe>
Circulating supply table
ZEPH · ZSD · ZRS · ZYS circulating amounts in a tidy four-row card. Auto-refreshes every 60 s.
<iframe src="https://explorer.zephflow.live/embed/supply.html"
        width="340" height="200" frameborder="0"></iframe>
ZSD APY + mini calc
The live ZSD APY (matching zephyrprotocol.com/yield's published value) with a tiny inline calculator: type a ZSD amount and see projected returns at 1 month, 3 months, and 1 year. Auto-refreshes every 60 s. Hosted on the calc subdomain.
<iframe src="https://apy.zephflow.live/embed/apy.html"
        width="380" height="300" frameborder="0"></iframe>
Reuse freely. No attribution required, but a link back to explorer.zephflow.live is appreciated and included in the default widget footers. Found a bug or have a request? Ping us in the Zephyr community channels.