# Market Data

Public market data endpoints. No authentication required. Rate limited to 60 req/min per IP without an API key.

## List all coins

> Returns all active Hyperliquid perpetual markets with current funding rate metrics.\
> Use this endpoint to populate coin selectors, build funding rate scanners, or rank\
> markets by yield opportunity.\
> \
> Predicted funding rates are sourced from Hyperliquid's \`predictedFundings\` endpoint\
> and include cross-exchange predictions (HlPerp, BinancePerp, BybitPerp).<br>

```json
{"openapi":"3.1.0","info":{"title":"Zirodelta API","version":"1.0.0"},"tags":[{"name":"Market Data","description":"Public market data endpoints. No authentication required. Rate limited to 60 req/min per IP without an API key."}],"servers":[{"url":"https://api.dex.zirodelta.xyz","description":"Production"}],"security":[],"paths":{"/api/coins":{"get":{"operationId":"getCoins","summary":"List all coins","description":"Returns all active Hyperliquid perpetual markets with current funding rate metrics.\nUse this endpoint to populate coin selectors, build funding rate scanners, or rank\nmarkets by yield opportunity.\n\nPredicted funding rates are sourced from Hyperliquid's `predictedFundings` endpoint\nand include cross-exchange predictions (HlPerp, BinancePerp, BybitPerp).\n","tags":["Market Data"],"responses":{"200":{"description":"List of all active coins with funding metrics.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoinsResponse"}}}},"502":{"$ref":"#/components/responses/InternalError"}}}}},"components":{"headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current rate limit window resets.","schema":{"type":"integer"}}},"schemas":{"CoinsResponse":{"type":"object","required":["coins"],"properties":{"coins":{"type":"array","items":{"$ref":"#/components/schemas/CoinInfo"}}}},"CoinInfo":{"type":"object","required":["name","max_leverage","mark_px","change_24h","volume_24h","open_interest","funding_1h","predicted_funding","has_spot"],"properties":{"name":{"type":"string","description":"Asset symbol."},"max_leverage":{"type":"integer","description":"Maximum leverage for this market."},"mark_px":{"type":"number","format":"double","description":"Current mark price in USD."},"change_24h":{"type":"number","format":"double","description":"24-hour price change in percent."},"volume_24h":{"type":"number","format":"double","description":"24-hour notional volume in USD."},"open_interest":{"type":"number","format":"double","description":"Total open interest in USD notional."},"funding_1h":{"type":"number","format":"double","description":"Current 1-hour funding rate (decimal, not percent). Positive means longs pay shorts."},"predicted_funding":{"type":"number","format":"double","description":"Predicted next settlement 1-hour rate from Hyperliquid."},"has_spot":{"type":"boolean","description":"Whether a native spot market exists on Hyperliquid for this coin."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error description."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Present only on 429 responses."}}}},"responses":{"InternalError":{"description":"Internal server error.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}
```

## Get funding rate history

> Returns up to 90 days of hourly funding rate history for a single coin.\
> Data is sourced from ClickHouse first, with Hyperliquid gap-fill for missing recent records.\
> \
> Hyperliquid settles funding every 1 hour, so up to 2160 records may be returned.\
> All rates are normalized to a 1-hour basis regardless of the exchange interval.<br>

