{"service":"Crypto-derivatives microstructure (funding / OI / basis / positioning)","sources":[{"key":"hyperliquid","name":"Hyperliquid","host":"api.hyperliquid.xyz","chain":"Hyperliquid L1 (HyperCore)","funding_interval_hours":1.0,"has_basis":true,"has_funding_history":true,"enabled":true,"attribution":"Hyperliquid public Info API (decentralized perp DEX, HyperCore state)"},{"key":"dydx","name":"dYdX v4","host":"indexer.dydx.trade","chain":"dYdX v4 (Cosmos appchain)","funding_interval_hours":1.0,"has_basis":false,"has_funding_history":false,"enabled":true,"attribution":"dYdX v4 public Indexer (decentralized perp protocol, read-only state)"},{"key":"aevo","name":"Aevo","host":"api.aevo.xyz","chain":"Aevo L2 (decentralized derivatives)","funding_interval_hours":1.0,"has_basis":false,"has_funding_history":false,"enabled":false,"attribution":"Aevo public API (decentralized options/perp exchange)"},{"key":"gmx","name":"GMX","host":"arbitrum-api.gmxinfra.io","chain":"GMX (Arbitrum, on-chain reader/subgraph)","funding_interval_hours":1.0,"has_basis":false,"has_funding_history":false,"enabled":false,"attribution":"GMX public reader (decentralized perp protocol, on-chain state)"}],"enabled_venues":["hyperliquid","dydx"],"license":"Public decentralized-protocol state read via keyless, read-only endpoints; normalized and fused by this service. Attribution to each source venue carried on every response.","attribution":"Derivatives microstructure computed by us from the public read-only state of DECENTRALIZED perpetual protocols (Hyperliquid, dYdX v4). Public protocol/on-chain state, normalized + fused — not a resold centralized-exchange market-data feed. Centralized-exchange feeds (Binance/Bybit/OKX/Coinalyze) are excluded from the base.","tos_basis":"Sources are DECENTRALIZED perp protocols read via keyless read-only public endpoints (public protocol / on-chain state), normalized + fused by us — like the parent's on-chain market-data routes. Centralized-exchange feeds (Binance/Bybit/OKX/Coinalyze/FundingPulse), whose ToS forbid commercial redistribution, are DELIBERATELY EXCLUDED from the fusion base.","normalization":{"funding_hourly":"raw per-interval funding / funding_interval_hours","apr":"funding_hourly * 24 * 365","oi_usd":"open_interest_coins * (mark price, else oracle price)","oi_weighted_funding":"sum(funding_hourly_i * oi_usd_i) / sum(oi_usd_i)","spread_bps":"(max - min) of per-venue hourly funding * 1e4","basis":"(mark - oracle) / oracle"},"score_formula":{"components":{"funding":0.5,"basis":0.005,"spread_bps":2.0},"weights":{"funding":0.55,"basis":0.25,"spread":0.2},"verdict_thresholds":{"extreme_positioning":70,"elevated":40},"note":"each component saturates to 1.0 at its reference; weights renormalize over available components; deterministic, no LLM."},"freshness":{"snapshot_ttl_seconds":15,"funding_history_ttl_seconds":300},"how_to_add_a_venue":"Add one row to derivs_registry.VENUES (hard-coded host, kind, funding interval). A venue of an existing protocol kind needs nothing else; a new protocol shape needs one pure parser in worker.PARSERS keyed by that kind."}