Schema at a glance
Each market is keyed by a stable identity, not a display string:
The
display_symbol is what API responses expose as market.
Cross-issuer queries use base_market (the suffix-only form, e.g.
GAS-PERP) and issuer independently — see
Sources & Markets.
Candles / OHLCV
What we store. Every fill — including liquidation fills and internal/cross-book trades — contributes to the candle. We don’t pre-filter the tape. Why. Filtering for display is a one-lineWHERE clause; recovering
filtered data after the fact is impossible. We default to the more
literal capture.
Funding rates
What we store. Every funding-rate emission from the venue, written by a single dedicated process to keep the table free of write conflicts. Cadence. Hourly on Hyperliquid; some HIP-3 builder markets emit on different schedules. Continuity is monitored per market.HIP-3 builder markets
HIP-3 markets are namespaced as<issuer>:<base>-PERP (e.g.
flx:GAS-PERP). Three filter modes work identically across every
endpoint:
Spot pairs
HL spot is queryable by either form:market_class='perp'.
Filter by market_class = 'spot' to scope queries.