```json
{"openapi":"3.1.0","info":{"title":"Zirodelta API","version":"1.0.0"},"tags":[{"name":"Market Data","description":"Public market data endpoints. No authentication required. Rate limited to 60 req/min per IP without an API key."}],"servers":[{"url":"https://api.dex.zirodelta.xyz","description":"Production"}],"security":[],"paths":{"/api/funding-rates/{coin}":{"get":{"operationId":"getFundingRates","summary":"Get funding rate history","description":"Returns up to 90 days of hourly funding rate history for a single coin.\nData is sourced from ClickHouse first, with Hyperliquid gap-fill for missing recent records.\n\nHyperliquid settles funding every 1 hour, so up to 2160 records may be returned.\nAll rates are normalized to a 1-hour basis regardless of the exchange interval.\n","tags":["Market Data"],"parameters":[{"name":"coin","in":"path","required":true,"description":"Asset symbol (uppercase). Example: BTC, ETH, HYPE.","schema":{"type":"string"}}],"responses":{"200":{"description":"Funding rate history with current rate summary.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingRatesResponse"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"}}}}},"components":{"headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current rate limit window resets.","schema":{"type":"integer"}}},"schemas":{"FundingRatesResponse":{"type":"object","required":["coin","rates","current"],"properties":{"coin":{"type":"string"},"rates":{"type":"array","items":{"$ref":"#/components/schemas/FundingRateEntry"},"description":"Up to 2160 hourly settlements (90 days)."},"current":{"$ref":"#/components/schemas/FundingRateEntry","description":"Most recent settlement record."}}},"FundingRateEntry":{"type":"object","required":["timestamp","exchange","coin","rate_1h","daily_yield","apr"],"properties":{"timestamp":{"type":"integer","format":"int64","description":"Unix timestamp of the settlement in seconds."},"exchange":{"type":"string","description":"Exchange name."},"coin":{"type":"string","description":"Asset symbol."},"rate_1h":{"type":"number","format":"double","description":"Normalized 1-hour funding rate as a decimal (not percent). Positive means longs pay shorts."},"daily_yield":{"type":"number","format":"double","description":"Daily yield in percent (rate_1h * 24 * 100)."},"apr":{"type":"number","format":"double","description":"Annualized percentage rate (rate_1h * 8760 * 100)."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error description."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Present only on 429 responses."}}}},"responses":{"TooManyRequests":{"description":"Rate limit exceeded.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalError":{"description":"Internal server error.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}
```

## Get market statistics

> Returns current market statistics for a single coin: mark price, oracle price,\
> 24-hour change and volume, open interest, current and predicted funding rate,\
> max leverage, and spot market availability.<br>

```json
{"openapi":"3.1.0","info":{"title":"Zirodelta API","version":"1.0.0"},"tags":[{"name":"Market Data","description":"Public market data endpoints. No authentication required. Rate limited to 60 req/min per IP without an API key."}],"servers":[{"url":"https://api.dex.zirodelta.xyz","description":"Production"}],"security":[],"paths":{"/api/market-stats/{coin}":{"get":{"operationId":"getMarketStats","summary":"Get market statistics","description":"Returns current market statistics for a single coin: mark price, oracle price,\n24-hour change and volume, open interest, current and predicted funding rate,\nmax leverage, and spot market availability.\n","tags":["Market Data"],"parameters":[{"name":"coin","in":"path","required":true,"description":"Asset symbol (uppercase). Example: BTC, ETH, HYPE.","schema":{"type":"string"}}],"responses":{"200":{"description":"Current market statistics for the requested coin.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketStats"}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"502":{"$ref":"#/components/responses/InternalError"}}}}},"components":{"headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current rate limit window resets.","schema":{"type":"integer"}}},"schemas":{"MarketStats":{"type":"object","required":["coin","mark_px","oracle_px","change_24h","volume_24h","open_interest","funding_1h","predicted_funding","max_leverage","has_spot","spot_px"],"properties":{"coin":{"type":"string"},"mark_px":{"type":"number","format":"double","description":"Current mark price in USD."},"oracle_px":{"type":"number","format":"double","description":"Oracle (spot reference) price in USD."},"change_24h":{"type":"number","format":"double","description":"24-hour price change in percent."},"volume_24h":{"type":"number","format":"double","description":"24-hour notional trading volume in USD."},"open_interest":{"type":"number","format":"double","description":"Current total open interest in USD notional."},"funding_1h":{"type":"number","format":"double","description":"Current 1-hour funding rate as a decimal. Positive means longs pay shorts."},"predicted_funding":{"type":"number","format":"double","description":"Predicted next-settlement 1-hour rate from Hyperliquid."},"max_leverage":{"type":"integer","description":"Maximum leverage available for this market."},"has_spot":{"type":"boolean","description":"Whether a spot market exists on Hyperliquid for delta-neutral trading."},"spot_px":{"type":"number","format":"double","description":"Current spot mid price in USD. Zero if no liquid spot market exists."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error description."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Present only on 429 responses."}}}},"responses":{"NotFound":{"description":"Requested resource not found.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"TooManyRequests":{"description":"Rate limit exceeded.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalError":{"description":"Internal server error.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}
```

## Get order book

> Returns the current L2 order book for a coin, proxied from Hyperliquid.\
> Returns up to 16 price levels on each side with cumulative size.\
> \
> Use the \`market\` query parameter to switch between the perpetual and spot order books.\
> Spot market availability can be checked via \`has\_spot\` in \`/api/market-stats/{coin}\`.<br>

```json
{"openapi":"3.1.0","info":{"title":"Zirodelta API","version":"1.0.0"},"tags":[{"name":"Market Data","description":"Public market data endpoints. No authentication required. Rate limited to 60 req/min per IP without an API key."}],"servers":[{"url":"https://api.dex.zirodelta.xyz","description":"Production"}],"security":[],"paths":{"/api/orderbook/{coin}":{"get":{"operationId":"getOrderBook","summary":"Get order book","description":"Returns the current L2 order book for a coin, proxied from Hyperliquid.\nReturns up to 16 price levels on each side with cumulative size.\n\nUse the `market` query parameter to switch between the perpetual and spot order books.\nSpot market availability can be checked via `has_spot` in `/api/market-stats/{coin}`.\n","tags":["Market Data"],"parameters":[{"name":"coin","in":"path","required":true,"description":"Asset symbol (uppercase). Example: BTC, ETH, HYPE.","schema":{"type":"string"}},{"name":"market","in":"query","required":false,"description":"Market type. Defaults to perp. Use spot to retrieve the native spot order book.","schema":{"type":"string","enum":["perp","spot"],"default":"perp"}}],"responses":{"200":{"description":"Current order book snapshot.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrderBook"}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"502":{"$ref":"#/components/responses/InternalError"}}}}},"components":{"headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current rate limit window resets.","schema":{"type":"integer"}}},"schemas":{"OrderBook":{"type":"object","required":["coin","time","bids","asks"],"properties":{"coin":{"type":"string","description":"Asset symbol (uppercase). For spot markets this is the HL internal notation (e.g. BTC or @107)."},"time":{"type":"integer","format":"int64","description":"Server-side timestamp of the snapshot in Unix milliseconds."},"bids":{"type":"array","items":{"$ref":"#/components/schemas/OrderBookLevel"},"description":"Bid levels, best bid first (descending price). Up to 16 levels."},"asks":{"type":"array","items":{"$ref":"#/components/schemas/OrderBookLevel"},"description":"Ask levels, best ask first (ascending price). Up to 16 levels."}}},"OrderBookLevel":{"type":"object","required":["price","size","total"],"properties":{"price":{"type":"number","format":"double","description":"Price level."},"size":{"type":"number","format":"double","description":"Size available at this price level (coin units)."},"total":{"type":"number","format":"double","description":"Cumulative size from the best price to this level (coin units)."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error description."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Present only on 429 responses."}}}},"responses":{"NotFound":{"description":"Requested resource not found.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"TooManyRequests":{"description":"Rate limit exceeded.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalError":{"description":"Internal server error.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}
```

## Get OHLCV candles

> Returns OHLCV candlestick data for a coin for both the perpetual and spot markets.\
> Data covers the last 30 days for the requested interval.\
> \
> Valid intervals: 1m, 5m, 15m, 1h, 4h, 1d. Invalid values default to 1h.\
> The spot array is empty if no liquid spot market exists for the coin.<br>

```json
{"openapi":"3.1.0","info":{"title":"Zirodelta API","version":"1.0.0"},"tags":[{"name":"Market Data","description":"Public market data endpoints. No authentication required. Rate limited to 60 req/min per IP without an API key."}],"servers":[{"url":"https://api.dex.zirodelta.xyz","description":"Production"}],"security":[],"paths":{"/api/candles/{coin}":{"get":{"operationId":"getCandles","summary":"Get OHLCV candles","description":"Returns OHLCV candlestick data for a coin for both the perpetual and spot markets.\nData covers the last 30 days for the requested interval.\n\nValid intervals: 1m, 5m, 15m, 1h, 4h, 1d. Invalid values default to 1h.\nThe spot array is empty if no liquid spot market exists for the coin.\n","tags":["Market Data"],"parameters":[{"name":"coin","in":"path","required":true,"description":"Asset symbol (uppercase).","schema":{"type":"string"}},{"name":"interval","in":"query","required":false,"description":"Candlestick interval. Defaults to 1h.","schema":{"type":"string","enum":["1m","5m","15m","1h","4h","1d"],"default":"1h"}}],"responses":{"200":{"description":"OHLCV candle data for the requested coin and interval.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CandlesResponse"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"502":{"$ref":"#/components/responses/InternalError"}}}}},"components":{"headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current rate limit window resets.","schema":{"type":"integer"}}},"schemas":{"CandlesResponse":{"type":"object","required":["coin","interval","perp","spot"],"properties":{"coin":{"type":"string"},"interval":{"type":"string","enum":["1m","5m","15m","1h","4h","1d"]},"perp":{"type":"array","items":{"$ref":"#/components/schemas/Candle"},"description":"OHLCV candles for the perpetual market. Up to 30 days of history."},"spot":{"type":"array","items":{"$ref":"#/components/schemas/Candle"},"description":"OHLCV candles for the spot market. Empty array if no liquid spot market exists."}}},"Candle":{"type":"object","required":["t","o","h","l","c","v","n"],"properties":{"t":{"type":"integer","format":"int64","description":"Open time in Unix milliseconds."},"o":{"type":"number","format":"double","description":"Open price."},"h":{"type":"number","format":"double","description":"High price."},"l":{"type":"number","format":"double","description":"Low price."},"c":{"type":"number","format":"double","description":"Close price."},"v":{"type":"number","format":"double","description":"Base volume (coin units) for the interval."},"n":{"type":"integer","description":"Number of trades during the interval."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error description."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Present only on 429 responses."}}}},"responses":{"TooManyRequests":{"description":"Rate limit exceeded.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalError":{"description":"Internal server error.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}
```

## Get microstructure indicators

> Returns 30 days of 5-minute microstructure signal buckets for a coin from the\
> Hyperflow ClickHouse pipeline.\
> \
> Each bucket contains CVD (cumulative volume delta), open interest, long and short\
> liquidation volumes, and buy/sell volume. This data powers the Zirodelta analytics\
> charts and the Farm Score model.\
> \
> Returns 503 if the ClickHouse database is unavailable.<br>

```json
{"openapi":"3.1.0","info":{"title":"Zirodelta API","version":"1.0.0"},"tags":[{"name":"Market Data","description":"Public market data endpoints. No authentication required. Rate limited to 60 req/min per IP without an API key."}],"servers":[{"url":"https://api.dex.zirodelta.xyz","description":"Production"}],"security":[],"paths":{"/api/indicators/{coin}":{"get":{"operationId":"getIndicators","summary":"Get microstructure indicators","description":"Returns 30 days of 5-minute microstructure signal buckets for a coin from the\nHyperflow ClickHouse pipeline.\n\nEach bucket contains CVD (cumulative volume delta), open interest, long and short\nliquidation volumes, and buy/sell volume. This data powers the Zirodelta analytics\ncharts and the Farm Score model.\n\nReturns 503 if the ClickHouse database is unavailable.\n","tags":["Market Data"],"parameters":[{"name":"coin","in":"path","required":true,"description":"Asset symbol (uppercase).","schema":{"type":"string"}}],"responses":{"200":{"description":"5-minute microstructure indicator buckets for the last 30 days.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IndicatorsResponse"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"description":"ClickHouse database unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current rate limit window resets.","schema":{"type":"integer"}}},"schemas":{"IndicatorsResponse":{"type":"object","required":["coin","points"],"properties":{"coin":{"type":"string"},"points":{"type":"array","items":{"$ref":"#/components/schemas/IndicatorPoint"},"description":"5-minute microstructure signal buckets for the last 30 days. Up to 8640 points."}}},"IndicatorPoint":{"type":"object","required":["t","cvd","oi","ll","sl","bv","sv"],"properties":{"t":{"type":"integer","format":"int64","description":"Bucket open time in Unix seconds."},"cvd":{"type":"number","format":"double","description":"Cumulative Volume Delta in USD for this 5-minute bucket. Positive means buyers dominated."},"oi":{"type":"number","format":"double","description":"Open interest in USD at the end of the bucket."},"ll":{"type":"number","format":"double","description":"Long liquidation volume in USD during the bucket."},"sl":{"type":"number","format":"double","description":"Short liquidation volume in USD during the bucket."},"bv":{"type":"number","format":"double","description":"Buy volume in USD during the bucket."},"sv":{"type":"number","format":"double","description":"Sell volume in USD during the bucket."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error description."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Present only on 429 responses."}}}},"responses":{"TooManyRequests":{"description":"Rate limit exceeded.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalError":{"description":"Internal server error.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}
```

## Get market flow data

> Returns aggregated market flow data including CVD, open interest, funding rate,\
> liquidation volumes, and whale net flow for configurable time windows and bucket sizes.\
> \
> The summary object provides a composite risk signal (green/amber/red) based on\
> CVD magnitude and large liquidation count over the last 1 hour.<br>

```json
{"openapi":"3.1.0","info":{"title":"Zirodelta API","version":"1.0.0"},"tags":[{"name":"Market Data","description":"Public market data endpoints. No authentication required. Rate limited to 60 req/min per IP without an API key."}],"servers":[{"url":"https://api.dex.zirodelta.xyz","description":"Production"}],"security":[],"paths":{"/api/flow/{coin}":{"get":{"operationId":"getFlow","summary":"Get market flow data","description":"Returns aggregated market flow data including CVD, open interest, funding rate,\nliquidation volumes, and whale net flow for configurable time windows and bucket sizes.\n\nThe summary object provides a composite risk signal (green/amber/red) based on\nCVD magnitude and large liquidation count over the last 1 hour.\n","tags":["Market Data"],"parameters":[{"name":"coin","in":"path","required":true,"description":"Asset symbol (uppercase).","schema":{"type":"string"}},{"name":"hours","in":"query","required":false,"description":"Lookback window in hours. Minimum 1, maximum 720 (30 days). Defaults to 720.","schema":{"type":"integer","minimum":1,"maximum":720,"default":720}},{"name":"bucket","in":"query","required":false,"description":"Bucket size in minutes for aggregation. Minimum 5, maximum 1440. Defaults to 5.","schema":{"type":"integer","minimum":5,"maximum":1440,"default":5}}],"responses":{"200":{"description":"Aggregated flow data with risk summary.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FlowResponse"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"description":"ClickHouse database unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current rate limit window resets.","schema":{"type":"integer"}}},"schemas":{"FlowResponse":{"type":"object","required":["coin","buckets","summary"],"properties":{"coin":{"type":"string"},"buckets":{"type":"array","items":{"$ref":"#/components/schemas/FlowBucket"}},"summary":{"$ref":"#/components/schemas/FlowSummary"}}},"FlowBucket":{"type":"object","required":["t","cvd","oi","funding","long_liq","short_liq","whale_net"],"properties":{"t":{"type":"integer","format":"int64","description":"Bucket open time in Unix seconds (aligned to requested bucket size)."},"cvd":{"type":"number","format":"double","description":"Cumulative Volume Delta in USD for the bucket."},"oi":{"type":"number","format":"double","description":"Open interest in USD at the end of the bucket."},"funding":{"type":"number","format":"double","description":"Funding rate (1-hour decimal) at the end of the bucket."},"long_liq":{"type":"number","format":"double","description":"Long liquidation volume in USD during the bucket."},"short_liq":{"type":"number","format":"double","description":"Short liquidation volume in USD during the bucket."},"whale_net":{"type":"number","format":"double","description":"Net whale order flow in USD (whale buy volume minus whale sell volume)."}}},"FlowSummary":{"type":"object","required":["cvd_1h","oi_change_pct","liq_count_1h","risk"],"properties":{"cvd_1h":{"type":"number","format":"double","description":"Total CVD (USD) over the last 1 hour."},"oi_change_pct":{"type":"number","format":"double","description":"Open interest change from the start to the end of the requested window, in percent."},"liq_count_1h":{"type":"integer","description":"Number of liquidation events exceeding $100,000 in the last 1 hour."},"risk":{"type":"string","enum":["green","amber","red"],"description":"Composite risk signal. red = CVD above $5M or more than 3 large liquidations in the last hour; amber = CVD above $1M or more than 1 large liquidation; green = normal conditions."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error description."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Present only on 429 responses."}}}},"responses":{"TooManyRequests":{"description":"Rate limit exceeded.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalError":{"description":"Internal server error.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}
```

## Get crowd positioning leaderboard

> Returns crowd positioning data for all Hyperliquid coins. Open interest comes from\
> Hyperliquid. Long/short ratio and taker buy/sell ratio are sourced from Binance or\
> Bybit snapshots (updated every 10 minutes by the settled-oracle service).\
> \
> Coins without Binance/Bybit data will have null values for ls\_ratio, long\_pct,\
> short\_pct, and taker\_bs\_ratio.<br>

```json
{"openapi":"3.1.0","info":{"title":"Zirodelta API","version":"1.0.0"},"tags":[{"name":"Market Data","description":"Public market data endpoints. No authentication required. Rate limited to 60 req/min per IP without an API key."}],"servers":[{"url":"https://api.dex.zirodelta.xyz","description":"Production"}],"security":[],"paths":{"/api/crowd/leaderboard":{"get":{"operationId":"getCrowdLeaderboard","summary":"Get crowd positioning leaderboard","description":"Returns crowd positioning data for all Hyperliquid coins. Open interest comes from\nHyperliquid. Long/short ratio and taker buy/sell ratio are sourced from Binance or\nBybit snapshots (updated every 10 minutes by the settled-oracle service).\n\nCoins without Binance/Bybit data will have null values for ls_ratio, long_pct,\nshort_pct, and taker_bs_ratio.\n","tags":["Market Data"],"responses":{"200":{"description":"Crowd positioning for all coins.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrowdLeaderboardResponse"}}}},"429":{"$ref":"#/components/responses/TooManyRequests"},"500":{"$ref":"#/components/responses/InternalError"},"503":{"description":"ClickHouse database unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current rate limit window resets.","schema":{"type":"integer"}}},"schemas":{"CrowdLeaderboardResponse":{"type":"object","required":["entries"],"properties":{"entries":{"type":"array","items":{"$ref":"#/components/schemas/CrowdEntry"}}}},"CrowdEntry":{"type":"object","required":["symbol","oi_value_usd"],"properties":{"symbol":{"type":"string","description":"Asset symbol with USDT suffix as stored in the database (e.g. BTCUSDT)."},"long_pct":{"type":"number","format":"double","nullable":true,"description":"Percentage of accounts holding long positions. Null if no cross-exchange data is available."},"short_pct":{"type":"number","format":"double","nullable":true,"description":"Percentage of accounts holding short positions. Null if no cross-exchange data is available."},"ls_ratio":{"type":"number","format":"double","nullable":true,"description":"Long/short account ratio. Null if unavailable."},"taker_bs_ratio":{"type":"number","format":"double","nullable":true,"description":"Taker buy/sell volume ratio. Null if unavailable."},"oi_value_usd":{"type":"number","format":"double","description":"Open interest value in USD from Hyperliquid."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error description."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Present only on 429 responses."}}}},"responses":{"TooManyRequests":{"description":"Rate limit exceeded.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalError":{"description":"Internal server error.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}
```

## Get crowd snapshot for a coin

> Returns the latest crowd positioning snapshot for a single coin.\
> OI data comes from Hyperliquid. Long/short ratio and taker buy/sell ratio are\
> joined from Binance or Bybit if available within the last 2 hours.\
> \
> Returns 404 if no Hyperliquid OI data exists for the coin within the last 2 hours.<br>

```json
{"openapi":"3.1.0","info":{"title":"Zirodelta API","version":"1.0.0"},"tags":[{"name":"Market Data","description":"Public market data endpoints. No authentication required. Rate limited to 60 req/min per IP without an API key."}],"servers":[{"url":"https://api.dex.zirodelta.xyz","description":"Production"}],"security":[],"paths":{"/api/crowd/{coin}/latest":{"get":{"operationId":"getCrowdSnapshot","summary":"Get crowd snapshot for a coin","description":"Returns the latest crowd positioning snapshot for a single coin.\nOI data comes from Hyperliquid. Long/short ratio and taker buy/sell ratio are\njoined from Binance or Bybit if available within the last 2 hours.\n\nReturns 404 if no Hyperliquid OI data exists for the coin within the last 2 hours.\n","tags":["Market Data"],"parameters":[{"name":"coin","in":"path","required":true,"description":"Asset symbol (uppercase, without USDT suffix). Example: BTC, ETH.","schema":{"type":"string"}}],"responses":{"200":{"description":"Latest crowd positioning snapshot.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrowdPoint"}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"description":"ClickHouse database unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current rate limit window resets.","schema":{"type":"integer"}}},"schemas":{"CrowdPoint":{"type":"object","required":["oi_value_usd","snapshot_time"],"properties":{"long_pct":{"type":"number","format":"double","nullable":true,"description":"Percentage of accounts holding long positions (0-100). Null if no Binance/Bybit data is available."},"short_pct":{"type":"number","format":"double","nullable":true,"description":"Percentage of accounts holding short positions (0-100). Null if no Binance/Bybit data is available."},"ls_ratio":{"type":"number","format":"double","nullable":true,"description":"Long/short account ratio (long_pct / short_pct). Null if unavailable."},"taker_bs_ratio":{"type":"number","format":"double","nullable":true,"description":"Taker buy/sell volume ratio. Values above 1 mean more buy-side taker aggression. Null if unavailable."},"oi_value_usd":{"type":"number","format":"double","description":"Open interest value in USD (from Hyperliquid)."},"snapshot_time":{"type":"string","description":"Timestamp of the snapshot as an ISO 8601 string."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error description."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Present only on 429 responses."}}}},"responses":{"NotFound":{"description":"Requested resource not found.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"TooManyRequests":{"description":"Rate limit exceeded.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}
```

## Get crowd data for a coin (alias)

> Alias for GET /api/crowd/{coin}/latest. Returns the same crowd positioning snapshot.<br>

```json
{"openapi":"3.1.0","info":{"title":"Zirodelta API","version":"1.0.0"},"tags":[{"name":"Market Data","description":"Public market data endpoints. No authentication required. Rate limited to 60 req/min per IP without an API key."}],"servers":[{"url":"https://api.dex.zirodelta.xyz","description":"Production"}],"security":[],"paths":{"/api/crowd/{coin}":{"get":{"operationId":"getCrowdCoin","summary":"Get crowd data for a coin (alias)","description":"Alias for GET /api/crowd/{coin}/latest. Returns the same crowd positioning snapshot.\n","tags":["Market Data"],"parameters":[{"name":"coin","in":"path","required":true,"description":"Asset symbol (uppercase, without USDT suffix).","schema":{"type":"string"}}],"responses":{"200":{"description":"Latest crowd positioning snapshot.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrowdPoint"}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"},"503":{"description":"ClickHouse database unavailable.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"headers":{"X-RateLimit-Limit":{"description":"Maximum requests allowed in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate limit window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp (seconds) when the current rate limit window resets.","schema":{"type":"integer"}}},"schemas":{"CrowdPoint":{"type":"object","required":["oi_value_usd","snapshot_time"],"properties":{"long_pct":{"type":"number","format":"double","nullable":true,"description":"Percentage of accounts holding long positions (0-100). Null if no Binance/Bybit data is available."},"short_pct":{"type":"number","format":"double","nullable":true,"description":"Percentage of accounts holding short positions (0-100). Null if no Binance/Bybit data is available."},"ls_ratio":{"type":"number","format":"double","nullable":true,"description":"Long/short account ratio (long_pct / short_pct). Null if unavailable."},"taker_bs_ratio":{"type":"number","format":"double","nullable":true,"description":"Taker buy/sell volume ratio. Values above 1 mean more buy-side taker aggression. Null if unavailable."},"oi_value_usd":{"type":"number","format":"double","description":"Open interest value in USD (from Hyperliquid)."},"snapshot_time":{"type":"string","description":"Timestamp of the snapshot as an ISO 8601 string."}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error description."},"retry_after":{"type":"integer","description":"Seconds to wait before retrying. Present only on 429 responses."}}}},"responses":{"NotFound":{"description":"Requested resource not found.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"TooManyRequests":{"description":"Rate limit exceeded.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.zirodelta.com/api-reference/market-data.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
