{"openapi":"3.0.0","paths":{"/api/v1/x402/ws-pass/hour":{"post":{"description":"Purchase a 1-hour WebSocket streaming entitlement via x402 (USDC on Base mainnet). On success, the wallet is granted a pass slot and an `x-credit-token` JWT is returned that authenticates subsequent WebSocket connections at `/ws` and `/stream`. Buying a pass while one is already active extends the expiry additively.","operationId":"Buy WS Hour Pass","parameters":[],"responses":{"200":{"description":"Pass granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WsPassResponseDto"}}}},"402":{"description":"Payment required (sign and retry with PAYMENT-SIGNATURE)"}},"summary":"Buy a 1-hour WebSocket streaming pass","tags":["x402"]}},"/api/v1/x402/ws-pass/day":{"post":{"description":"Purchase a 24-hour WebSocket streaming entitlement via x402 (USDC on Base mainnet). See `/x402/ws-pass/hour` for the auth flow; the only difference is the duration and the price.","operationId":"Buy WS Day Pass","parameters":[],"responses":{"200":{"description":"Pass granted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WsPassResponseDto"}}}},"402":{"description":"Payment required (sign and retry with PAYMENT-SIGNATURE)"}},"summary":"Buy a 24-hour WebSocket streaming pass","tags":["x402"]}},"/api/v1/x402/subscriptions/solana-rpc":{"post":{"operationId":"SubscriptionCommerceController_solanaRpc","parameters":[],"responses":{"201":{"description":""}},"summary":"Read-only USDC mint and blockhash data for browser wallet signing","tags":["x402 subscriptions"]}},"/api/v1/x402/subscriptions/products":{"get":{"description":"Live plan pricing for monthly, quarterly, six-month and annual terms. Pay USDC on Base or Solana. Create an account-bound quote through the authenticated dashboard backend first.","operationId":"SubscriptionCommerceController_products","parameters":[],"responses":{"200":{"description":""}},"summary":"Premium and Enterprise prepaid subscription products","tags":["x402 subscriptions"]}},"/api/v1/x402/subscriptions/checkouts/{id}":{"get":{"operationId":"SubscriptionCommerceController_status","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-checkout-token","required":true,"in":"header","schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["x402 subscriptions"]}},"/api/v1/x402/subscriptions/checkouts/{id}/pay":{"post":{"description":"A request without PAYMENT-SIGNATURE returns an x402 v2 402 quote. Sign one accepted USDC network and retry. Pending or completed checkouts never charge again; poll the status URL after an interrupted response.","operationId":"SubscriptionCommerceController_pay","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-checkout-token","required":true,"in":"header","schema":{"type":"string"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription active with payment receipt"},"202":{"description":"Payment confirmation or activation pending; do not pay again"},"402":{"description":"x402 USDC quote on Base and Solana"}},"summary":"Pay a quoted subscription using x402","tags":["x402 subscriptions"]}},"/api/v1/x402/tick-data/solana-rpc":{"post":{"operationId":"TickDataCommerceController_solanaRpc","parameters":[],"responses":{"201":{"description":""}},"summary":"Read-only USDC mint and blockhash data for browser wallet signing","tags":["x402 tick data"]}},"/api/v1/x402/tick-data/products":{"get":{"description":"Dataset prices depend on files, exchanges and date ranges. Create a quote and account-bound data order before signing a USDC payment. Card checkout remains available.","operationId":"TickDataCommerceController_products","parameters":[],"responses":{"200":{"description":""}},"summary":"Tick-data checkout networks and quote instructions","tags":["x402 tick data"]}},"/api/v1/x402/tick-data/checkouts/{id}":{"get":{"operationId":"TickDataCommerceController_status","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-checkout-token","required":true,"in":"header","schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["x402 tick data"]}},"/api/v1/x402/tick-data/checkouts/{id}/pay":{"post":{"description":"A request without PAYMENT-SIGNATURE returns an x402 v2 402 quote. Sign one accepted USDC network and retry. Pending or completed checkouts never charge again; poll the status URL after an interrupted response.","operationId":"TickDataCommerceController_pay","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"x-checkout-token","required":true,"in":"header","schema":{"type":"string"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Data order funded with payment receipt"},"202":{"description":"Payment confirmation or order fulfillment pending; do not pay again"},"402":{"description":"x402 USDC quote on Base and Solana"}},"summary":"Pay a quoted tick-data order using x402","tags":["x402 tick data"]}},"/api/v1/x402/credit-token/challenge":{"post":{"description":"Step 1 of the credit token refresh for wallets that already hold prepaid credits. Returns a single-use CAIP-122 message (valid 5 minutes) for the wallet to sign. The signature authorizes no payment and cannot move funds. Returns 404 when credit bundles are not enabled.","operationId":"Request Credit Token Challenge","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTokenChallengeRequestDto"}}}},"responses":{"200":{"description":"Challenge issued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTokenChallengeResponseDto"}}}},"400":{"description":"Unsupported chain_id or invalid address","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTokenErrorDto"}}}},"404":{"description":"Credit bundles are not enabled"},"429":{"description":"Rate limit exceeded (10 per minute per client)"},"503":{"description":"Challenge store unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTokenErrorDto"}}}}},"summary":"Get a Sign-In-With-X message to refresh an x402 credit token","tags":["x402"]}},"/api/v1/x402/credit-token":{"post":{"description":"Step 2: send the challenge `info` fields plus `address`, `chainId`, `type` and the wallet `signature` (hex for EVM, base58 for Solana). Proves wallet ownership only: the signature authorizes no payment and no credit is spent. The token is also returned in the `x-credit-token` header, with the balance in `x-credits-remaining`. Returns 404 when credit bundles are not enabled.","operationId":"Refresh Credit Token","parameters":[],"responses":{"200":{"description":"Fresh credit token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTokenResponseDto"}}}},"400":{"description":"Malformed payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTokenErrorDto"}}}},"401":{"description":"Proof rejected: invalid_siwx, nonce_invalid, expired or invalid_signature","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTokenErrorDto"}}}},"402":{"description":"no_credits: the wallet has no prepaid credits","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTokenErrorDto"}}}},"404":{"description":"Credit bundles are not enabled"},"429":{"description":"Rate limit exceeded (10 per minute per client)"},"503":{"description":"Challenge store unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditTokenErrorDto"}}}}},"summary":"Redeem a signed challenge for a fresh x402 credit token","tags":["x402"]}},"/api/v1/options/catalog":{"get":{"description":"Recently observed, unexpired option instruments, using exchange-published expiry timestamps where available and otherwise latest observed DTE advanced to the request time. Not an all-history instrument catalog. Absence of an expired contract does not establish absence of its history.\n\nCurrent discovery, not a historical listed/open-for-trading timeline.\n\nInstrument inventory, not a time series.\n\nFilter currency, maturity, option_type and strike range; follow the catalog pagination cursor.\n\nRecently observed and unexpired, not certified historical trading eligibility.\n\nUse historical snapshot membership and selector-scoped data coverage, not the earliest expiry in this current catalog, to investigate history.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.catalog. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options Catalog","parameters":[{"name":"exchange","required":false,"in":"query","description":"Options exchange. Paradex uses exchange-native symbols such as BTC-USD-30OCT26-81000-C.","schema":{"example":"paradex","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"]}},{"name":"currency","required":false,"in":"query","description":"Filter by base currency (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"maturity","required":false,"in":"query","description":"Filter by maturity/expiry date (e.g., 23OCT26, 27JUN25)","schema":{"example":"23OCT26","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of instruments to return (1-1000)","schema":{"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from a previous response","schema":{"type":"string"}},{"name":"option_type","required":false,"in":"query","description":"Filter by option type: C (Call) or P (Put)","schema":{"example":"C","type":"string","enum":["C","P"]}},{"name":"strike_min","required":false,"in":"query","description":"Minimum strike price","schema":{"example":50000,"type":"number"}},{"name":"strike_max","required":false,"in":"query","description":"Maximum strike price","schema":{"example":100000,"type":"number"}}],"responses":{"200":{"content":{"application/json":{"example":[{"instrument_name":"AVAX_USDC-22NOV25-12-C","exchange":"deribit"},{"instrument_name":"AVAX_USDC-22NOV25-12-P","exchange":"deribit"},{"instrument_name":"AVAX_USDC-22NOV25-12d4-C","exchange":"deribit"}]}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Catalog","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"paradex","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"],"description":"Options exchange. Paradex uses exchange-native symbols such as BTC-USD-30OCT26-81000-C."},"currency":{"example":"BTC","type":"string","description":"Filter by base currency (e.g., BTC, ETH, SOL)"},"maturity":{"example":"23OCT26","type":"string","description":"Filter by maturity/expiry date (e.g., 23OCT26, 27JUN25)"},"limit":{"default":100,"example":100,"type":"number","description":"Maximum number of instruments to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor from a previous response"},"option_type":{"example":"C","type":"string","enum":["C","P"],"description":"Filter by option type: C (Call) or P (Put)"},"strike_min":{"example":50000,"type":"number","description":"Minimum strike price"},"strike_max":{"example":100000,"type":"number","description":"Maximum strike price"}}}}}}}},"/api/v1/options/metadata":{"get":{"description":"Returns metadata for a specific options instrument including data availability, total record count, and pagination information.","operationId":"Options Metadata","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name","schema":{"example":"deribit","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Number of records per page for pagination calculation","schema":{"minimum":1,"maximum":100,"default":100,"example":100,"type":"number"}},{"name":"instrument_name","required":true,"in":"query","description":"Instrument name","schema":{"example":"BTC-9OCT26-81000-P","type":"string"}}],"responses":{"200":{"description":"Metadata successfully retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataResponseEntity"}}}},"400":{"description":"Bad Request - Invalid parameters or no data found","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Metadata","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name"},"limit":{"minimum":1,"maximum":100,"default":100,"example":100,"type":"number","description":"Number of records per page for pagination calculation"},"instrument_name":{"example":"BTC-9OCT26-81000-P","type":"string","description":"Instrument name"}},"required":["exchange","instrument_name"]}}}}}},"/api/v1/options/ohlcvt":{"get":{"description":"Premium OHLC plus interval trade volume/counts. Trade candles include mark-filled minutes without executions. Coarser OHLC uses first open, maximum high, minimum low and last close. VWAP is traded-volume weighted; a zero-volume bucket uses the mean minute reference price. index_price is the spot index at the final observed candle minute, null when unavailable. No underlying_price or source label is served on this route.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour.\n\nPremium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.\n\nRetained source quantity units; the API does not apply an additional contract multiplier. Not USD notional or a universal one-contract-one-coin convention.\n\nExchange spot-index price, not the expiry-specific option underlying/forward reference.\n\nCount of retained trades, not ticker updates.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.ohlcvt. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options Market Data","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog.","schema":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"]}},{"name":"instrument_name","required":false,"in":"query","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes.","schema":{"example":"BTC-9OCT26-81000-P","type":"string"}}],"responses":{"200":{"description":"OHLCVT data successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsOhlcvtEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","open":0.2157,"high":0.2157,"low":0.2157,"close":0.2157,"vwap":0.2157,"volume":0,"buy_volume":0,"sell_volume":0,"trades_count":0,"buy_trades_count":0,"sell_trades_count":0,"liquidation_short_volume":null,"liquidation_long_volume":null,"block_trade_buy_volume":null,"block_trade_sell_volume":null,"mark_price":0.2157,"index_price":103722.83,"days_to_expiry":324.9166666666667},{"date":"2025-11-04 11:01:00","open":0.2154,"high":0.2154,"low":0.2154,"close":0.2154,"vwap":0.2154,"volume":0,"buy_volume":0,"sell_volume":0,"trades_count":0,"buy_trades_count":0,"sell_trades_count":0,"liquidation_short_volume":120,"liquidation_long_volume":280,"block_trade_buy_volume":null,"block_trade_sell_volume":null,"mark_price":0.2154,"index_price":103639.67,"days_to_expiry":324.91597222222225},{"date":"2025-11-04 11:02:00","open":0.2156,"high":0.2156,"low":0.2156,"close":0.2156,"vwap":0.2156,"volume":0,"buy_volume":0,"sell_volume":0,"trades_count":0,"buy_trades_count":0,"sell_trades_count":0,"liquidation_short_volume":null,"liquidation_long_volume":null,"block_trade_buy_volume":5000,"block_trade_sell_volume":3500,"mark_price":0.2156,"index_price":103695.66,"days_to_expiry":324.91527777777776}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options OHLC Market Data","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"],"description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog."},"instrument_name":{"example":"BTC-9OCT26-81000-P","type":"string","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes."}}}}}}}},"/api/v1/options/volume":{"get":{"description":"Combines latest ticker-reported rolling volume_24h/volume_usd_24h with interval buy_volume, sell_volume, volume and trade counts from retained trade/mark candles. The rolling fields are not computed by summing this request window; interval volume is buy_volume + sell_volume.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour.\n\nRetained source quantity units; the API does not apply an additional contract multiplier. Not USD notional or a universal one-contract-one-coin convention.\n\nRetained source quantity units; the API does not apply an additional contract multiplier. Not USD notional or a universal one-contract-one-coin convention.\n\nUSD rolling 24-hour volume.\n\nNumber of trades in the interval.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.volume. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options Volume Stats","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog.","schema":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"]}},{"name":"instrument_name","required":false,"in":"query","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes.","schema":{"example":"BTC-9OCT26-81000-P","type":"string"}}],"responses":{"200":{"description":"Successfully retrieved options volume data","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseVolumeDataEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","volume_24h":1.2,"volume_usd_24h":29521.78},{"date":"2025-11-04 11:01:00","volume_24h":1.2,"volume_usd_24h":29521.78},{"date":"2025-11-04 11:02:00","volume_24h":1.2,"volume_usd_24h":29521.78}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Volume Stats","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"],"description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog."},"instrument_name":{"example":"BTC-9OCT26-81000-P","type":"string","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes."}}}}}}}},"/api/v1/options/trades/summary":{"get":{"description":"Grouped statistics over matching trades, ordered by volume (underlying quantity), not USD premium. group_by selects exchange, instrument_name, strike, maturity, option_type, direction or strategy. A strike group can combine multiple expiries and calls/puts unless filtered; exchange is still a required selector, not an all-venue aggregation.\n\nEach group describes all matching executions in the requested inclusive time window; it is not a point-in-time state or a candle.\n\nOne row per requested grouping key across the entire window.\n\nAll filters apply before grouping and to metadata totals. Omitted start defaults to 24 hours before end; omitted end defaults to now, on both REST and MCP. Supply both bounds for comparisons. No pagination.\n\nUnderlying-coin quantity, not contract count or USD notional. Applies to option trade amount and its flow/summary sums; do not apply another contract multiplier.\n\npremium_usd is option premium value in USD; notional is underlying exposure in USD, not premium. Both are summed over matching trades, not rolling 24-hour ticker counters.\n\nnet_delta, net_gamma and net_vega sum trade position Greeks: each calculated Greek already includes the underlying-coin amount and buy (+1) or sell (-1) sign. Do not multiply by amount or direction again. The current calculation uses Black-Scholes with zero interest/dividend rates, the trade index-price reference, time to expiry on ACT/365, and positive mark IV with trade IV as the fallback. These are traded sensitivities, not outstanding positions or dealer GEX. Delta is underlying units, gamma is the change in delta per 1 USD underlying move, and vega is USD per one volatility percentage point. Missing pricing inputs can leave historical Greeks at zero; zero does not certify that every trade had a calculable Greek.\n\ndirection is buy or sell (taker side). This is not the numeric 0=buy / 1=sell convention of the separate /options/trade-history product.\n\nnet_oi_change sums trade-associated oi_change estimates in underlying units; it is not a measured change between two complete chain OI snapshots. Opening/closing counts are strategy classifications.\n\nMatching retained trades for one exchange and currency, after request filters. Older trade availability is selective; totals are not proof of complete exchange activity for that period.\n\nQuery /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selectors. Bounds do not certify every intermediate time or the completeness of every calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.trades_summary. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options Trades Summary","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 UTC. Defaults to now.","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., deribit)","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":true,"in":"query","description":"Base currency (e.g. BTC, ETH)","schema":{"example":"BTC","type":"string"}},{"name":"group_by","required":true,"in":"query","description":"Axis to group results by","schema":{"type":"string","enum":["exchange","instrument_name","strike","maturity","option_type","direction","strategy"]}},{"name":"min_premium_usd","required":false,"in":"query","description":"Minimum premium in USD. Filters dust trades.","schema":{"type":"number"}},{"name":"min_notional","required":false,"in":"query","description":"Minimum notional value in USD.","schema":{"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Filter by trade direction","schema":{"type":"string","enum":["buy","sell"]}},{"name":"block_only","required":false,"in":"query","description":"If true, only include block trades.","schema":{"default":false,"type":"boolean"}},{"name":"opening_only","required":false,"in":"query","description":"If true, only include opening trades (strategy starts with Opened).","schema":{"default":false,"type":"boolean"}},{"name":"option_type","required":false,"in":"query","description":"Filter by option type: C (call) or P (put)","schema":{"type":"string","enum":["C","P"]}},{"name":"maturity","required":false,"in":"query","description":"Filter by maturity date (e.g. 23OCT26)","schema":{"type":"string"}},{"name":"strategy","required":false,"in":"query","description":"Filter by strategy label. Accepts comma-separated values.","schema":{"type":"string","enum":["BEAR_CALL_SPREAD","BEAR_DIAGONAL_SPREAD (Calls)","BEAR_DIAGONAL_SPREAD (Puts)","BEAR_PUT_SPREAD","BULL_CALL_SPREAD","BULL_DIAGONAL_SPREAD (Calls)","BULL_DIAGONAL_SPREAD (Puts)","BULL_PUT_SPREAD","CALL_CALENDAR","CALL_ROLL_BACK/DOWN","CALL_ROLL_FORWARD/DOWN","CALL_ROLL_FORWARD/UP","COLLAR_WITH_FUTURE","COMBO_CALL_CALENDAR","COMBO_CALL_CONDOR","COMBO_CALL_DIAGONAL","COMBO_CALL_LADDER","COMBO_CALL_RATIO_SPREAD_1X2","COMBO_CALL_RATIO_SPREAD_2X3","COMBO_CALL_SPREAD","COMBO_IRON_BUTTERFLY","COMBO_IRON_CONDOR","COMBO_PUT_CALENDAR","COMBO_PUT_CONDOR","COMBO_PUT_DIAGONAL","COMBO_PUT_RATIO_SPREAD_1X2","COMBO_PUT_RATIO_SPREAD_2X3","COMBO_PUT_SPREAD","COMBO_RISK_REVERSAL","COMBO_STRADDLE","COMBO_STRANGLE","COVERED_CALL_WITH_FUTURE","CUSTOM_STRATEGY","Close_PUT/Open_CALL","Closed BEAR_PUT_SPREAD","Closed BULL_CALL_SPREAD","Closed BULL_DIAGONAL_SPREAD (Calls)","Closed CALL_CALENDAR","Closed COMBO_CALL_DIAGONAL","Closed COMBO_CALL_SPREAD","Closed COMBO_PUT_SPREAD","Closed COMBO_STRANGLE","Closed LONG_CALL","Closed LONG_PUT","Closed SHORT_CALL","Closed SHORT_COVERED_CALL_WITH_FUTURE","Closed SHORT_PROTECTIVE_PUT_WITH_FUTURE","Closed SHORT_PUT","Closed SHORT_STRADDLE","HEDGED_OPTIONS_STRATEGY","LONG_CALL","LONG_CALL_BUTTERFLY","LONG_CALL_CONDOR","LONG_CALL_LADDER","LONG_IRON_CONDOR","LONG_PUT","LONG_PUT_BUTTERFLY","LONG_RATIO_CALL_SPREAD","LONG_RATIO_PUT_SPREAD","LONG_RISK_REVERSAL","LONG_STRADDLE","LONG_STRANGLE","Opened BEAR_CALL_SPREAD","Opened BEAR_DIAGONAL_SPREAD (Calls)","Opened BEAR_DIAGONAL_SPREAD (Puts)","Opened BEAR_PUT_SPREAD","Opened BULL_CALL_SPREAD","Opened BULL_DIAGONAL_SPREAD (Calls)","Opened BULL_DIAGONAL_SPREAD (Puts)","Opened BULL_PUT_SPREAD","Opened CALL_CALENDAR","Opened COMBO_CALL_CALENDAR","Opened COMBO_CALL_DIAGONAL","Opened COMBO_CALL_RATIO_SPREAD_2X3","Opened COMBO_CALL_SPREAD","Opened COMBO_IRON_BUTTERFLY","Opened COMBO_IRON_CONDOR","Opened COMBO_PUT_CALENDAR","Opened COMBO_PUT_DIAGONAL","Opened COMBO_PUT_SPREAD","Opened COMBO_RISK_REVERSAL","Opened COMBO_STRADDLE","Opened COMBO_STRANGLE","Opened CUSTOM_STRATEGY","Opened HEDGED_OPTIONS_STRATEGY","Opened LONG_CALL","Opened LONG_CALL_BUTTERFLY","Opened LONG_CALL_LADDER","Opened LONG_IRON_CONDOR","Opened LONG_PUT","Opened LONG_PUT_BUTTERFLY","Opened LONG_RATIO_PUT_SPREAD","Opened LONG_STRADDLE","Opened LONG_STRANGLE","Opened PROTECTIVE_PUT_WITH_FUTURE","Opened PUT_CALENDAR","Opened REVERSE_CALL_CALENDAR","Opened REVERSE_PUT_CALENDAR","Opened SHORT_CALL","Opened SHORT_COVERED_CALL_WITH_FUTURE","Opened SHORT_PROTECTIVE_PUT_WITH_FUTURE","Opened SHORT_PUT","Opened SHORT_RATIO_CALL_SPREAD","Opened SHORT_RISK_REVERSAL","Opened SHORT_STRADDLE","Opened SHORT_STRANGLE","PROTECTIVE_PUT_WITH_FUTURE","PUT_CALENDAR","PUT_ROLL_BACK/DOWN","PUT_ROLL_BACK/UP","PUT_ROLL_FORWARD/DOWN","PUT_ROLL_FORWARD/UP","REVERSE_CALL_CALENDAR","REVERSE_PUT_CALENDAR","ROLL_BACK","ROLL_DOWN","ROLL_FORWARD","ROLL_UP","SHORT_CALL","SHORT_CALL_BUTTERFLY","SHORT_CALL_CONDOR","SHORT_COLLAR_WITH_FUTURE","SHORT_COVERED_CALL_WITH_FUTURE","SHORT_IRON_CONDOR","SHORT_PROTECTIVE_PUT_WITH_FUTURE","SHORT_PUT","SHORT_PUT_BUTTERFLY","SHORT_PUT_CONDOR","SHORT_PUT_LADDER","SHORT_RATIO_CALL_SPREAD","SHORT_RATIO_PUT_SPREAD","SHORT_RISK_REVERSAL","SHORT_STRADDLE","SHORT_STRANGLE"]}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"group_key":"100000","trade_count":85,"volume":500.2,"buy_volume":300.1,"sell_volume":200.1,"premium_usd":1250000,"buy_premium_usd":750000,"sell_premium_usd":500000,"notional":47500000,"net_oi_change":120.5,"net_delta":45.2,"net_gamma":0.003,"net_vega":12500,"block_trade_count":3}],"metadata":{"group_by":"strike","total_trades":85,"total_volume":500.2}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Trades Summary","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 UTC. Defaults to now."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH)"},"group_by":{"type":"string","enum":["exchange","instrument_name","strike","maturity","option_type","direction","strategy"],"description":"Axis to group results by"},"min_premium_usd":{"type":"number","description":"Minimum premium in USD. Filters dust trades."},"min_notional":{"type":"number","description":"Minimum notional value in USD."},"direction":{"type":"string","enum":["buy","sell"],"description":"Filter by trade direction"},"block_only":{"default":false,"type":"boolean","description":"If true, only include block trades."},"opening_only":{"default":false,"type":"boolean","description":"If true, only include opening trades (strategy starts with Opened)."},"option_type":{"type":"string","enum":["C","P"],"description":"Filter by option type: C (call) or P (put)"},"maturity":{"type":"string","description":"Filter by maturity date (e.g. 23OCT26)"},"strategy":{"type":"string","description":"Filter by strategy label. Accepts comma-separated values."}},"required":["exchange","currency","group_by"]}}}}}},"/api/v1/options/trades":{"get":{"description":"Individual retained executed-trade records with trade_id, price, amount and direction, plus available enrichments. Not mark-filled bars. Quote/Greek enrichments are not themselves executions or a synchronized full-order-book replay. Supports instrument or currency selection; follow next_cursor unless using top_n.\n\nStored trade event timestamp, not Laevitas ingestion or publication time.\n\nIndividual events; no candle resolution.\n\nInclusive event-time start/end bounds; use the returned cursor to paginate without losing same-timestamp trades.\n\nPremium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.\n\nUnderlying-coin quantity, not contract count or USD notional. Applies to option trade amount and its flow/summary sums; do not apply another contract multiplier.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.trades. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.\n\nReturns options trades with full trade details and Greeks. Supports two modes: (1) instrument mode — provide instrument_name for a single option, (2) currency mode — provide currency (e.g. BTC) for ALL options trades across all instruments. Optional settlement_currency and margin_type filters separate inverse and linear contract books. Additional filters: min_premium_usd, min_notional, direction, strategy, block_only, opening_only, option_type, maturity, sort, sort_dir.","operationId":"Options Trade History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction. Defaults to DESC for currency-level queries (newest/largest first), ASC for instrument-level queries.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full options instrument identifier (e.g., BTC-9OCT26-81000-P). Either instrument_name or currency is required.","schema":{"example":"BTC-9OCT26-81000-P","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL instruments for this currency. Either currency or instrument_name is required.","schema":{"example":"BTC","type":"string"}},{"name":"settlement_currency","required":false,"in":"query","description":"Settlement-currency filter (for example BTC for inverse Deribit options or USDC for linear Deribit options). Requires exchange.","schema":{"example":"BTC","type":"string"}},{"name":"margin_type","required":false,"in":"query","description":"Contract margin convention. Use inverse or linear to keep differently quoted option books separate.","schema":{"example":"inverse","type":"string","enum":["inverse","linear"]}},{"name":"min_premium_usd","required":false,"in":"query","description":"Minimum premium in USD. Filters out dust trades.","schema":{"example":1000,"type":"number"}},{"name":"min_notional","required":false,"in":"query","description":"Minimum notional value in USD.","schema":{"example":10000,"type":"number"}},{"name":"direction","required":false,"in":"query","description":"Filter by trade direction (aggressor side)","schema":{"type":"string","enum":["buy","sell"]}},{"name":"strategy","required":false,"in":"query","description":"Filter by strategy label. Accepts comma-separated values (e.g. SHORT_CALL,LONG_PUT).","schema":{"type":"string","enum":["BEAR_CALL_SPREAD","BEAR_DIAGONAL_SPREAD (Calls)","BEAR_DIAGONAL_SPREAD (Puts)","BEAR_PUT_SPREAD","BULL_CALL_SPREAD","BULL_DIAGONAL_SPREAD (Calls)","BULL_DIAGONAL_SPREAD (Puts)","BULL_PUT_SPREAD","CALL_CALENDAR","CALL_ROLL_BACK/DOWN","CALL_ROLL_FORWARD/DOWN","CALL_ROLL_FORWARD/UP","COLLAR_WITH_FUTURE","COMBO_CALL_CALENDAR","COMBO_CALL_CONDOR","COMBO_CALL_DIAGONAL","COMBO_CALL_LADDER","COMBO_CALL_RATIO_SPREAD_1X2","COMBO_CALL_RATIO_SPREAD_2X3","COMBO_CALL_SPREAD","COMBO_IRON_BUTTERFLY","COMBO_IRON_CONDOR","COMBO_PUT_CALENDAR","COMBO_PUT_CONDOR","COMBO_PUT_DIAGONAL","COMBO_PUT_RATIO_SPREAD_1X2","COMBO_PUT_RATIO_SPREAD_2X3","COMBO_PUT_SPREAD","COMBO_RISK_REVERSAL","COMBO_STRADDLE","COMBO_STRANGLE","COVERED_CALL_WITH_FUTURE","CUSTOM_STRATEGY","Close_PUT/Open_CALL","Closed BEAR_PUT_SPREAD","Closed BULL_CALL_SPREAD","Closed BULL_DIAGONAL_SPREAD (Calls)","Closed CALL_CALENDAR","Closed COMBO_CALL_DIAGONAL","Closed COMBO_CALL_SPREAD","Closed COMBO_PUT_SPREAD","Closed COMBO_STRANGLE","Closed LONG_CALL","Closed LONG_PUT","Closed SHORT_CALL","Closed SHORT_COVERED_CALL_WITH_FUTURE","Closed SHORT_PROTECTIVE_PUT_WITH_FUTURE","Closed SHORT_PUT","Closed SHORT_STRADDLE","HEDGED_OPTIONS_STRATEGY","LONG_CALL","LONG_CALL_BUTTERFLY","LONG_CALL_CONDOR","LONG_CALL_LADDER","LONG_IRON_CONDOR","LONG_PUT","LONG_PUT_BUTTERFLY","LONG_RATIO_CALL_SPREAD","LONG_RATIO_PUT_SPREAD","LONG_RISK_REVERSAL","LONG_STRADDLE","LONG_STRANGLE","Opened BEAR_CALL_SPREAD","Opened BEAR_DIAGONAL_SPREAD (Calls)","Opened BEAR_DIAGONAL_SPREAD (Puts)","Opened BEAR_PUT_SPREAD","Opened BULL_CALL_SPREAD","Opened BULL_DIAGONAL_SPREAD (Calls)","Opened BULL_DIAGONAL_SPREAD (Puts)","Opened BULL_PUT_SPREAD","Opened CALL_CALENDAR","Opened COMBO_CALL_CALENDAR","Opened COMBO_CALL_DIAGONAL","Opened COMBO_CALL_RATIO_SPREAD_2X3","Opened COMBO_CALL_SPREAD","Opened COMBO_IRON_BUTTERFLY","Opened COMBO_IRON_CONDOR","Opened COMBO_PUT_CALENDAR","Opened COMBO_PUT_DIAGONAL","Opened COMBO_PUT_SPREAD","Opened COMBO_RISK_REVERSAL","Opened COMBO_STRADDLE","Opened COMBO_STRANGLE","Opened CUSTOM_STRATEGY","Opened HEDGED_OPTIONS_STRATEGY","Opened LONG_CALL","Opened LONG_CALL_BUTTERFLY","Opened LONG_CALL_LADDER","Opened LONG_IRON_CONDOR","Opened LONG_PUT","Opened LONG_PUT_BUTTERFLY","Opened LONG_RATIO_PUT_SPREAD","Opened LONG_STRADDLE","Opened LONG_STRANGLE","Opened PROTECTIVE_PUT_WITH_FUTURE","Opened PUT_CALENDAR","Opened REVERSE_CALL_CALENDAR","Opened REVERSE_PUT_CALENDAR","Opened SHORT_CALL","Opened SHORT_COVERED_CALL_WITH_FUTURE","Opened SHORT_PROTECTIVE_PUT_WITH_FUTURE","Opened SHORT_PUT","Opened SHORT_RATIO_CALL_SPREAD","Opened SHORT_RISK_REVERSAL","Opened SHORT_STRADDLE","Opened SHORT_STRANGLE","PROTECTIVE_PUT_WITH_FUTURE","PUT_CALENDAR","PUT_ROLL_BACK/DOWN","PUT_ROLL_BACK/UP","PUT_ROLL_FORWARD/DOWN","PUT_ROLL_FORWARD/UP","REVERSE_CALL_CALENDAR","REVERSE_PUT_CALENDAR","ROLL_BACK","ROLL_DOWN","ROLL_FORWARD","ROLL_UP","SHORT_CALL","SHORT_CALL_BUTTERFLY","SHORT_CALL_CONDOR","SHORT_COLLAR_WITH_FUTURE","SHORT_COVERED_CALL_WITH_FUTURE","SHORT_IRON_CONDOR","SHORT_PROTECTIVE_PUT_WITH_FUTURE","SHORT_PUT","SHORT_PUT_BUTTERFLY","SHORT_PUT_CONDOR","SHORT_PUT_LADDER","SHORT_RATIO_CALL_SPREAD","SHORT_RATIO_PUT_SPREAD","SHORT_RISK_REVERSAL","SHORT_STRADDLE","SHORT_STRANGLE"]}},{"name":"block_only","required":false,"in":"query","description":"If true, only return trades with a block_trade_id (block trades).","schema":{"default":false,"type":"boolean"}},{"name":"opening_only","required":false,"in":"query","description":"If true, only return trades where strategy starts with \"Opened\" (new positions).","schema":{"default":false,"type":"boolean"}},{"name":"option_type","required":false,"in":"query","description":"Filter by option type: C (call) or P (put)","schema":{"type":"string","enum":["C","P"]}},{"name":"maturity","required":false,"in":"query","description":"Filter by maturity date (e.g. 23OCT26)","schema":{"example":"23OCT26","type":"string"}},{"name":"sort","required":false,"in":"query","description":"Sort field. Default: timestamp.","schema":{"default":"timestamp","type":"string","enum":["timestamp","premium_usd","notional","amount"]}},{"name":"top_n","required":false,"in":"query","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned.","schema":{"example":20,"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsTradeEntity"}}}}]},"example":{"data":[{"instrument_name":"BTC-25SEP26-100000-C","timestamp":1759220633312,"trade_id":"387076415","date":"2025-10-11 12:45:49","block_trade_id":"","combo_id":"","combo_trade_id":"","strategy":"Opened SHORT_CALL","direction":"sell","tick_direction":1,"amount":0.1,"price":0.267,"index_price":113610.41,"oi_change":0.1,"open_interest":0.1,"oi_before":null,"maturity":"25SEP26","days_to_expiry":359.9834,"iv":44.95,"mark_price":0.2669,"ask_price":0.269,"bid_price":0.267,"ask_size":2.8,"bid_size":9.7,"bid_iv_change":0,"ask_iv_change":0,"bid_price_change":-0.002,"ask_price_change":0,"bid_size_change":0,"ask_size_change":0,"premium":0.0267,"premium_usd":3033.4,"notional":11361.04,"delta":-0.0694643,"gamma":-6.9e-7,"vega":-39.54125,"theta":2.468719,"strike":100000,"option_type":"C"},{"instrument_name":"BTC-25SEP26-100000-C","timestamp":1760189549998,"date":"2025-10-11 12:45:49","trade_id":"390187993","block_trade_id":"","combo_id":"","combo_trade_id":"","strategy":"Opened SHORT_CALL","direction":"sell","tick_direction":2,"amount":0.1,"price":0.261,"index_price":112021.37,"oi_change":0.1,"open_interest":0.2,"oi_before":0.1,"maturity":"25SEP26","days_to_expiry":348.7691,"iv":46.9,"mark_price":0.2604,"ask_price":0.2675,"bid_price":0.261,"ask_size":27.1,"bid_size":18.1,"bid_iv_change":0,"ask_iv_change":0,"bid_price_change":-0.0035,"ask_price_change":0,"bid_size_change":0,"ask_size_change":0,"premium":0.0261,"premium_usd":2923.76,"notional":11202.14,"delta":-0.0683262,"gamma":-7e-7,"vega":-38.99059,"theta":2.621582,"strike":100000,"option_type":"C"},{"instrument_name":"BTC-25SEP26-100000-C","timestamp":1760461299893,"trade_id":"391006860","date":"2025-10-11 12:45:49","block_trade_id":"","combo_id":"","combo_trade_id":"","strategy":"Opened SHORT_CALL","direction":"sell","tick_direction":2,"amount":0.1,"price":0.2595,"index_price":111949.78,"oi_change":0.1,"open_interest":0.3,"oi_before":0.2,"maturity":"25SEP26","days_to_expiry":345.6238,"iv":47.14,"mark_price":0.2587,"ask_price":0.261,"bid_price":0.2595,"ask_size":2.2,"bid_size":2.2,"bid_iv_change":0,"ask_iv_change":0,"bid_price_change":-0.0035,"ask_price_change":0,"bid_size_change":0,"ask_size_change":0,"premium":0.026,"premium_usd":2905.1,"notional":11194.98,"delta":-0.0682762,"gamma":-7e-7,"vega":-38.81525,"theta":2.647056,"strike":100000,"option_type":"C"}],"meta":{"next_cursor":"eyJ0aW1lc3RhbXAiOjE3NjM0Mzk0NTc1NTksInRyYWRlX2lkIjoiMzk4OTU3NDk3In0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Trade History","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction. Defaults to DESC for currency-level queries (newest/largest first), ASC for instrument-level queries."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance)"},"instrument_name":{"example":"BTC-9OCT26-81000-P","type":"string","description":"Full options instrument identifier (e.g., BTC-9OCT26-81000-P). Either instrument_name or currency is required."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL instruments for this currency. Either currency or instrument_name is required."},"settlement_currency":{"example":"BTC","type":"string","description":"Settlement-currency filter (for example BTC for inverse Deribit options or USDC for linear Deribit options). Requires exchange."},"margin_type":{"example":"inverse","type":"string","enum":["inverse","linear"],"description":"Contract margin convention. Use inverse or linear to keep differently quoted option books separate."},"min_premium_usd":{"example":1000,"type":"number","description":"Minimum premium in USD. Filters out dust trades."},"min_notional":{"example":10000,"type":"number","description":"Minimum notional value in USD."},"direction":{"type":"string","enum":["buy","sell"],"description":"Filter by trade direction (aggressor side)"},"strategy":{"example":"","type":"string","description":"Filter by strategy label. Accepts comma-separated values (e.g. SHORT_CALL,LONG_PUT)."},"block_only":{"default":false,"type":"boolean","description":"If true, only return trades with a block_trade_id (block trades)."},"opening_only":{"default":false,"type":"boolean","description":"If true, only return trades where strategy starts with \"Opened\" (new positions)."},"option_type":{"type":"string","enum":["C","P"],"description":"Filter by option type: C (call) or P (put)"},"maturity":{"example":"23OCT26","type":"string","description":"Filter by maturity date (e.g. 23OCT26)"},"sort":{"default":"timestamp","type":"string","enum":["timestamp","premium_usd","notional","amount"],"description":"Sort field. Default: timestamp."},"top_n":{"example":20,"type":"number","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned."}}}}}}}},"/api/v1/options/flow":{"get":{"description":"Trade-flow summary, time buckets and notable trades for a selected window. most_active_strikes contains the top 10 instruments by summed premium, not strike-only groups. top_n controls notable_trades only. avg_iv is a trade-count mean; avg_abs_delta is the mean absolute trade position delta, already size-weighted, not mean unit-option delta.\n\nBucket date is the UTC interval start; trades later in that interval contribute. Notable-trade timestamp is the execution time, not first availability. The summary covers the request window.\n\nSummary spans the whole window; resolution (default 1h) controls only the trade buckets.\n\nInclusive trade-time start/end and optional min_premium_usd apply to all components. Omitted start defaults to 24 hours before end; omitted end defaults to now, on both REST and MCP. Supply both bounds explicitly when comparing. No pagination; top_n controls only notable trades.\n\nUnderlying-coin quantity, not contract count or USD notional. Applies to option trade amount and its flow/summary sums; do not apply another contract multiplier.\n\npremium_usd is option premium value in USD; notional is underlying exposure in USD, not premium. Both are summed over matching trades, not rolling 24-hour ticker counters.\n\nnet_delta, net_gamma and net_vega sum trade position Greeks: each calculated Greek already includes the underlying-coin amount and buy (+1) or sell (-1) sign. Do not multiply by amount or direction again. The current calculation uses Black-Scholes with zero interest/dividend rates, the trade index-price reference, time to expiry on ACT/365, and positive mark IV with trade IV as the fallback. These are traded sensitivities, not outstanding positions or dealer GEX. Delta is underlying units, gamma is the change in delta per 1 USD underlying move, and vega is USD per one volatility percentage point. Missing pricing inputs can leave historical Greeks at zero; zero does not certify that every trade had a calculable Greek.\n\ndirection is buy or sell (taker side). This is not the numeric 0=buy / 1=sell convention of the separate /options/trade-history product.\n\nnet_oi_change sums trade-associated oi_change estimates in underlying units; it is not a measured change between two complete chain OI snapshots. Opening/closing counts are strategy classifications.\n\nMatching retained trades for one exchange and currency, after request filters. Older trade availability is selective; totals are not proof of complete exchange activity for that period.\n\nQuery /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selectors. Bounds do not certify every intermediate time or the completeness of every calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.flow. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options Flow Summary","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 UTC. Defaults to now.","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., deribit)","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":true,"in":"query","description":"Base currency (e.g. BTC, ETH). Required.","schema":{"example":"BTC","type":"string"}},{"name":"resolution","required":false,"in":"query","description":"Time bucket resolution for aggregation.","schema":{"default":"1h","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"min_premium_usd","required":false,"in":"query","description":"Minimum premium_usd per trade to include in aggregation. Filters dust before aggregating.","schema":{"example":1000,"type":"number"}},{"name":"top_n","required":false,"in":"query","description":"Number of notable trades to return (most_active_strikes always returns top 10). Default 10.","schema":{"default":10,"example":10,"type":"number"}}],"responses":{"200":{"description":"Flow summary successfully retrieved","content":{"application/json":{"schema":{"properties":{"summary":{"$ref":"#/components/schemas/OptionsFlowSummaryEntity"},"buckets":{"type":"array","items":{"$ref":"#/components/schemas/OptionsFlowBucketEntity"}},"notable_trades":{"type":"array","items":{"$ref":"#/components/schemas/OptionsTradeEntity"}}}},"example":{"summary":{"start":"2026-03-11T10:00:00.000Z","end":"2026-03-18T10:00:00.000Z","resolution":"1h","total_trades":17473,"total_premium_usd":313090175.66,"total_notional_usd":10663319458.94,"call_premium_usd":178403755.18,"put_premium_usd":134686420.48,"buy_premium_usd":166205839.48,"sell_premium_usd":146884336.18,"net_delta":2409.04,"net_gamma":0.24,"net_vega":413362.73,"opening_trades":3144,"closing_trades":887,"net_oi_change":46885.23,"block_trade_count":1223,"block_trade_premium_usd":190954915.46,"most_active_strikes":[{"instrument_name":"BTC-25SEP26-70000-C","trade_count":78,"premium_usd":14778377.67,"net_oi_change":913.8},{"instrument_name":"BTC-25SEP26-70000-P","trade_count":27,"premium_usd":8580802.91,"net_oi_change":862.4},{"instrument_name":"BTC-26JUN26-95000-P","trade_count":3,"premium_usd":8027375.24,"net_oi_change":0}]},"buckets":[{"date":"2026-03-11T10:00:00.000Z","trade_count":142,"buy_count":78,"sell_count":64,"total_amount":1250.5,"buy_amount":680.2,"sell_amount":570.3,"total_premium_usd":2450312.45,"buy_premium_usd":1320150.22,"sell_premium_usd":1130162.23,"total_notional":85230100.5,"buy_notional":46120050.3,"sell_notional":39110050.2,"call_premium_usd":1420180.3,"put_premium_usd":1030132.15,"call_count":82,"put_count":60,"block_trade_count":8,"block_premium_usd":1520200.4,"net_oi_change":320.5,"avg_iv":52.34,"avg_abs_delta":0.45},{"date":"2026-03-11T11:00:00.000Z","trade_count":98,"buy_count":52,"sell_count":46,"total_amount":890.3,"buy_amount":470.1,"sell_amount":420.2,"total_premium_usd":1780245.12,"buy_premium_usd":950130.45,"sell_premium_usd":830114.67,"total_notional":62150080.3,"buy_notional":33080040.1,"sell_notional":29070040.2,"call_premium_usd":1020140.2,"put_premium_usd":760104.92,"call_count":55,"put_count":43,"block_trade_count":5,"block_premium_usd":980130.2,"net_oi_change":180.2,"avg_iv":51.87,"avg_abs_delta":0.43}],"notable_trades":[{"instrument_name":"BTC-26JUN26-95000-P","timestamp":1773269099057,"trade_id":"412345678","block_trade_id":"BLK-12345","combo_id":"","strategy":"Opened LONG_PUT","date":"2026-03-11 14:30:00","currency":"BTC","maturity":"26JUN26","days_to_expiry":107.4,"strike":95000,"option_type":"P","direction":"buy","amount":50,"price":0.0312,"iv":58.2,"index_price":84500.12,"mark_price":0.031,"premium_usd":8027375.24,"notional":4225006,"delta":-0.3512,"gamma":0.000008,"vega":142.35,"theta":-18.42,"oi_change":50,"open_interest":250}]}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Flow Summary","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 UTC. Defaults to now."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH). Required."},"resolution":{"default":"1h","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time bucket resolution for aggregation."},"min_premium_usd":{"example":1000,"type":"number","description":"Minimum premium_usd per trade to include in aggregation. Filters dust before aggregating."},"top_n":{"default":10,"example":10,"type":"number","description":"Number of notable trades to return (most_active_strikes always returns top 10). Default 10."}},"required":["exchange","currency"]}}}}}},"/api/v1/options/open-interest":{"get":{"description":"Instrument oi_open, oi_high, oi_low and oi_close across the interval. Outstanding position quantity, not traded volume or the sum of minute OI.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour.\n\nRetained source quantity units; the API does not apply an additional contract multiplier. Not USD notional or a universal one-contract-one-coin convention.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.open_interest. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options Open Interest","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog.","schema":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"]}},{"name":"instrument_name","required":false,"in":"query","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes.","schema":{"example":"BTC-9OCT26-81000-P","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseOpenInterestEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","oi_open":2.6,"oi_high":2.6,"oi_low":2.6,"oi_close":2.6},{"date":"2025-11-04 11:01:00","oi_open":2.6,"oi_high":2.6,"oi_low":2.6,"oi_close":2.6},{"date":"2025-11-04 11:02:00","oi_open":2.6,"oi_high":2.6,"oi_low":2.6,"oi_close":2.6}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Open Interest","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"],"description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog."},"instrument_name":{"example":"BTC-9OCT26-81000-P","type":"string","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes."}}}}}}}},"/api/v1/options/level1":{"get":{"description":"Best bid/ask price and displayed-size OHLC, size/spread averages and related L1 summaries from minute ticker buckets. Not full book depth, order IDs, queue priority or an executable quote-update replay. Historical displayed size does not guarantee a fill.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour.\n\nPremium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.\n\nRetained source quantity units; the API does not apply an additional contract multiplier. Not USD notional or a universal one-contract-one-coin convention.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.level1. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options Level 1","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog.","schema":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"]}},{"name":"instrument_name","required":false,"in":"query","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes.","schema":{"example":"BTC-9OCT26-81000-P","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array"}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","bid_price_open":0.212,"bid_price_high":0.212,"bid_price_low":0.2115,"bid_price_close":0.2115,"ask_price_open":0.2195,"ask_price_high":0.22,"ask_price_low":0.2195,"ask_price_close":0.22,"bid_size_open":19.3,"bid_size_high":19.3,"bid_size_low":19.3,"bid_size_close":19.3,"ask_size_open":19.4,"ask_size_high":31.3,"ask_size_low":12,"ask_size_close":31.3,"bid_ask_spread_open":0.007500000000000007,"bid_ask_spread_high":0.008500000000000008,"bid_ask_spread_low":0.007500000000000007,"bid_ask_spread_close":0.008500000000000008,"total_liquidity_open":38.7,"total_liquidity_high":50.6,"total_liquidity_low":31.3,"total_liquidity_close":50.6,"total_liquidity_avg":43.16666666666667},{"date":"2025-11-04 11:01:00","bid_price_open":0.2115,"bid_price_high":0.2115,"bid_price_low":0.2115,"bid_price_close":0.2115,"ask_price_open":0.22,"ask_price_high":0.22,"ask_price_low":0.22,"ask_price_close":0.22,"bid_size_open":19.3,"bid_size_high":19.3,"bid_size_low":19.3,"bid_size_close":19.3,"ask_size_open":31.3,"ask_size_high":31.3,"ask_size_low":31.3,"ask_size_close":31.3,"bid_ask_spread_open":0.008500000000000008,"bid_ask_spread_high":0.008500000000000008,"bid_ask_spread_low":0.008500000000000008,"bid_ask_spread_close":0.008500000000000008,"total_liquidity_open":50.6,"total_liquidity_high":50.6,"total_liquidity_low":50.6,"total_liquidity_close":50.6,"total_liquidity_avg":50.600000000000016},{"date":"2025-11-04 11:02:00","bid_price_open":0.211,"bid_price_high":0.214,"bid_price_low":0.211,"bid_price_close":0.214,"ask_price_open":0.22,"ask_price_high":0.22,"ask_price_low":0.219,"ask_price_close":0.219,"bid_size_open":19.3,"bid_size_high":19.3,"bid_size_low":0.3,"bid_size_close":0.3,"ask_size_open":31.3,"ask_size_high":31.3,"ask_size_low":19.3,"ask_size_close":19.6,"bid_ask_spread_open":0.009000000000000008,"bid_ask_spread_high":0.009000000000000008,"bid_ask_spread_low":0.0050000000000000044,"bid_ask_spread_close":0.0050000000000000044,"total_liquidity_open":50.6,"total_liquidity_high":50.6,"total_liquidity_low":19.6,"total_liquidity_close":19.900000000000002,"total_liquidity_avg":26.576190476190483}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Level 1","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"],"description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog."},"instrument_name":{"example":"BTC-9OCT26-81000-P","type":"string","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes."}}}}}}}},"/api/v1/options/volatility":{"get":{"description":"Instrument-level mark/bid/ask IV OHLC and IV-spread statistics, with latest retained Greeks. Not a constant-maturity fitted surface or the retained /options/volatility-history analytics family. Averages summarize stored minute values, not time-weighted raw events.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour.\n\nImplied volatility in percentage points: 65 means 65%, not 0.65.\n\nAsk IV minus bid IV, in volatility percentage points.\n\nRetained venue conventions; no universal cross-venue theta/vega/rho rescaling is applied.\n\nOption underlying pricing reference, potentially expiry-specific. Distinct from the spot index; missing references are unavailable, not substituted with each other.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.volatility. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options Volatility & Greeks","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog.","schema":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"]}},{"name":"instrument_name","required":false,"in":"query","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes.","schema":{"example":"BTC-9OCT26-81000-P","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsVolatilityDataEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","strike":100000,"maturity":"25SEP26","days_to_expiry":324.9166666666667,"underlying_price":109227.13,"mark_iv_open":47.62,"mark_iv_high":47.62,"mark_iv_low":47.62,"mark_iv_close":47.62,"bid_iv_open":46.42,"bid_iv_high":46.53,"bid_iv_low":46.36,"bid_iv_close":46.4,"ask_iv_open":48.6,"ask_iv_high":48.89,"ask_iv_low":48.57,"ask_iv_close":48.87,"iv_spread_open":2.1799999999999997,"iv_spread_high":2.47,"iv_spread_low":2.17,"iv_spread_close":2.469999999999999,"iv_spread_avg":2.3077777777777784,"delta":0.66315,"gamma":0.00001,"theta":-27.57357,"vega":376.24963,"rho":435.06539},{"date":"2025-11-04 11:01:00","strike":100000,"maturity":"25SEP26","days_to_expiry":324.91597222222225,"underlying_price":109138.04,"mark_iv_open":47.62,"mark_iv_high":47.62,"mark_iv_low":47.62,"mark_iv_close":47.62,"bid_iv_open":46.45,"bid_iv_high":46.51,"bid_iv_low":46.39,"bid_iv_close":46.51,"ask_iv_open":48.92,"ask_iv_high":48.98,"ask_iv_low":48.86,"ask_iv_close":48.98,"iv_spread_open":2.469999999999999,"iv_spread_high":2.47,"iv_spread_low":2.46,"iv_spread_close":2.469999999999999,"iv_spread_avg":2.4662499999999987,"delta":0.66249,"gamma":0.00001,"theta":-27.57106,"vega":376.22951,"rho":434.42588},{"date":"2025-11-04 11:02:00","strike":100000,"maturity":"25SEP26","days_to_expiry":324.91527777777776,"underlying_price":109194.74,"mark_iv_open":47.62,"mark_iv_high":47.62,"mark_iv_low":47.62,"mark_iv_close":47.62,"bid_iv_open":46.51,"bid_iv_high":47.17,"bid_iv_low":46.24,"bid_iv_close":47.17,"ask_iv_open":48.97,"ask_iv_high":48.97,"ask_iv_low":48.54,"ask_iv_close":48.62,"iv_spread_open":2.460000000000001,"iv_spread_high":2.47,"iv_spread_low":1.45,"iv_spread_close":1.4499999999999957,"iv_spread_avg":1.8576190476190468,"delta":0.66291,"gamma":0.00001,"theta":-27.57346,"vega":376.24168,"rho":434.82764}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjQwOjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Volatility & Greeks","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"],"description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog."},"instrument_name":{"example":"BTC-9OCT26-81000-P","type":"string","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes."}}}}}}}},"/api/v1/options/ticker-history":{"get":{"description":"One final observed ticker state per requested interval: premiums, best bid/ask and displayed sizes, oi, IV and rolling volume_usd_24h. All state fields come from the selected final minute row, including its nulls. Not OHLC, not a sum of OI or rolling volume; no Greeks or underlying_price in this response. Empty intervals are not filled by this reader.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour.\n\nPremium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.\n\nRetained source quantity units; the API does not apply an additional contract multiplier. Not USD notional or a universal one-contract-one-coin convention.\n\nImplied volatility in percentage points: 65 means 65%, not 0.65.\n\nExchange spot-index price, not the expiry-specific option underlying/forward reference.\n\nLatest rolling 24-hour USD volume state, not volume traded during the requested interval.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.ticker_history. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options Ticker History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog.","schema":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"]}},{"name":"instrument_name","required":false,"in":"query","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes.","schema":{"example":"BTC-9OCT26-81000-P","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsTickerDataEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","mark_price":0.2157,"index_price":103722.83,"bid_price":0.2115,"ask_price":0.22,"bid_ask_spread":0.008500000000000008,"bid_size":19.3,"ask_size":31.3,"oi":2.6,"volume_usd_24h":29521.78,"bid_iv":46.4,"ask_iv":48.87,"mark_iv":47.62,"iv_spread":2.469999999999999},{"date":"2025-11-04 11:01:00","mark_price":0.2154,"index_price":103639.67,"bid_price":0.2115,"ask_price":0.22,"bid_ask_spread":0.008500000000000008,"bid_size":19.3,"ask_size":31.3,"oi":2.6,"volume_usd_24h":29521.78,"bid_iv":46.51,"ask_iv":48.98,"mark_iv":47.62,"iv_spread":2.469999999999999},{"date":"2025-11-04 11:02:00","mark_price":0.2156,"index_price":103695.66,"bid_price":0.214,"ask_price":0.219,"bid_ask_spread":0.0050000000000000044,"bid_size":0.3,"ask_size":19.6,"oi":2.6,"volume_usd_24h":29521.78,"bid_iv":47.17,"ask_iv":48.62,"mark_iv":47.62,"iv_spread":1.4499999999999957}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Ticker History","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"],"description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog."},"instrument_name":{"example":"BTC-9OCT26-81000-P","type":"string","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes."}}}}}}}},"/api/v1/options/reference-price":{"get":{"description":"Mark-price OHLC, plus the final observed index_price and underlying_price references. The references are scalar final values, not index-price OHLC. They are selected together from the same source minute/revision. For mark-IV OHLC use /options/volatility.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour.\n\nPremium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.\n\nExchange spot-index price, not the expiry-specific option underlying/forward reference.\n\nOption underlying pricing reference, potentially expiry-specific. Distinct from the spot index; missing references are unavailable, not substituted with each other.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.reference_price. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options Reference Prices","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog.","schema":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"]}},{"name":"instrument_name","required":false,"in":"query","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes.","schema":{"example":"BTC-9OCT26-81000-P","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsRefDataEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","mark_price_open":0.2162,"mark_price_high":0.2162,"mark_price_low":0.2156,"mark_price_close":0.2157,"underlying_price":109227.13,"days_to_expiry":324.9166666666667,"index_price":103722.83},{"date":"2025-11-04 11:01:00","mark_price_open":0.2156,"mark_price_high":0.2157,"mark_price_low":0.2154,"mark_price_close":0.2154,"underlying_price":109138.04,"days_to_expiry":324.91597222222225,"index_price":103639.67},{"date":"2025-11-04 11:02:00","mark_price_open":0.2153,"mark_price_high":0.2158,"mark_price_low":0.2153,"mark_price_close":0.2156,"underlying_price":109194.74,"days_to_expiry":324.91527777777776,"index_price":103695.66}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Reference Prices","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"],"description":"Options exchange. Paradex prices are USD-quoted, settled in USDC; discover exact symbols in /options/catalog."},"instrument_name":{"example":"BTC-9OCT26-81000-P","type":"string","description":"Exact instrument from /options/catalog (e.g., Deribit BTC-9OCT26-81000-P; Paradex BTC-USD-30OCT26-81000-C). Do not use the legacy underscore symbol on modern routes."}}}}}}}},"/api/v1/options/snapshot":{"get":{"description":"Cross-instrument chain of retained ticker states and joined premium-candle fields for one exchange/currency. IV is percentage points; open interest is named oi. This response does not include Greeks or underlying_price. Select settlement_currency/margin_type to distinguish inverse and linear books.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nAt 1m, date must match a retained minute exactly; there is no nearest-minute fallback. Omitted date selects the latest matching minute. At coarser REST resolutions, date selects the whole containing bucket, including observations AFTER date; it is not an as-of cutoff. REST returns matching chain rows without an instrument limit.\n\nPremium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.\n\nRetained source quantity units; the API does not apply an additional contract multiplier. Not USD notional or a universal one-contract-one-coin convention.\n\nImplied volatility in percentage points: 65 means 65%, not 0.65.\n\nExchange spot-index price, not the expiry-specific option underlying/forward reference.\n\nInstruments with retained ticker rows at the selected minute/bucket, not a join against today's active catalog. Does not certify originally listed/active/open-for-trading status. Metadata alone does not create a row; later repair/backfill can change historical membership.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.snapshot. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options Snapshot","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, bullish, derive, paradex). Required.","schema":{"example":"deribit","type":"string"}},{"name":"date","required":false,"in":"query","description":"At 1m, exact retained minute (use :00 seconds), not nearest minute. At coarser resolutions selects the entire containing UTC bucket, including observations after date; not an as-of cutoff. Omit for latest matching snapshot.","schema":{"format":"date-time","example":"2025-11-01T15:09:00Z","type":"string"}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for the snapshot. The 1m default is a persisted aggregate of finer source events, not a raw exchange-event feed. Higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"currency","required":true,"in":"query","description":"Base currency (e.g., BTC, ETH). Required for options due to large dataset size.","schema":{"example":"BTC","type":"string"}},{"name":"settlement_currency","required":false,"in":"query","description":"Settlement-currency filter for the option chain (for example BTC for inverse Deribit options or USDC for linear Deribit options). Prevents differently settled books from being combined.","schema":{"example":"BTC","type":"string"}},{"name":"margin_type","required":false,"in":"query","description":"Contract margin convention. Use inverse or linear to select one options book.","schema":{"example":"inverse","type":"string","enum":["inverse","linear"]}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"date":"2025-11-04 11:00:00","exchange":"deribit","instrument_name":"BTC-9OCT26-81000-P","currency":"BTC","mark_price":0.2157,"index_price":103722.83,"bid_price":0.2115,"ask_price":0.22,"bid_ask_spread":0.0085,"bid_size":19.3,"ask_size":31.3,"oi":2.6,"volume_usd_24h":29521.78,"bid_iv":46.4,"ask_iv":48.87,"mark_iv":47.62,"iv_spread":2.47},{"date":"2025-11-04 11:00:00","exchange":"deribit","instrument_name":"BTC-9OCT26-81000-P","currency":"BTC","mark_price":0.0542,"index_price":103722.83,"bid_price":0.053,"ask_price":0.0555,"bid_ask_spread":0.0025,"bid_size":10.1,"ask_size":15.4,"oi":5.2,"volume_usd_24h":12340.5,"bid_iv":52.1,"ask_iv":54.3,"mark_iv":53.15,"iv_spread":2.2}],"meta":{"minute":"2025-11-04 11:00:00"}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Snapshot","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, bullish, derive, paradex). Required."},"date":{"format":"date-time","example":"2025-11-01T15:09:00Z","type":"string","description":"At 1m, exact retained minute (use :00 seconds), not nearest minute. At coarser resolutions selects the entire containing UTC bucket, including observations after date; not an as-of cutoff. Omit for latest matching snapshot."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for the snapshot. The 1m default is a persisted aggregate of finer source events, not a raw exchange-event feed. Higher resolutions roll up those 1m records."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g., BTC, ETH). Required for options due to large dataset size."},"settlement_currency":{"example":"BTC","type":"string","description":"Settlement-currency filter for the option chain (for example BTC for inverse Deribit options or USDC for linear Deribit options). Prevents differently settled books from being combined."},"margin_type":{"example":"inverse","type":"string","enum":["inverse","linear"],"description":"Contract margin convention. Use inverse or linear to select one options book."}},"required":["exchange","currency"]}}}}}},"/api/v1/options/gex/catalog":{"get":{"description":"Observed aggregate GEX bounds and latest model values by currency/venue. Methodology history: before 2026-06-01 05:09 UTC positions were signed by the exchange-reported taker side rather than the inferred dealer side, and a different set of trades was counted. Positions held at that time were carried forward, not restated, and leave the model only as their options expire, so values after the change mix both methods until those expiries have passed. Earlier boundaries: position resets on 2025-10-05 and 2025-10-06 (values restart near zero), a scale change around 2025-08-26, stretches where the last value was repeated because no new data arrived, such as 2025-10-02 to 2025-10-05, and little data for March and April 2026. Do not compare levels, signs or regimes across these boundaries; the history has not been recomputed.\n\nEarliest/latest observed aggregate model snapshot, not listing dates, proof of uninterrupted history, or detail-product coverage.\n\nNominal one-minute model snapshots; observed cadence and historical continuity can differ.\n\nOptional currency filter. limit caps currency/venue rows; no continuation cursor. Detail histories can begin later than the aggregate catalog dates.\n\nDealer GEX models dealer positions inferred from trades; it is not exchange-reported dealer inventory and does not assign the whole chain open interest to dealers. Raw contribution = gamma × signed modelled dealer position × spot² × 0.01, in USD delta-notional change per 1% spot move. Weighted values additionally apply moneyness and time-to-expiry weights. Positive means dealers long gamma under the current method. The chain metric gex in /options/volatility-history?series=gex_index instead uses gamma × open interest × underlying price, calls positive and puts negative; that price is not necessarily the spot index. gamma_by_strike in /options/current-analytics uses gamma × open interest with calls positive and puts negative, without price scaling. These three metrics are not interchangeable.\n\nCurrent model gamma is unit-option Black-Scholes gamma using zero interest, trade IV and ACT/365 time remaining at calculation. Each instrument keeps the gamma and index-price reference from its last qualifying dealer-classified trade until another qualifying trade updates it. The spot in the contribution formula is that instrument reference, not necessarily the aggregate row spot; this is not a fresh repricing of every held option at each snapshot.\n\nspot and numeric strikes are USD prices; weighting coefficients are dimensionless.\n\nregime is a model classification using signed weighted GEX and recent model history, not a direct observation of dealers or a published zero-gamma level.\n\nDeribit model books only. Use /options/gex/catalog for available currencies; a _USDC suffix identifies a separate linear book. Do not combine it with the inverse book as one series.\n\nNo dedicated coverage lookup is declared for this product. Catalog dates or returned rows describe observed availability, not continuous completeness or an original trading-universe record.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.gex_catalog. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options GEX Catalog","parameters":[{"name":"exchange","required":false,"in":"query","description":"Options venue. Dealer GEX is currently backed by Deribit options.","schema":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"]}},{"name":"currency","required":false,"in":"query","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC.","schema":{"example":"BTC","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of currency/venue rows to return.","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}}],"responses":{"200":{"description":"Dealer GEX catalog successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsGexCatalogEntity"}},"meta":{"$ref":"#/components/schemas/PaginationMetaEntity"}}}]},"example":{"data":[{"currency":"BTC","exchange":"deribit","market":0,"first_date":"2025-08-25T12:30:00.000Z","latest_date":"2026-06-15T10:06:00.000Z","row_count":289114,"spot":65651.87,"total_gex":-4542768.08,"net_long_gex":19984373.25,"net_short_gex":-24527141.33,"regime":"neutral"}],"meta":{"next_cursor":null}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Dealer GEX Catalog","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"],"description":"Options venue. Dealer GEX is currently backed by Deribit options."},"currency":{"example":"BTC","type":"string","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of currency/venue rows to return."}}}}}}}},"/api/v1/options/gex/latest":{"get":{"description":"Latest aggregate model snapshot per selected currency. total_gex, net_long_gex and net_short_gex are weighted; net_long_gex is nonnegative and net_short_gex nonpositive. Methodology history: before 2026-06-01 05:09 UTC positions were signed by the exchange-reported taker side rather than the inferred dealer side, and a different set of trades was counted. Positions held at that time were carried forward, not restated, and leave the model only as their options expire, so values after the change mix both methods until those expiries have passed. Earlier boundaries: position resets on 2025-10-05 and 2025-10-06 (values restart near zero), a scale change around 2025-08-26, stretches where the last value was repeated because no new data arrived, such as 2025-10-02 to 2025-10-05, and little data for March and April 2026. Do not compare levels, signs or regimes across these boundaries; the history has not been recomputed.\n\nModel snapshot time, not an exchange event or a guarantee of first availability. Snapshot staleness metadata is not a historical publication-time record.\n\nNominal one-minute model snapshots; observed cadence and historical continuity can differ.\n\ndate optionally limits each currency to its latest snapshot at or before that time. Different currencies can have different row dates. meta.snapshot_time and staleness_ms describe the latest returned row, not necessarily every row. limit caps currencies; no continuation cursor.\n\nDealer GEX models dealer positions inferred from trades; it is not exchange-reported dealer inventory and does not assign the whole chain open interest to dealers. Raw contribution = gamma × signed modelled dealer position × spot² × 0.01, in USD delta-notional change per 1% spot move. Weighted values additionally apply moneyness and time-to-expiry weights. Positive means dealers long gamma under the current method. The chain metric gex in /options/volatility-history?series=gex_index instead uses gamma × open interest × underlying price, calls positive and puts negative; that price is not necessarily the spot index. gamma_by_strike in /options/current-analytics uses gamma × open interest with calls positive and puts negative, without price scaling. These three metrics are not interchangeable.\n\nCurrent model gamma is unit-option Black-Scholes gamma using zero interest, trade IV and ACT/365 time remaining at calculation. Each instrument keeps the gamma and index-price reference from its last qualifying dealer-classified trade until another qualifying trade updates it. The spot in the contribution formula is that instrument reference, not necessarily the aggregate row spot; this is not a fresh repricing of every held option at each snapshot.\n\nspot and numeric strikes are USD prices; weighting coefficients are dimensionless.\n\nregime is a model classification using signed weighted GEX and recent model history, not a direct observation of dealers or a published zero-gamma level.\n\nDeribit model books only. Use /options/gex/catalog for available currencies; a _USDC suffix identifies a separate linear book. Do not combine it with the inverse book as one series.\n\nNo dedicated coverage lookup is declared for this product. Catalog dates or returned rows describe observed availability, not continuous completeness or an original trading-universe record.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.gex_latest. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options GEX Latest","parameters":[{"name":"exchange","required":false,"in":"query","description":"Options venue. Dealer GEX is currently backed by Deribit options.","schema":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"]}},{"name":"currency","required":false,"in":"query","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC.","schema":{"example":"BTC","type":"string"}},{"name":"date","required":false,"in":"query","description":"Return the latest snapshot at or before this UTC datetime. Defaults to the latest available snapshot.","schema":{"format":"date-time","example":"2026-06-15T10:00:00Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of currency/venue rows to return.","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}}],"responses":{"200":{"description":"Latest dealer GEX successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsGexIndexEntity"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true},"snapshot_time":{"type":"string","nullable":true,"example":"2026-06-15 10:06:00"},"snapshot_time_iso":{"type":"string","nullable":true,"example":"2026-06-15T10:06:00.000Z"},"snapshot_interval_ms":{"type":"number","example":60000},"freshness_basis":{"type":"string","enum":["snapshot"]},"staleness_ms":{"type":"number","nullable":true},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}]},"example":{"data":[{"date":"2026-06-15T10:06:00.000Z","currency":"BTC","exchange":"deribit","market":0,"spot":65651.87,"total_gex":-4542768.08,"net_long_gex":19984373.25,"net_short_gex":-24527141.33,"regime":"neutral"}],"meta":{"next_cursor":null,"snapshot_time":"2026-06-15 10:06:00","snapshot_time_iso":"2026-06-15T10:06:00.000Z","snapshot_interval_ms":60000,"freshness_basis":"snapshot","staleness_ms":42000}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Latest Options Dealer GEX","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"],"description":"Options venue. Dealer GEX is currently backed by Deribit options."},"currency":{"example":"BTC","type":"string","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC."},"date":{"format":"date-time","example":"2026-06-15T10:00:00Z","type":"string","description":"Return the latest snapshot at or before this UTC datetime. Defaults to the latest available snapshot."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of currency/venue rows to return."}}}}}}}},"/api/v1/options/gex/history":{"get":{"description":"Final observed aggregate GEX state per requested interval, not a sum or mean. total_gex, net_long_gex and net_short_gex are weighted. Methodology history: before 2026-06-01 05:09 UTC positions were signed by the exchange-reported taker side rather than the inferred dealer side, and a different set of trades was counted. Positions held at that time were carried forward, not restated, and leave the model only as their options expire, so values after the change mix both methods until those expiries have passed. Earlier boundaries: position resets on 2025-10-05 and 2025-10-06 (values restart near zero), a scale change around 2025-08-26, stretches where the last value was repeated because no new data arrived, such as 2025-10-02 to 2025-10-05, and little data for March and April 2026. Do not compare levels, signs or regimes across these boundaries; the history has not been recomputed.\n\nUTC interval start, carrying the last model snapshot within the requested portion of that interval. A later observation in the interval is not information known at its start; open intervals can change.\n\n1m, 5m, 15m, 1h, 4h or 1d; default 1m.\n\nCurrency required. Inclusive start/end are applied before selecting the final state; edge intervals may be partial. Omitted start is 24h before end or now. limit counts intervals; follow meta.next_cursor with the same bounds, currency, resolution and sort_dir.\n\nDealer GEX models dealer positions inferred from trades; it is not exchange-reported dealer inventory and does not assign the whole chain open interest to dealers. Raw contribution = gamma × signed modelled dealer position × spot² × 0.01, in USD delta-notional change per 1% spot move. Weighted values additionally apply moneyness and time-to-expiry weights. Positive means dealers long gamma under the current method. The chain metric gex in /options/volatility-history?series=gex_index instead uses gamma × open interest × underlying price, calls positive and puts negative; that price is not necessarily the spot index. gamma_by_strike in /options/current-analytics uses gamma × open interest with calls positive and puts negative, without price scaling. These three metrics are not interchangeable.\n\nCurrent model gamma is unit-option Black-Scholes gamma using zero interest, trade IV and ACT/365 time remaining at calculation. Each instrument keeps the gamma and index-price reference from its last qualifying dealer-classified trade until another qualifying trade updates it. The spot in the contribution formula is that instrument reference, not necessarily the aggregate row spot; this is not a fresh repricing of every held option at each snapshot.\n\nspot and numeric strikes are USD prices; weighting coefficients are dimensionless.\n\nregime is a model classification using signed weighted GEX and recent model history, not a direct observation of dealers or a published zero-gamma level.\n\nDeribit model books only. Use /options/gex/catalog for available currencies; a _USDC suffix identifies a separate linear book. Do not combine it with the inverse book as one series.\n\nNo dedicated coverage lookup is declared for this product. Catalog dates or returned rows describe observed availability, not continuous completeness or an original trading-universe record.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.gex_history. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options GEX History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Options venue. Dealer GEX is currently backed by Deribit options.","schema":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"]}},{"name":"currency","required":false,"in":"query","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC.","schema":{"example":"BTC","type":"string"}}],"responses":{"200":{"description":"Dealer GEX history successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsGexIndexEntity"}},"meta":{"$ref":"#/components/schemas/PaginationMetaEntity"}}}]},"example":{"data":[{"date":"2026-06-15T10:00:00.000Z","currency":"BTC","exchange":"deribit","market":0,"spot":65590.12,"total_gex":-4120000,"net_long_gex":20100000,"net_short_gex":-24220000,"regime":"neutral"}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI2LTA2LTE1IDEwOjAwOjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Historical Options Dealer GEX","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"],"description":"Options venue. Dealer GEX is currently backed by Deribit options."},"currency":{"example":"BTC","type":"string","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC."}}}}}}}},"/api/v1/options/gex/regime-changes":{"get":{"description":"Changes between consecutive observed regime labels inside the requested window, with previous_regime and weighted GEX values. The first observed row in the window is not a transition because its predecessor is outside the selection. Methodology history: before 2026-06-01 05:09 UTC positions were signed by the exchange-reported taker side rather than the inferred dealer side, and a different set of trades was counted. Positions held at that time were carried forward, not restated, and leave the model only as their options expire, so values after the change mix both methods until those expiries have passed. Earlier boundaries: position resets on 2025-10-05 and 2025-10-06 (values restart near zero), a scale change around 2025-08-26, stretches where the last value was repeated because no new data arrived, such as 2025-10-02 to 2025-10-05, and little data for March and April 2026. Do not compare levels, signs or regimes across these boundaries; the history has not been recomputed.\n\nModel snapshot time, not an exchange event or a guarantee of first availability. Snapshot staleness metadata is not a historical publication-time record.\n\nNominal one-minute model snapshots; observed cadence and historical continuity can differ.\n\nCurrency required; inclusive bounds, default start seven days ago and descending order. No candle aggregation. limit counts transitions; follow meta.next_cursor without changing the original bounds.\n\nDealer GEX models dealer positions inferred from trades; it is not exchange-reported dealer inventory and does not assign the whole chain open interest to dealers. Raw contribution = gamma × signed modelled dealer position × spot² × 0.01, in USD delta-notional change per 1% spot move. Weighted values additionally apply moneyness and time-to-expiry weights. Positive means dealers long gamma under the current method. The chain metric gex in /options/volatility-history?series=gex_index instead uses gamma × open interest × underlying price, calls positive and puts negative; that price is not necessarily the spot index. gamma_by_strike in /options/current-analytics uses gamma × open interest with calls positive and puts negative, without price scaling. These three metrics are not interchangeable.\n\nCurrent model gamma is unit-option Black-Scholes gamma using zero interest, trade IV and ACT/365 time remaining at calculation. Each instrument keeps the gamma and index-price reference from its last qualifying dealer-classified trade until another qualifying trade updates it. The spot in the contribution formula is that instrument reference, not necessarily the aggregate row spot; this is not a fresh repricing of every held option at each snapshot.\n\nspot and numeric strikes are USD prices; weighting coefficients are dimensionless.\n\nregime is a model classification using signed weighted GEX and recent model history, not a direct observation of dealers or a published zero-gamma level.\n\nDeribit model books only. Use /options/gex/catalog for available currencies; a _USDC suffix identifies a separate linear book. Do not combine it with the inverse book as one series.\n\nNo dedicated coverage lookup is declared for this product. Catalog dates or returned rows describe observed availability, not continuous completeness or an original trading-universe record.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.gex_regime_changes. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options GEX Regime Changes","parameters":[{"name":"exchange","required":false,"in":"query","description":"Options venue. Dealer GEX is currently backed by Deribit options.","schema":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"]}},{"name":"currency","required":false,"in":"query","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC.","schema":{"example":"BTC","type":"string"}},{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). Defaults to 7 days ago.","schema":{"format":"date-time","example":"2026-06-08T00:00:00Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Defaults to now.","schema":{"format":"date-time","example":"2026-06-15T00:00:00Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of regime changes to return.","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from meta.next_cursor.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by transition time.","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":"Dealer GEX regime changes successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsGexRegimeChangeEntity"}},"meta":{"$ref":"#/components/schemas/PaginationMetaEntity"}}}]},"example":{"data":[{"date":"2026-06-15T09:18:00.000Z","currency":"BTC","exchange":"deribit","market":0,"spot":65380.22,"total_gex":125000,"net_long_gex":21400000,"net_short_gex":-21275000,"previous_regime":"negative","regime":"neutral"}],"meta":{"next_cursor":null}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Dealer GEX Regime Changes","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"],"description":"Options venue. Dealer GEX is currently backed by Deribit options."},"currency":{"example":"BTC","type":"string","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC."},"start":{"format":"date-time","example":"2026-06-08T00:00:00Z","type":"string","description":"Start date in ISO 8601 format (UTC). Defaults to 7 days ago."},"end":{"format":"date-time","example":"2026-06-15T00:00:00Z","type":"string","description":"End date in ISO 8601 format (UTC). Defaults to now."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of regime changes to return."},"cursor":{"type":"string","description":"Pagination cursor from meta.next_cursor."},"sort_dir":{"default":"DESC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by transition time."}}}}}}}},"/api/v1/options/gex/strikes":{"get":{"description":"Strike contributions. contribution/pos_contribution/neg_contribution and raw_* are unweighted; weighted_* include the dealer-model weights. Sum one complete set of per-expiry weighted contributions to reconcile aggregate total_gex. net_long_gex, net_short_gex and regime are null on these detail rows. Methodology history: before 2026-06-01 05:09 UTC positions were signed by the exchange-reported taker side rather than the inferred dealer side, and a different set of trades was counted. Positions held at that time were carried forward, not restated, and leave the model only as their options expire, so values after the change mix both methods until those expiries have passed. Earlier boundaries: position resets on 2025-10-05 and 2025-10-06 (values restart near zero), a scale change around 2025-08-26, stretches where the last value was repeated because no new data arrived, such as 2025-10-02 to 2025-10-05, and little data for March and April 2026. Do not compare levels, signs or regimes across these boundaries; the history has not been recomputed.\n\nModel snapshot time, not an exchange event or a guarantee of first availability. Snapshot staleness metadata is not a historical publication-time record.\n\nNominal one-minute model snapshots; observed cadence and historical continuity can differ.\n\nOmit start/end/cursor for the first snapshot page; date selects the latest snapshot at or before that cutoff, not proof it was available then. Follow meta.next_cursor with unchanged filters and date to retrieve the rest of that same snapshot, in ascending row order; limit counts rows and may change between pages. A snapshot cursor cannot be combined with start/end. For history use explicit inclusive start/end and follow meta.next_cursor with unchanged bounds and sort direction. Do not combine aggregate and per-expiry rows when summing. Without expiry or include_expiries, contributions are summed across expiries at each strike. include_expiries=true without an expiry selects separate per-expiry rows instead; expiry=all_expiries selects the summed view even with that flag. min_abs_contribution uses contribution_basis (weighted by default); filtering or truncation prevents whole-snapshot reconciliation.\n\nDealer GEX models dealer positions inferred from trades; it is not exchange-reported dealer inventory and does not assign the whole chain open interest to dealers. Raw contribution = gamma × signed modelled dealer position × spot² × 0.01, in USD delta-notional change per 1% spot move. Weighted values additionally apply moneyness and time-to-expiry weights. Positive means dealers long gamma under the current method. The chain metric gex in /options/volatility-history?series=gex_index instead uses gamma × open interest × underlying price, calls positive and puts negative; that price is not necessarily the spot index. gamma_by_strike in /options/current-analytics uses gamma × open interest with calls positive and puts negative, without price scaling. These three metrics are not interchangeable.\n\nCurrent model gamma is unit-option Black-Scholes gamma using zero interest, trade IV and ACT/365 time remaining at calculation. Each instrument keeps the gamma and index-price reference from its last qualifying dealer-classified trade until another qualifying trade updates it. The spot in the contribution formula is that instrument reference, not necessarily the aggregate row spot; this is not a fresh repricing of every held option at each snapshot.\n\nspot and numeric strikes are USD prices; weighting coefficients are dimensionless.\n\nregime is a model classification using signed weighted GEX and recent model history, not a direct observation of dealers or a published zero-gamma level.\n\nDeribit model books only. Use /options/gex/catalog for available currencies; a _USDC suffix identifies a separate linear book. Do not combine it with the inverse book as one series.\n\nNo dedicated coverage lookup is declared for this product. Catalog dates or returned rows describe observed availability, not continuous completeness or an original trading-universe record.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.gex_strikes. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options GEX Strike Contributions","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from meta.next_cursor. Snapshot continuation stays at one timestamp; keep filters and date unchanged and omit start/end. limit may change between pages.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Options venue. Dealer GEX is currently backed by Deribit options.","schema":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"]}},{"name":"currency","required":false,"in":"query","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC.","schema":{"example":"BTC","type":"string"}},{"name":"date","required":false,"in":"query","description":"Return the latest detail snapshot at or before this UTC datetime. When omitted and no start/end/cursor is supplied, returns the latest available snapshot.","schema":{"format":"date-time","example":"2026-06-15T10:00:00Z","type":"string"}},{"name":"expiry","required":false,"in":"query","description":"Expiry code to filter, e.g. '27JUN26'. Use 'all_expiries' for the aggregate strike view.","schema":{"example":"all_expiries","type":"string"}},{"name":"include_expiries","required":false,"in":"query","description":"Include per-expiry rows when expiry is omitted. Defaults to false, which returns aggregate all_expiries rows only.","schema":{"default":false,"type":"boolean"}},{"name":"strike_min","required":false,"in":"query","description":"Minimum numeric strike to return.","schema":{"example":50000,"type":"number"}},{"name":"strike_max","required":false,"in":"query","description":"Maximum numeric strike to return.","schema":{"example":90000,"type":"number"}},{"name":"contribution_basis","required":false,"in":"query","description":"Contribution basis used by min_abs_contribution. weighted reconciles with aggregate total_gex; raw preserves unweighted decomposition.","schema":{"default":"weighted","example":"weighted","type":"string","enum":["weighted","raw"]}},{"name":"min_abs_contribution","required":false,"in":"query","description":"Minimum absolute GEX contribution on contribution_basis. Defaults to weighted contribution, which reconciles with aggregate total_gex.","schema":{"example":10000,"type":"number"}}],"responses":{"200":{"description":"Dealer GEX strike contributions successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsGexStrikeContributionEntity"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true},"snapshot_time":{"type":"string","nullable":true,"example":"2026-06-15 10:06:00"},"snapshot_time_iso":{"type":"string","nullable":true,"example":"2026-06-15T10:06:00.000Z"},"snapshot_interval_ms":{"type":"number","example":60000},"freshness_basis":{"type":"string","enum":["snapshot"]},"staleness_ms":{"type":"number","nullable":true},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}]},"example":{"data":[{"date":"2026-06-15T10:06:00.000Z","currency":"BTC","exchange":"deribit","market":0,"spot":65651.87,"total_gex":-4542768.08,"expiry":"all_expiries","is_aggregate":true,"strike_label":"65000","strike":65000,"contribution":-1500000,"pos_contribution":200000,"neg_contribution":-1700000,"raw_contribution":-1500000,"raw_pos_contribution":200000,"raw_neg_contribution":-1700000,"weighted_contribution":-1297350,"weighted_pos_contribution":172980,"weighted_neg_contribution":-1470330,"moneyness_weight":0.93,"expiry_weight":0}],"meta":{"next_cursor":null,"snapshot_time":"2026-06-15 10:06:00","snapshot_time_iso":"2026-06-15T10:06:00.000Z","snapshot_interval_ms":60000,"freshness_basis":"snapshot","staleness_ms":42000}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Dealer GEX Strike Contributions","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor from meta.next_cursor. Snapshot continuation stays at one timestamp; keep filters and date unchanged and omit start/end. limit may change between pages."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"exchange":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"],"description":"Options venue. Dealer GEX is currently backed by Deribit options."},"currency":{"example":"BTC","type":"string","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC."},"date":{"format":"date-time","example":"2026-06-15T10:00:00Z","type":"string","description":"Return the latest detail snapshot at or before this UTC datetime. When omitted and no start/end/cursor is supplied, returns the latest available snapshot."},"expiry":{"example":"all_expiries","type":"string","description":"Expiry code to filter, e.g. '27JUN26'. Use 'all_expiries' for the aggregate strike view."},"include_expiries":{"default":false,"type":"boolean","description":"Include per-expiry rows when expiry is omitted. Defaults to false, which returns aggregate all_expiries rows only."},"strike_min":{"example":50000,"type":"number","description":"Minimum numeric strike to return."},"strike_max":{"example":90000,"type":"number","description":"Maximum numeric strike to return."},"contribution_basis":{"default":"weighted","example":"weighted","type":"string","enum":["weighted","raw"],"description":"Contribution basis used by min_abs_contribution. weighted reconciles with aggregate total_gex; raw preserves unweighted decomposition."},"min_abs_contribution":{"example":10000,"type":"number","description":"Minimum absolute GEX contribution on contribution_basis. Defaults to weighted contribution, which reconciles with aggregate total_gex."}}}}}}}},"/api/v1/options/gex/term-structure":{"get":{"description":"One contribution per expiry. Here total_gex/net_long_gex/net_short_gex and raw_* are unweighted, unlike the same names on aggregate latest/history. Sum weighted_total_gex across all expiries at one date to reconcile snapshot_total_gex. Methodology history: before 2026-06-01 05:09 UTC positions were signed by the exchange-reported taker side rather than the inferred dealer side, and a different set of trades was counted. Positions held at that time were carried forward, not restated, and leave the model only as their options expire, so values after the change mix both methods until those expiries have passed. Earlier boundaries: position resets on 2025-10-05 and 2025-10-06 (values restart near zero), a scale change around 2025-08-26, stretches where the last value was repeated because no new data arrived, such as 2025-10-02 to 2025-10-05, and little data for March and April 2026. Do not compare levels, signs or regimes across these boundaries; the history has not been recomputed.\n\nModel snapshot time, not an exchange event or a guarantee of first availability. Snapshot staleness metadata is not a historical publication-time record.\n\nNominal one-minute model snapshots; observed cadence and historical continuity can differ.\n\nOmit start/end/cursor for the first snapshot page; date selects the latest snapshot at or before that cutoff, not proof it was available then. Follow meta.next_cursor with unchanged filters and date to retrieve the rest of that same snapshot, in ascending row order; limit counts rows and may change between pages. A snapshot cursor cannot be combined with start/end. For history use explicit inclusive start/end and follow meta.next_cursor with unchanged bounds and sort direction. Do not combine aggregate and per-expiry rows when summing.\n\nDealer GEX models dealer positions inferred from trades; it is not exchange-reported dealer inventory and does not assign the whole chain open interest to dealers. Raw contribution = gamma × signed modelled dealer position × spot² × 0.01, in USD delta-notional change per 1% spot move. Weighted values additionally apply moneyness and time-to-expiry weights. Positive means dealers long gamma under the current method. The chain metric gex in /options/volatility-history?series=gex_index instead uses gamma × open interest × underlying price, calls positive and puts negative; that price is not necessarily the spot index. gamma_by_strike in /options/current-analytics uses gamma × open interest with calls positive and puts negative, without price scaling. These three metrics are not interchangeable.\n\nCurrent model gamma is unit-option Black-Scholes gamma using zero interest, trade IV and ACT/365 time remaining at calculation. Each instrument keeps the gamma and index-price reference from its last qualifying dealer-classified trade until another qualifying trade updates it. The spot in the contribution formula is that instrument reference, not necessarily the aggregate row spot; this is not a fresh repricing of every held option at each snapshot.\n\nspot and numeric strikes are USD prices; weighting coefficients are dimensionless.\n\nregime is a model classification using signed weighted GEX and recent model history, not a direct observation of dealers or a published zero-gamma level.\n\nDeribit model books only. Use /options/gex/catalog for available currencies; a _USDC suffix identifies a separate linear book. Do not combine it with the inverse book as one series.\n\nNo dedicated coverage lookup is declared for this product. Catalog dates or returned rows describe observed availability, not continuous completeness or an original trading-universe record.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.gex_term_structure. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options GEX Term Structure","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from meta.next_cursor. Snapshot continuation stays at one timestamp; keep filters and date unchanged and omit start/end. limit may change between pages.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Options venue. Dealer GEX is currently backed by Deribit options.","schema":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"]}},{"name":"currency","required":false,"in":"query","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC.","schema":{"example":"BTC","type":"string"}},{"name":"date","required":false,"in":"query","description":"Return the latest detail snapshot at or before this UTC datetime. When omitted and no start/end/cursor is supplied, returns the latest available snapshot.","schema":{"format":"date-time","example":"2026-06-15T10:00:00Z","type":"string"}},{"name":"expiry","required":false,"in":"query","description":"Expiry code to filter, e.g. '27JUN26'. Omit to return all expiries.","schema":{"example":"27JUN26","type":"string"}}],"responses":{"200":{"description":"Dealer GEX term structure successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsGexTermStructureEntity"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true},"snapshot_time":{"type":"string","nullable":true,"example":"2026-06-15 10:06:00"},"snapshot_time_iso":{"type":"string","nullable":true,"example":"2026-06-15T10:06:00.000Z"},"snapshot_interval_ms":{"type":"number","example":60000},"freshness_basis":{"type":"string","enum":["snapshot"]},"staleness_ms":{"type":"number","nullable":true},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}]},"example":{"data":[{"date":"2026-06-15T10:06:00.000Z","currency":"BTC","exchange":"deribit","market":0,"expiry":"27JUN26","total_gex":-2100000,"net_long_gex":5500000,"net_short_gex":-7600000,"raw_total_gex":-2100000,"raw_net_long_gex":5500000,"raw_net_short_gex":-7600000,"weighted_total_gex":-1816290,"weighted_net_long_gex":4755300,"weighted_net_short_gex":-6571590,"strike_count":43,"spot":65651.87,"snapshot_total_gex":-4542768.08}],"meta":{"next_cursor":null,"snapshot_time":"2026-06-15 10:06:00","snapshot_time_iso":"2026-06-15T10:06:00.000Z","snapshot_interval_ms":60000,"freshness_basis":"snapshot","staleness_ms":42000}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Dealer GEX Term Structure","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor from meta.next_cursor. Snapshot continuation stays at one timestamp; keep filters and date unchanged and omit start/end. limit may change between pages."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"exchange":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"],"description":"Options venue. Dealer GEX is currently backed by Deribit options."},"currency":{"example":"BTC","type":"string","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC."},"date":{"format":"date-time","example":"2026-06-15T10:00:00Z","type":"string","description":"Return the latest detail snapshot at or before this UTC datetime. When omitted and no start/end/cursor is supplied, returns the latest available snapshot."},"expiry":{"example":"27JUN26","type":"string","description":"Expiry code to filter, e.g. '27JUN26'. Omit to return all expiries."}}}}}}}},"/api/v1/options/gex/profile":{"get":{"description":"Interpolated strike profile, not a repricing across hypothetical spot prices. gex/raw_gex are unweighted; weighted_gex is the separately weighted profile from 2026-06-18 onward (earlier rows repeat raw). net_long_gex, net_short_gex and regime are null. No zero-gamma or flip level is published. Interpolated points must not be summed as observed strike contributions. Methodology history: before 2026-06-01 05:09 UTC positions were signed by the exchange-reported taker side rather than the inferred dealer side, and a different set of trades was counted. Positions held at that time were carried forward, not restated, and leave the model only as their options expire, so values after the change mix both methods until those expiries have passed. Earlier boundaries: position resets on 2025-10-05 and 2025-10-06 (values restart near zero), a scale change around 2025-08-26, stretches where the last value was repeated because no new data arrived, such as 2025-10-02 to 2025-10-05, and little data for March and April 2026. Do not compare levels, signs or regimes across these boundaries; the history has not been recomputed.\n\nModel snapshot time, not an exchange event or a guarantee of first availability. Snapshot staleness metadata is not a historical publication-time record.\n\nNominal one-minute model snapshots; observed cadence and historical continuity can differ.\n\nOmit start/end/cursor for the first snapshot page; date selects the latest snapshot at or before that cutoff, not proof it was available then. Follow meta.next_cursor with unchanged filters and date to retrieve the rest of that same snapshot, in ascending row order; limit counts rows and may change between pages. A snapshot cursor cannot be combined with start/end. For history use explicit inclusive start/end and follow meta.next_cursor with unchanged bounds and sort direction. Do not combine aggregate and per-expiry rows when summing. profile_group defaults to all_expiries; an expiry code selects that profile. min_strike/max_strike describe its interpolation domain, not a guarantee of listed strikes.\n\nDealer GEX models dealer positions inferred from trades; it is not exchange-reported dealer inventory and does not assign the whole chain open interest to dealers. Raw contribution = gamma × signed modelled dealer position × spot² × 0.01, in USD delta-notional change per 1% spot move. Weighted values additionally apply moneyness and time-to-expiry weights. Positive means dealers long gamma under the current method. The chain metric gex in /options/volatility-history?series=gex_index instead uses gamma × open interest × underlying price, calls positive and puts negative; that price is not necessarily the spot index. gamma_by_strike in /options/current-analytics uses gamma × open interest with calls positive and puts negative, without price scaling. These three metrics are not interchangeable.\n\nCurrent model gamma is unit-option Black-Scholes gamma using zero interest, trade IV and ACT/365 time remaining at calculation. Each instrument keeps the gamma and index-price reference from its last qualifying dealer-classified trade until another qualifying trade updates it. The spot in the contribution formula is that instrument reference, not necessarily the aggregate row spot; this is not a fresh repricing of every held option at each snapshot.\n\nspot and numeric strikes are USD prices; weighting coefficients are dimensionless.\n\nregime is a model classification using signed weighted GEX and recent model history, not a direct observation of dealers or a published zero-gamma level.\n\nDeribit model books only. Use /options/gex/catalog for available currencies; a _USDC suffix identifies a separate linear book. Do not combine it with the inverse book as one series.\n\nNo dedicated coverage lookup is declared for this product. Catalog dates or returned rows describe observed availability, not continuous completeness or an original trading-universe record.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.gex_profile. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Options GEX Profile","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from meta.next_cursor. Snapshot continuation stays at one timestamp; keep filters and date unchanged and omit start/end. limit may change between pages.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Options venue. Dealer GEX is currently backed by Deribit options.","schema":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"]}},{"name":"currency","required":false,"in":"query","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC.","schema":{"example":"BTC","type":"string"}},{"name":"date","required":false,"in":"query","description":"Return the latest detail snapshot at or before this UTC datetime. When omitted and no start/end/cursor is supplied, returns the latest available snapshot.","schema":{"format":"date-time","example":"2026-06-15T10:00:00Z","type":"string"}},{"name":"profile_group","required":false,"in":"query","description":"Profile group to return. Defaults to 'all_expiries'; pass an expiry code for a per-expiry profile.","schema":{"default":"all_expiries","example":"all_expiries","type":"string"}},{"name":"strike_min","required":false,"in":"query","description":"Minimum numeric strike to return.","schema":{"example":50000,"type":"number"}},{"name":"strike_max","required":false,"in":"query","description":"Maximum numeric strike to return.","schema":{"example":90000,"type":"number"}}],"responses":{"200":{"description":"Dealer GEX profile successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OptionsGexProfileEntity"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true},"snapshot_time":{"type":"string","nullable":true,"example":"2026-06-15 10:06:00"},"snapshot_time_iso":{"type":"string","nullable":true,"example":"2026-06-15T10:06:00.000Z"},"snapshot_interval_ms":{"type":"number","example":60000},"freshness_basis":{"type":"string","enum":["snapshot"]},"staleness_ms":{"type":"number","nullable":true},"warnings":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT"]},"message":{"type":"string"}},"required":["code","message"]}}}}}}]},"example":{"data":[{"date":"2026-06-20T10:06:00.000Z","currency":"BTC","exchange":"deribit","market":0,"spot":65651.87,"total_gex":-4542768.08,"profile_group":"all_expiries","strike_label":"65000","strike":65000,"gex":-1200000,"raw_gex":-1200000,"weighted_gex":-1037880,"min_strike":40000,"max_strike":90000,"interpolator":"pchip"}],"meta":{"next_cursor":null,"snapshot_time":"2026-06-20 10:06:00","snapshot_time_iso":"2026-06-20T10:06:00.000Z","snapshot_interval_ms":60000,"freshness_basis":"snapshot","staleness_ms":42000}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Options Dealer GEX Profile","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor from meta.next_cursor. Snapshot continuation stays at one timestamp; keep filters and date unchanged and omit start/end. limit may change between pages."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"exchange":{"default":"deribit","example":"deribit","type":"string","enum":["deribit"],"description":"Options venue. Dealer GEX is currently backed by Deribit options."},"currency":{"example":"BTC","type":"string","description":"Dealer-worker currency. Examples: BTC, ETH, SOL, XRP, BTC_USDC, ETH_USDC."},"date":{"format":"date-time","example":"2026-06-15T10:00:00Z","type":"string","description":"Return the latest detail snapshot at or before this UTC datetime. When omitted and no start/end/cursor is supplied, returns the latest available snapshot."},"profile_group":{"default":"all_expiries","example":"all_expiries","type":"string","description":"Profile group to return. Defaults to 'all_expiries'; pass an expiry code for a per-expiry profile."},"strike_min":{"example":50000,"type":"number","description":"Minimum numeric strike to return."},"strike_max":{"example":90000,"type":"number","description":"Maximum numeric strike to return."}}}}}}}},"/api/v1/perpetuals/catalog":{"get":{"description":"Perpetual instruments with ticker observations dated the current UTC day, so the list can briefly omit instruments just after 00:00 UTC. Includes macro perpetuals (filter with asset_class and sub_exchange). Not an all-history inventory: delisted instruments remain requestable by name on the data routes.\n\nCurrent discovery, not a historical listed/open-for-trading timeline.\n\nInstrument inventory, not a time series.\n\nFilter exchange, currency, asset_class and sub_exchange; follow next_cursor. total counts the whole matching list.\n\nRecently observed perpetuals, not certified historical trading eligibility.\n\nUse selector-scoped data coverage, historical snapshots or a known instrument name, not this current catalog, to investigate history. Absence from the catalog does not establish absence of history.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.catalog. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals Catalog","parameters":[{"name":"exchange","required":false,"in":"query","description":"Filter by exchange (e.g., deribit, binance, okx, bybit, hyperliquid)","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Filter by base currency (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"maturity","required":false,"in":"query","description":"Filter by maturity/expiry date (e.g., 28MAR25, 27JUN25)","schema":{"example":"28MAR25","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of instruments to return (1-1000)","schema":{"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from a previous response","schema":{"type":"string"}},{"name":"asset_class","required":false,"in":"query","description":"Filter by asset class. Defaults to all classes. Use \"equity\"/\"commodity\"/\"forex\"/\"index\" to scope to non-crypto perps (NVDA/TSLA equity perps, GOLD/OIL commodity perps, EURUSD FX perps, etc.). Discover available instruments via /api/v1/macro/catalog.","schema":{"example":"equity","type":"string","enum":["crypto","equity","commodity","forex","index"]}},{"name":"sub_exchange","required":false,"in":"query","description":"Filter by sub-venue. Used for Hyperliquid HIP-3 deployers: xyz, flx, km, cash, vntl, hyna. Empty string matches single-venue exchanges.","schema":{"example":"xyz","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":[{"instrument_name":"0G-USDT-SWAP","exchange":"okx"},{"instrument_name":"0GUSDT","exchange":"binance"},{"instrument_name":"1000000BOBUSDT","exchange":"binance"}]}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Catalog","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Filter by exchange (e.g., deribit, binance, okx, bybit, hyperliquid)"},"currency":{"example":"BTC","type":"string","description":"Filter by base currency (e.g., BTC, ETH, SOL)"},"maturity":{"example":"28MAR25","type":"string","description":"Filter by maturity/expiry date (e.g., 28MAR25, 27JUN25)"},"limit":{"default":100,"example":100,"type":"number","description":"Maximum number of instruments to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor from a previous response"},"asset_class":{"example":"equity","type":"string","enum":["crypto","equity","commodity","forex","index"],"description":"Filter by asset class. Defaults to all classes. Use \"equity\"/\"commodity\"/\"forex\"/\"index\" to scope to non-crypto perps (NVDA/TSLA equity perps, GOLD/OIL commodity perps, EURUSD FX perps, etc.). Discover available instruments via /api/v1/macro/catalog."},"sub_exchange":{"example":"xyz","type":"string","description":"Filter by sub-venue. Used for Hyperliquid HIP-3 deployers: xyz, flx, km, cash, vntl, hyna. Empty string matches single-venue exchanges."}}}}}}}},"/api/v1/perpetuals/metadata":{"get":{"description":"Returns metadata for a specific perpetual instrument including data availability, total record count, and pagination information.","operationId":"Perpetuals Metadata","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name","schema":{"example":"deribit","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Number of records per page for pagination calculation","schema":{"minimum":1,"maximum":100,"default":100,"example":100,"type":"number"}},{"name":"instrument_name","required":true,"in":"query","description":"Instrument name","schema":{"example":"BTC-PERPETUAL","type":"string"}}],"responses":{"200":{"description":"Metadata successfully retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataResponseEntity"}}}},"400":{"description":"Bad Request - Invalid parameters or no data found","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Metadata","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name"},"limit":{"minimum":1,"maximum":100,"default":100,"example":100,"type":"number","description":"Number of records per page for pagination calculation"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Instrument name"}},"required":["exchange","instrument_name"]}}}}}},"/api/v1/perpetuals/ohlcvt":{"get":{"description":"Trade-price OHLC plus interval buy/sell volume, trade counts, liquidation and block-trade volume per UTC bucket. Minutes without executions are synthetic mark-filled candles (OHLC = mark price, trades_count = 0); a price is not evidence of an execution. Coarser OHLC uses first open, maximum high, minimum low and last close; VWAP is traded-volume weighted, and a zero-volume bucket uses the mean minute reference price. mark_price and index_price are final-minute values, not OHLC. liquidation_short_volume is forced buying (shorts liquidated); liquidation_long_volume is forced selling (longs liquidated).\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nCount of retained trades in the bucket; 0 marks a synthetic mark-filled candle.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.ohlcvt. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals OHLCVT Market Data","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)","schema":{"example":"BTC-PERPETUAL","type":"string"}}],"responses":{"200":{"description":"OHLCVT data successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PerpetualsOhlcvtEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","open":103796,"high":103820,"low":103658.5,"close":103673,"vwap":103699.66571160624,"volume":6184600,"buy_volume":1253540,"sell_volume":4931060,"trades_count":419,"buy_trades_count":54,"sell_trades_count":365,"liquidation_short_volume":null,"liquidation_long_volume":null,"block_trade_buy_volume":null,"block_trade_sell_volume":null,"mark_price":103690.42,"index_price":103715.64},{"date":"2025-11-04 11:01:00","open":103673,"high":103721,"low":103620.5,"close":103620.5,"vwap":103672.90218204964,"volume":2230930,"buy_volume":325270,"sell_volume":1905660,"trades_count":204,"buy_trades_count":35,"sell_trades_count":169,"liquidation_short_volume":15430,"liquidation_long_volume":28950,"block_trade_buy_volume":null,"block_trade_sell_volume":null,"mark_price":103619.18,"index_price":103641.58},{"date":"2025-11-04 11:02:00","open":103610,"high":103745,"low":103610,"close":103672.5,"vwap":103706.1497721229,"volume":3613790,"buy_volume":1379460,"sell_volume":2234330,"trades_count":231,"buy_trades_count":70,"sell_trades_count":161,"liquidation_short_volume":null,"liquidation_long_volume":null,"block_trade_buy_volume":250000,"block_trade_sell_volume":180000,"mark_price":103662.33,"index_price":103686.53}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals OHLCVT Market Data","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)"}}}}}}}},"/api/v1/perpetuals/level1":{"get":{"description":"Best bid/ask price OHLC, displayed bid/ask size OHLC, bid_ask_spread OHLC and total_liquidity (bid size + ask size) OHLC plus average per bucket. Only minutes with at least one quote update contribute; buckets without them are absent, not zero-filled. No size or spread averages are returned. Top of book only: not depth, order IDs, queue position or an executable quote replay.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.level1. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals Level 1","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)","schema":{"example":"BTC-PERPETUAL","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseBookEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","bid_price_open":103795.5,"bid_price_high":103819.5,"bid_price_low":103658.5,"bid_price_close":103673,"ask_price_open":103796,"ask_price_high":103820,"ask_price_low":103666,"ask_price_close":103673.5,"bid_size_open":141100,"bid_size_high":315370,"bid_size_low":20,"bid_size_close":175500,"ask_size_open":160120,"ask_size_high":859690,"ask_size_low":20,"ask_size_close":199550,"bid_ask_spread_open":0.5,"bid_ask_spread_high":34.5,"bid_ask_spread_low":0.5,"bid_ask_spread_close":0.5,"total_liquidity_open":244470,"total_liquidity_high":870680,"total_liquidity_low":140,"total_liquidity_close":375050,"total_liquidity_avg":346298.3168859649},{"date":"2025-11-04 11:01:00","bid_price_open":103673,"bid_price_high":103726,"bid_price_low":103609.5,"bid_price_close":103609.5,"ask_price_open":103673.5,"ask_price_high":103726.5,"ask_price_low":103610,"ask_price_close":103610,"bid_size_open":173630,"bid_size_high":429090,"bid_size_low":140,"bid_size_close":208530,"ask_size_open":175750,"ask_size_high":824410,"ask_size_low":40,"ask_size_close":176980,"bid_ask_spread_open":0.5,"bid_ask_spread_high":39.5,"bid_ask_spread_low":0.5,"bid_ask_spread_close":0.5,"total_liquidity_open":260070,"total_liquidity_high":1014770,"total_liquidity_low":13470,"total_liquidity_close":385510,"total_liquidity_avg":441197.5935828877},{"date":"2025-11-04 11:02:00","bid_price_open":103609.5,"bid_price_high":103744.5,"bid_price_low":103609.5,"bid_price_close":103655,"ask_price_open":103610,"ask_price_high":103745,"ask_price_low":103610,"ask_price_close":103655.5,"bid_size_open":182250,"bid_size_high":581540,"bid_size_low":20,"bid_size_close":133120,"ask_size_open":196980,"ask_size_high":565090,"ask_size_low":20,"ask_size_close":320250,"bid_ask_spread_open":0.5,"bid_ask_spread_high":32,"bid_ask_spread_low":0.5,"bid_ask_spread_close":0.5,"total_liquidity_open":461780,"total_liquidity_high":768070,"total_liquidity_low":1820,"total_liquidity_close":453370,"total_liquidity_avg":317816.1932938856}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Level 1","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)"}}}}}}}},"/api/v1/perpetuals/orderbook":{"get":{"description":"Aggregated L2 depth per bucket: bid/ask liquidity (summed displayed size over the top 10, 20, 50 and 100 levels) and imbalance at each depth as open/high/low/close/avg, microprice open/high/low/close/avg, and snapshot_count (book snapshots, summed across minutes). Imbalance runs from -1 (ask-heavy) to +1 (bid-heavy). microprice is documented as the top-of-book size-weighted mid (bid × ask_size + ask × bid_size) / (bid_size + ask_size); the formula is not re-verified against samples. Coarser averages are unweighted means of minute averages.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end. For repeated reads with the same explicit bounds, selectors, resolution and sort order, compare all REST data rows separately from meta. meta.coverage.latest_observed_at, meta.completeness.complete_through and meta.completeness.updated_at can change while those rows stay unchanged. A full-response hash or ETag is not a data-only revision identifier; no per-window data revision field is exposed. Follow every page and preserve every row field, null and zero. MCP compaction can omit fields or round values, so use REST for exact data comparisons. This is not a historical-immutability or original-availability guarantee.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.orderbook. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals L2 Orderbook","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)","schema":{"example":"BTC-PERPETUAL","type":"string"}}],"responses":{"200":{"description":"L2 orderbook data successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseL2OrderbookEntity"}}}}]},"example":{"data":[{"date":"2026-01-22 07:20:00","exchange":"bybit","instrument_name":"BTCUSDT","currency":"BTC","bid_liq_10_open":0.301,"bid_liq_10_high":0.55,"bid_liq_10_low":0.15,"bid_liq_10_close":0.42,"bid_liq_10_avg":0.35,"bid_liq_20_open":0.359,"bid_liq_20_high":0.8,"bid_liq_20_low":0.2,"bid_liq_20_close":0.5,"bid_liq_20_avg":0.45,"bid_liq_50_open":7.831,"bid_liq_50_high":10.5,"bid_liq_50_low":5.2,"bid_liq_50_close":8.1,"bid_liq_50_avg":7.5,"bid_liq_100_open":12.891,"bid_liq_100_high":18,"bid_liq_100_low":9,"bid_liq_100_close":14.5,"bid_liq_100_avg":13.2,"ask_liq_10_open":5.375,"ask_liq_10_high":6.2,"ask_liq_10_low":4.1,"ask_liq_10_close":5.1,"ask_liq_10_avg":5,"ask_liq_20_open":6.398,"ask_liq_20_high":8,"ask_liq_20_low":4.5,"ask_liq_20_close":6,"ask_liq_20_avg":5.8,"ask_liq_50_open":18.966,"ask_liq_50_high":22,"ask_liq_50_low":15,"ask_liq_50_close":19.5,"ask_liq_50_avg":18.2,"ask_liq_100_open":40.834,"ask_liq_100_high":50,"ask_liq_100_low":30,"ask_liq_100_close":42,"ask_liq_100_avg":39.5,"imbalance_10_open":-0.894,"imbalance_10_high":-0.5,"imbalance_10_low":-0.95,"imbalance_10_close":-0.82,"imbalance_10_avg":-0.78,"imbalance_20_open":-0.894,"imbalance_20_high":-0.5,"imbalance_20_low":-0.95,"imbalance_20_close":-0.82,"imbalance_20_avg":-0.78,"imbalance_50_open":-0.416,"imbalance_50_high":-0.1,"imbalance_50_low":-0.6,"imbalance_50_close":-0.35,"imbalance_50_avg":-0.38,"imbalance_100_open":-0.52,"imbalance_100_high":-0.2,"imbalance_100_low":-0.7,"imbalance_100_close":-0.45,"imbalance_100_avg":-0.48,"microprice_open":89967.9,"microprice_high":89975,"microprice_low":89960,"microprice_close":89970.5,"microprice_avg":89968.2,"snapshot_count":60}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI2LTAxLTIyIDA3OjIxOjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals L2 Orderbook","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)"}}}}}}}},"/api/v1/perpetuals/orderbook-raw":{"get":{"description":"Individual retained L2 book snapshots, kept for a rolling 30 days: up to 100 bid and ask levels as {price, size} (best first), depth, pre-computed liquidity and imbalance at depths 10/20/50/100, microprice, margin_type and multiplier (null when not recorded). Not aggregated. Pages are keyset-ordered by (timestamp, exchange, instrument_name), so snapshots sharing a millisecond are not skipped.\n\nSnapshot event time in timestamp; date is the same instant truncated to whole seconds (.000Z). Order by timestamp.\n\nIndividual events; no resolution parameter.\n\nInclusive millisecond event-time bounds [start, end]. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Raw L2 snapshots are kept for a rolling 30-day window.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.orderbook_raw. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals L2 Orderbook Raw","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction. Defaults to ASC for instrument mode, DESC for currency mode.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full perpetual instrument identifier (e.g., BTC-PERPETUAL). Either instrument_name or currency is required.","schema":{"example":"BTC-PERPETUAL","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL perpetuals for this currency. Either currency or instrument_name is required.","schema":{"example":"BTC","type":"string"}},{"name":"direction","required":false,"in":"query","description":"Filter by trade direction (aggressor side)","schema":{"type":"string","enum":["buy","sell"]}},{"name":"block_only","required":false,"in":"query","description":"If true, only return trades with a block_trade_id (block trades).","schema":{"default":false,"type":"boolean"}},{"name":"min_amount","required":false,"in":"query","description":"Minimum trade amount in the venue-native trade amount unit (e.g. USD on Deribit inverse, USDT notional on Binance USDT-M). Filters out dust trades.","schema":{"example":1,"type":"number"}},{"name":"strategy","required":false,"in":"query","description":"Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread).","schema":{"type":"string","enum":["COMBO_HEDGE_ROLL_TO_FUTURE","COMBO_HEDGE_ROLL_TO_PERP","COMBO_MULTI_LEG_1","COMBO_PERP_VS_FUTURE","Closed COMBO_MULTI_LEG_1","Closed COMBO_PERP_VS_FUTURE_UNWIND","Closed LONG_PERP","Closed SHORT_PERP","LONG_PERP","Opened COMBO_MULTI_LEG_1","Opened COMBO_PERP_VS_FUTURE_SPREAD","Opened LONG_PERP","Opened SHORT_PERP","SHORT_PERP"]}},{"name":"sort","required":false,"in":"query","description":"Sort field. Default: timestamp.","schema":{"default":"timestamp","type":"string","enum":["timestamp","amount","price"]}},{"name":"top_n","required":false,"in":"query","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned.","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":"Raw L2 orderbook snapshots successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseL2OrderbookRawEntity"}}}}]},"example":{"data":[{"timestamp":1769066457868,"date":"2026-01-22T07:20:57.000Z","exchange":"bybit","instrument_name":"BTCUSDT","currency":"BTC","margin_type":"linear","multiplier":1,"depth":100,"bids":[{"price":89967.9,"size":0.169},{"price":89967.8,"size":0.002}],"asks":[{"price":89968,"size":3.085},{"price":89968.2,"size":0.002}],"bid_liquidity_10":0.301,"ask_liquidity_10":5.375,"bid_liquidity_20":0.359,"ask_liquidity_20":6.398,"bid_liquidity_50":7.831,"ask_liquidity_50":18.966,"bid_liquidity_100":12.891,"ask_liquidity_100":40.834,"imbalance_10":-0.894,"imbalance_20":-0.894,"imbalance_50":-0.416,"imbalance_100":-0.52,"microprice":89967.905}],"meta":{"next_cursor":"eyJ0aW1lc3RhbXAiOjE3NjkwNjY0NTc4Njh9"}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals L2 Orderbook Raw Snapshots","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction. Defaults to ASC for instrument mode, DESC for currency mode."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance)"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full perpetual instrument identifier (e.g., BTC-PERPETUAL). Either instrument_name or currency is required."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL perpetuals for this currency. Either currency or instrument_name is required."},"direction":{"type":"string","enum":["buy","sell"],"description":"Filter by trade direction (aggressor side)"},"block_only":{"default":false,"type":"boolean","description":"If true, only return trades with a block_trade_id (block trades)."},"min_amount":{"example":1,"type":"number","description":"Minimum trade amount in the venue-native trade amount unit (e.g. USD on Deribit inverse, USDT notional on Binance USDT-M). Filters out dust trades."},"strategy":{"example":"calendar_spread","type":"string","description":"Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread)."},"sort":{"default":"timestamp","type":"string","enum":["timestamp","amount","price"],"description":"Sort field. Default: timestamp."},"top_n":{"example":20,"type":"number","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned."}}}}}}}},"/api/v1/perpetuals/volume":{"get":{"description":"Per bucket for one instrument: the latest venue-reported rolling volume_24h and volume_usd_24h from the final ticker minute, plus interval buy_volume, sell_volume, volume (= buy + sell) and trade counts summed from trade candles. Buckets come from ticker data: a bucket without a ticker row is absent even if it had trades. instrument_name is required; currency selection is not supported.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nvolume_24h is the venue-reported rolling 24-hour volume in base coin (verified on Deribit inverse); volume_usd_24h is the rolling 24-hour volume in USD. Both are latest rolling states, not sums over the requested interval.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.volume. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals Volume Stats","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)","schema":{"example":"BTC-PERPETUAL","type":"string"}}],"responses":{"200":{"description":"Successfully retrieved perpetuals volume data","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseVolumeDataEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","volume_24h":13306.97626536,"volume_usd_24h":1408049640},{"date":"2025-11-04 11:01:00","volume_24h":13325.84296037,"volume_usd_24h":1409996050},{"date":"2025-11-04 11:02:00","volume_24h":13359.76934158,"volume_usd_24h":1413511150}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Volume Stats","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)"}}}}}}}},"/api/v1/perpetuals/trades/summary":{"get":{"description":"Aggregates retained raw perpetual trades (rolling 30 days) of one exchange and base currency over [start, end], grouped by exchange, instrument_name, direction or strategy: trade_count, volume, buy/sell volume, net_oi_change, block-trade count/volume, avg_price and vwap, plus metadata totals (group_by, total_trades, total_volume). Filters: direction, block_only, min_amount, strategy.\n\nWindow aggregate over trade event times in [start, end]; result rows carry no bucket timestamp.\n\nOne row per group over the whole window; no time buckets.\n\nInclusive millisecond event-time bounds [start, end]. Omitted start defaults to 24 hours before end, or before the request time without end. Omitted end is the request time. exchange and currency are required.\n\nvolume, buy_volume, sell_volume and block_trade_volume sum trade amount, and net_oi_change sums trade-level oi_change, in venue-native units added across instruments (e.g. Deribit inverse USD with linear base-coin amounts); not comparable across margin types.\n\nTrade amount is venue-native with no unit column: USD on Deribit inverse, observed as USDC notional on Deribit USDC linear, USDT notional on Binance USDT-M. Binance COIN-M and other venues are unverified. min_amount filters in this same unit.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified. avg_price is an unweighted mean of trade prices; vwap is amount-weighted.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Raw trades are kept for a rolling 30-day window; earlier observed rows are sparse residuals, not continuous history.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.trades_summary. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals Trades Summary","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., deribit, binance)","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":true,"in":"query","description":"Base currency (e.g. BTC, ETH)","schema":{"example":"BTC","type":"string"}},{"name":"group_by","required":true,"in":"query","description":"Axis to group results by","schema":{"type":"string","enum":["exchange","instrument_name","direction","strategy"]}},{"name":"direction","required":false,"in":"query","description":"Filter by trade direction","schema":{"type":"string","enum":["buy","sell"]}},{"name":"block_only","required":false,"in":"query","description":"If true, only include block trades.","schema":{"default":false,"type":"boolean"}},{"name":"min_amount","required":false,"in":"query","description":"Minimum trade amount in the venue-native trade amount unit.","schema":{"type":"number"}},{"name":"strategy","required":false,"in":"query","description":"Filter by strategy label. Accepts comma-separated values.","schema":{"type":"string","enum":["COMBO_HEDGE_ROLL_TO_FUTURE","COMBO_HEDGE_ROLL_TO_PERP","COMBO_MULTI_LEG_1","COMBO_PERP_VS_FUTURE","Closed COMBO_MULTI_LEG_1","Closed COMBO_PERP_VS_FUTURE_UNWIND","Closed LONG_PERP","Closed SHORT_PERP","LONG_PERP","Opened COMBO_MULTI_LEG_1","Opened COMBO_PERP_VS_FUTURE_SPREAD","Opened LONG_PERP","Opened SHORT_PERP","SHORT_PERP"]}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"group_key":"BTC-PERPETUAL","trade_count":5000,"volume":12345.6,"buy_volume":6500.3,"sell_volume":5845.3,"net_oi_change":450.2,"block_trade_count":12,"block_trade_volume":800,"avg_price":95000,"vwap":95050}],"metadata":{"group_by":"instrument_name","total_trades":5000,"total_volume":12345.6}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Trades Summary","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH)"},"group_by":{"type":"string","enum":["exchange","instrument_name","direction","strategy"],"description":"Axis to group results by"},"direction":{"type":"string","enum":["buy","sell"],"description":"Filter by trade direction"},"block_only":{"default":false,"type":"boolean","description":"If true, only include block trades."},"min_amount":{"type":"number","description":"Minimum trade amount in the venue-native trade amount unit."},"strategy":{"type":"string","description":"Filter by strategy label. Accepts comma-separated values."}},"required":["exchange","currency","group_by"]}}}}}},"/api/v1/perpetuals/flow":{"get":{"description":"One summary of retained raw trades (rolling 30 days) for one exchange and base currency over [start, end]: total_trades, total/buy/sell volume (sum of amount), net_oi_change, block-trade count/volume, avg_price (unweighted) and vwap (amount-weighted); most_active_instruments (top_n by summed amount) and notable_trades (top_n largest by amount, which compares units across instruments); plus liquidation stats for the same exchange, currency and window (counts and USD totals by long/short side, largest) with notable_liquidations (largest by amount_usd). min_amount filters trades only. Venues without a liquidation feed (e.g. Deribit) report zero liquidation stats.\n\nWindow aggregate over trade event times in [start, end]; result rows carry no bucket timestamp.\n\nOne summary over the whole window; no time buckets.\n\nInclusive millisecond event-time bounds [start, end]. Omitted start defaults to 24 hours before end, or before the request time without end. Omitted end is the request time. exchange and currency are required.\n\nvolume, buy_volume, sell_volume and block_trade_volume sum trade amount, and net_oi_change sums trade-level oi_change, in venue-native units added across instruments (e.g. Deribit inverse USD with linear base-coin amounts); not comparable across margin types.\n\nTrade amount is venue-native with no unit column: USD on Deribit inverse, observed as USDC notional on Deribit USDC linear, USDT notional on Binance USDT-M. Binance COIN-M and other venues are unverified. min_amount filters in this same unit.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified. avg_price is an unweighted mean of trade prices; vwap is amount-weighted.\n\nLiquidation totals are USD sums of amount_usd.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Raw trades are kept for a rolling 30-day window; earlier observed rows are sparse residuals, not continuous history.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.flow. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals Flow Summary","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., deribit, binance)","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":true,"in":"query","description":"Base currency (e.g. BTC, ETH). Required.","schema":{"example":"BTC","type":"string"}},{"name":"min_amount","required":false,"in":"query","description":"Minimum trade amount (venue-native trade amount unit) per trade to include. Applies to trades only (summary, most-active instruments, notable trades); liquidation stats are not size-filtered.","schema":{"example":1,"type":"number"}},{"name":"top_n","required":false,"in":"query","description":"Number of notable trades and most active instruments to return. Default 10.","schema":{"default":10,"example":10,"type":"number"}}],"responses":{"200":{"description":"Flow summary successfully retrieved","content":{"application/json":{"example":{"summary":{"total_trades":5000,"total_volume":12345.6,"buy_volume":6500.3,"sell_volume":5845.3,"net_oi_change":450.2,"block_trade_count":12,"block_trade_volume":800,"avg_price":95000,"vwap":95050,"most_active_instruments":[{"instrument_name":"BTC-PERPETUAL","trade_count":3000,"volume":8000,"net_oi_change":200}],"liquidation_count":120,"long_liquidation_count":75,"short_liquidation_count":45,"total_liquidation_usd":8500000,"long_liquidation_usd":5500000,"short_liquidation_usd":3000000,"largest_liquidation_usd":500000},"notable_trades":[],"notable_liquidations":[]}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Flow Summary","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH). Required."},"min_amount":{"example":1,"type":"number","description":"Minimum trade amount (venue-native trade amount unit) per trade to include. Applies to trades only (summary, most-active instruments, notable trades); liquidation stats are not size-filtered."},"top_n":{"default":10,"example":10,"type":"number","description":"Number of notable trades and most active instruments to return. Default 10."}},"required":["exchange","currency"]}}}}}},"/api/v1/perpetuals/trades":{"get":{"description":"Individual retained executed trades, kept for a rolling 30 days: trade_id, price, amount, direction, tick_direction, index_price, basis (price − index; null without a usable index), trade-level open_interest/oi_before/oi_change, funding (omitted when not reported), maturity and block/combo/strategy identifiers. Not mark-filled bars. Rows carry instrument_name but no exchange or currency field; pass exchange to avoid mixing venues. Instrument mode (instrument_name) or currency mode (all perpetuals of a base currency).\n\nVenue trade event time. date is UTC with a space separator and no 'Z' (not ISO 8601). Not Laevitas ingestion or publication time.\n\nIndividual events; no resolution parameter.\n\nInclusive millisecond event-time bounds [start, end]. Omitted start defaults to 24 hours before end, or before the request time without end. Sort by timestamp pages by keyset (timestamp, trade_id) without skipping same-millisecond trades; amount/price sorts page by offset. top_n returns the N largest by the sort field with no cursor.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nTrade amount is venue-native with no unit column: USD on Deribit inverse, observed as USDC notional on Deribit USDC linear, USDT notional on Binance USDT-M. Binance COIN-M and other venues are unverified. min_amount filters in this same unit.\n\nTrade-level open_interest, oi_before and oi_change are USD on Deribit inverse (unlike oi on /open-interest, which is base coin) and null where the venue reports no trade-level open interest (e.g. Binance). Genuine zero readings are kept.\n\nFunding values are decimals (0.0001 = 0.01%). funding_rate is the venue-native rate per funding interval (hourly on Hyperliquid, 8-hourly on Binance); funding_8h is normalized to 8 hours. Deribit inverse funding_rate has been observed as 0 while funding_8h is non-zero; its exact meaning there is unverified. Null when the venue does not report it.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Raw trades are kept for a rolling 30-day window; earlier observed rows are sparse residuals, not continuous history.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.trades. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.\n\nAdditional filters: direction, block_only, min_amount (in the trade amount unit), strategy, sort, sort_dir. top_n returns the N largest trades by the sort field without a cursor.","operationId":"Perpetuals Trade History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction. Defaults to ASC for instrument mode, DESC for currency mode.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full perpetual instrument identifier (e.g., BTC-PERPETUAL). Either instrument_name or currency is required.","schema":{"example":"BTC-PERPETUAL","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL perpetuals for this currency. Either currency or instrument_name is required.","schema":{"example":"BTC","type":"string"}},{"name":"direction","required":false,"in":"query","description":"Filter by trade direction (aggressor side)","schema":{"type":"string","enum":["buy","sell"]}},{"name":"block_only","required":false,"in":"query","description":"If true, only return trades with a block_trade_id (block trades).","schema":{"default":false,"type":"boolean"}},{"name":"min_amount","required":false,"in":"query","description":"Minimum trade amount in the venue-native trade amount unit (e.g. USD on Deribit inverse, USDT notional on Binance USDT-M). Filters out dust trades.","schema":{"example":1,"type":"number"}},{"name":"strategy","required":false,"in":"query","description":"Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread).","schema":{"type":"string","enum":["COMBO_HEDGE_ROLL_TO_FUTURE","COMBO_HEDGE_ROLL_TO_PERP","COMBO_MULTI_LEG_1","COMBO_PERP_VS_FUTURE","Closed COMBO_MULTI_LEG_1","Closed COMBO_PERP_VS_FUTURE_UNWIND","Closed LONG_PERP","Closed SHORT_PERP","LONG_PERP","Opened COMBO_MULTI_LEG_1","Opened COMBO_PERP_VS_FUTURE_SPREAD","Opened LONG_PERP","Opened SHORT_PERP","SHORT_PERP"]}},{"name":"sort","required":false,"in":"query","description":"Sort field. Default: timestamp.","schema":{"default":"timestamp","type":"string","enum":["timestamp","amount","price"]}},{"name":"top_n","required":false,"in":"query","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned.","schema":{"example":20,"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FuturesTradeEntity"}}}}]},"example":{"data":[{"instrument_name":"BTC-PERPETUAL","timestamp":1748936294661,"date":"2025-11-04 11:00:00","trade_id":"369968310","block_trade_id":"","combo_id":"BTC-FS-6JUN25_PERP","combo_trade_id":"369968308","strategy":"COMBO_PERP_VS_FUTURE","direction":"buy","tick_direction":0,"amount":500,"price":105306.5,"index_price":105306.68,"oi_change":null,"open_interest":968197530,"oi_before":968197530,"maturity":"PERPETUAL","basis":-0.17999999999301508,"funding":0.00001299},{"instrument_name":"BTC-PERPETUAL","timestamp":1748936295702,"date":"2025-11-04 11:00:00","trade_id":"369968315","block_trade_id":"","combo_id":"BTC-FS-6JUN25_PERP","combo_trade_id":"369968313","strategy":"COMBO_PERP_VS_FUTURE","direction":"buy","tick_direction":0,"amount":150,"price":105308,"index_price":105308.34,"oi_change":null,"open_interest":968197530,"oi_before":968197530,"maturity":"PERPETUAL","basis":-0.33999999999650754,"funding":0.00001299},{"instrument_name":"BTC-PERPETUAL","timestamp":1748936320292,"date":"2025-11-04 11:00:00","trade_id":"369968340","block_trade_id":"","combo_id":"BTC-FS-6JUN25_PERP","combo_trade_id":"369968338","strategy":"COMBO_PERP_VS_FUTURE","direction":"buy","tick_direction":0,"amount":500,"price":105307.5,"index_price":105310.39,"oi_change":null,"open_interest":968194400,"oi_before":968194400,"maturity":"PERPETUAL","basis":-2.889999999999418,"funding":0.00001299}],"meta":{"next_cursor":"eyJ0aW1lc3RhbXAiOiIxNzQ4OTk0NTQ5NDUyIiwidHJhZGVfaWQiOiIzNzAwNDk3NTEifQ=="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Trade History","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction. Defaults to ASC for instrument mode, DESC for currency mode."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance)"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full perpetual instrument identifier (e.g., BTC-PERPETUAL). Either instrument_name or currency is required."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL perpetuals for this currency. Either currency or instrument_name is required."},"direction":{"type":"string","enum":["buy","sell"],"description":"Filter by trade direction (aggressor side)"},"block_only":{"default":false,"type":"boolean","description":"If true, only return trades with a block_trade_id (block trades)."},"min_amount":{"example":1,"type":"number","description":"Minimum trade amount in the venue-native trade amount unit (e.g. USD on Deribit inverse, USDT notional on Binance USDT-M). Filters out dust trades."},"strategy":{"example":"calendar_spread","type":"string","description":"Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread)."},"sort":{"default":"timestamp","type":"string","enum":["timestamp","amount","price"],"description":"Sort field. Default: timestamp."},"top_n":{"example":20,"type":"number","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned."}}}}}}}},"/api/v1/perpetuals/open-interest":{"get":{"description":"Open-interest OHLC per bucket for one instrument: first open, maximum high, minimum low and last close of the minute OI states. Outstanding positions, not traded volume or a sum of minute OI. instrument_name is required; currency or cross-instrument aggregation is not supported.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end compare bucket starts, not source minutes: a bucket is returned only if its start lies in [start, end]. An unaligned start drops its containing bucket; an end inside a bucket returns the whole bucket, including minutes after end. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nOpen interest (oi, oi_*) in base coin: BTC for Deribit inverse BTC contracts, base coin for Deribit USDC linear and Binance USDT-M, converted to base coin for Binance COIN-M. Other venues are unverified.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.open_interest. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals Open Interest","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)","schema":{"example":"BTC-PERPETUAL","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseOpenInterestEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","oi_open":14483.836684775828,"oi_high":14494.975017789338,"oi_low":14480.302050051028,"oi_close":14484.75799403648},{"date":"2025-11-04 11:01:00","oi_open":14484.75799403648,"oi_high":14495.570477778463,"oi_low":14484.624753264488,"oi_close":14495.303282654815},{"date":"2025-11-04 11:02:00","oi_open":14495.306080458478,"oi_high":14495.349446553402,"oi_low":14470.044024835908,"oi_close":14479.21911460026}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Open Interest","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)"}}}}}}}},"/api/v1/perpetuals/ticker-history":{"get":{"description":"One final observed ticker state per UTC bucket (latest source minute, duplicates resolved deterministically): mark_price, index_price, best bid/ask and displayed sizes, bid_ask_spread, oi, volume_usd_24h, funding_rate and next_funding_time (Unix ms; null when not reported). Not OHLC and not interval sums; no volume_24h, funding_8h, settlement_price or total_liquidity. Buckets without ticker rows are absent. Use /perpetuals/carry for funding OHLC and funding_8h.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end. For repeated reads with the same explicit bounds, selectors, resolution and sort order, compare all REST data rows separately from meta. meta.coverage.latest_observed_at, meta.completeness.complete_through and meta.completeness.updated_at can change while those rows stay unchanged. A full-response hash or ETag is not a data-only revision identifier; no per-window data revision field is exposed. Follow every page and preserve every row field, null and zero. MCP compaction can omit fields or round values, so use REST for exact data comparisons. This is not a historical-immutability or original-availability guarantee.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nOpen interest (oi, oi_*) in base coin: BTC for Deribit inverse BTC contracts, base coin for Deribit USDC linear and Binance USDT-M, converted to base coin for Binance COIN-M. Other venues are unverified.\n\nvolume_usd_24h is the latest rolling 24-hour USD volume state, not bucket volume.\n\nFunding values are decimals (0.0001 = 0.01%). funding_rate is the venue-native rate per funding interval (hourly on Hyperliquid, 8-hourly on Binance); funding_8h is normalized to 8 hours. Deribit inverse funding_rate has been observed as 0 while funding_8h is non-zero; its exact meaning there is unverified. Null when the venue does not report it.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.ticker_history. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals Ticker History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)","schema":{"example":"BTC-PERPETUAL","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PerpetualsTickerDataEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","mark_price":103690.42,"index_price":103715.64,"bid_price":103673,"ask_price":103673.5,"bid_ask_spread":0.5,"bid_size":175500,"ask_size":199550,"oi":14484.75799403648,"volume_usd_24h":1408049640,"funding_rate":5,"next_funding_time":155},{"date":"2025-11-04 11:01:00","mark_price":103619.18,"index_price":103641.58,"bid_price":103609.5,"ask_price":103610,"bid_ask_spread":0.5,"bid_size":208530,"ask_size":176980,"oi":14495.303282654815,"volume_usd_24h":1409996050,"funding_rate":5,"next_funding_time":155},{"date":"2025-11-04 11:02:00","mark_price":103662.33,"index_price":103686.53,"bid_price":103655,"ask_price":103655.5,"bid_ask_spread":0.5,"bid_size":133120,"ask_size":320250,"oi":14479.21911460026,"volume_usd_24h":1413511150,"funding_rate":5,"next_funding_time":155}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Ticker History","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)"}}}}}}}},"/api/v1/perpetuals/carry":{"get":{"description":"Funding and basis per bucket for one perpetual: funding_rate and funding_8h OHLC, basis OHLC and annualized_carry = funding_8h_close × 3 × 365 × 100 (percent; null when funding_8h_close is missing). basis_open and basis_close are observed mark − index at the first and last source minute with a usable index; basis_high (maximum of mark_high − index_low) and basis_low (minimum of mark_low − index_high) are synthetic bounds, not observed basis values. Basis is null where the index is missing or zero. This is the perpetual funding endpoint (MCP: get_perpetuals_funding); there is no separate /funding route. It also serves macro perpetuals listed by /api/v1/macro/catalog.\n\nUTC bucket start as Unix milliseconds and as an ISO string in minute. This route has no date field.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end compare bucket starts, not source minutes: a bucket is returned only if its start lies in [start, end]. An unaligned start drops its containing bucket; an end inside a bucket returns the whole bucket, including minutes after end. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nFunding values are decimals (0.0001 = 0.01%). funding_rate is the venue-native rate per funding interval (hourly on Hyperliquid, 8-hourly on Binance); funding_8h is normalized to 8 hours. Deribit inverse funding_rate has been observed as 0 while funding_8h is non-zero; its exact meaning there is unverified. Null when the venue does not report it.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.carry. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals Carry","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)","schema":{"example":"BTC-PERPETUAL","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PerpetualsOhlcCarryEntity"}}}}]},"example":{"data":[{"timestamp":1762250400000,"minute":"2025-11-04 11:00:00","funding_rate_open":0,"funding_rate_high":0,"funding_rate_low":0,"funding_rate_close":0,"funding_8h_open":-0.00004634,"funding_8h_high":-0.00004628,"funding_8h_low":-0.00004634,"funding_8h_close":-0.00004628,"basis_open":-19.69999999999709,"basis_high":-18.820000000006985,"basis_low":-23.330000000001746,"basis_close":-25.220000000001164},{"timestamp":1762250460000,"minute":"2025-11-04 11:01:00","funding_rate_open":0,"funding_rate_high":0,"funding_rate_low":-0.00001633,"funding_rate_close":0,"funding_8h_open":-0.00004628,"funding_8h_high":-0.00004627,"funding_8h_low":-0.00004628,"funding_8h_close":-0.00004627,"basis_open":-25.220000000001164,"basis_high":-23.020000000004075,"basis_low":-22.39999999999418,"basis_close":-22.40000000000873},{"timestamp":1762250520000,"minute":"2025-11-04 11:02:00","funding_rate_open":0,"funding_rate_high":0,"funding_rate_low":0,"funding_rate_close":0,"funding_8h_open":-0.00004626,"funding_8h_high":-0.00004626,"funding_8h_low":-0.00004626,"funding_8h_close":-0.00004626,"basis_open":-22.70999999999185,"basis_high":-17.830000000001746,"basis_low":-22.729999999995925,"basis_close":-24.19999999999709}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Carry — funding rate, basis, annualized carry","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)"}}}}}}}},"/api/v1/perpetuals/reference-price":{"get":{"description":"Mark-price OHLC and index-price OHLC per bucket (first open, maximum high, minimum low, last close of the minute values). Source minutes with any missing or non-positive mark or index value are excluded, so gaps are absent rather than zero-filled. underlying_price is always null on this route. For basis and funding use /perpetuals/carry.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.reference_price. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals Reference Prices","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)","schema":{"example":"BTC-PERPETUAL","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FuturesOhlcrefDataEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","mark_price_open":103794.61,"mark_price_high":103815.84,"mark_price_low":103680.29,"mark_price_close":103690.42,"index_price_open":103814.31,"index_price_high":103834.66,"index_price_low":103703.62,"index_price_close":103715.64,"underlying_price":19321.37},{"date":"2025-11-04 11:01:00","mark_price_open":103690.42,"mark_price_high":103709.23,"mark_price_low":103617.27,"mark_price_close":103619.18,"index_price_open":103715.64,"index_price_high":103732.25,"index_price_low":103639.67,"index_price_close":103641.58,"underlying_price":19321.37},{"date":"2025-11-04 11:02:00","mark_price_open":103619.16,"mark_price_high":103737.92,"mark_price_low":103618.85,"mark_price_close":103662.33,"index_price_open":103641.87,"index_price_high":103755.75,"index_price_low":103641.58,"index_price_close":103686.53,"underlying_price":19321.37}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Reference Prices","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, nado)"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)"}}}}}}}},"/api/v1/perpetuals/snapshot":{"get":{"description":"Cross-instrument perpetual chain for one exchange (optional currency) at one minute or bucket: final ticker state per instrument (mark/index price, best bid/ask and sizes, bid_ask_spread, oi, volume_usd_24h, funding_rate, next_funding_time) joined with that minute or bucket’s trade-candle open/high/low/close, vwap, buy/sell volume, volume and trade counts. Open interest is named oi; no volume_24h.\n\nSelected UTC minute (1m) or bucket start shared by every row; meta.date repeats it.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nAt 1m, date must equal a retained minute exactly (non-zero seconds return an empty chain); there is no nearest-minute fallback. Omitted date selects the latest minute observed for that exchange (and currency) in the current or previous UTC day. At coarser resolutions date selects the whole containing UTC bucket, including observations after date: ticker fields are each instrument’s last minute in the bucket and candle fields aggregate the bucket. Not an as-of cutoff. meta.date and meta.next_date name the selected and following minute/bucket. REST returns every matching instrument without a limit.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nOpen interest (oi, oi_*) in base coin: BTC for Deribit inverse BTC contracts, base coin for Deribit USDC linear and Binance USDT-M, converted to base coin for Binance COIN-M. Other venues are unverified.\n\nFunding values are decimals (0.0001 = 0.01%). funding_rate is the venue-native rate per funding interval (hourly on Hyperliquid, 8-hourly on Binance); funding_8h is normalized to 8 hours. Deribit inverse funding_rate has been observed as 0 while funding_8h is non-zero; its exact meaning there is unverified. Null when the venue does not report it.\n\nInstruments with retained ticker rows at the selected minute/bucket, not a join against the current catalog; expired contracts appear on historical dates. Does not certify listed or open-for-trading status.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.snapshot. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Perpetuals Snapshot","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, bullish, derive, paradex). Required.","schema":{"example":"deribit","type":"string"}},{"name":"date","required":false,"in":"query","description":"At 1m, exact retained minute (use :00 seconds), not nearest minute; other seconds return no rows. At coarser resolutions selects the entire containing UTC bucket, including observations after date; not an as-of cutoff. Omit for the latest matching snapshot.","schema":{"format":"date-time","example":"2026-01-20T10:00:00Z","type":"string"}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for the snapshot. The 1m default is a persisted aggregate of finer source events, not a raw exchange-event feed. Higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"currency","required":false,"in":"query","description":"Base currency filter (e.g., BTC, ETH)","schema":{"example":"BTC","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"date":"2025-11-04 11:00:00","exchange":"deribit","instrument_name":"BTC-PERPETUAL","currency":"BTC","mark_price":103690.42,"index_price":103715.64,"bid_price":103673,"ask_price":103673.5,"bid_ask_spread":0.5,"bid_size":175500,"ask_size":199550,"oi":14484.76,"volume_usd_24h":1408049640,"funding_rate":5,"next_funding_time":1733788800000},{"date":"2025-11-04 11:00:00","exchange":"deribit","instrument_name":"ETH-PERPETUAL","currency":"ETH","mark_price":3180.25,"index_price":3182.1,"bid_price":3179.5,"ask_price":3180,"bid_ask_spread":0.5,"bid_size":50000,"ask_size":60000,"oi":48200.3,"volume_usd_24h":520400000,"funding_rate":3.2,"next_funding_time":1733788800000}],"meta":{"minute":"2025-11-04 11:00:00"}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Snapshot","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, bullish, derive, paradex). Required."},"date":{"format":"date-time","example":"2026-01-20T10:00:00Z","type":"string","description":"At 1m, exact retained minute (use :00 seconds), not nearest minute; other seconds return no rows. At coarser resolutions selects the entire containing UTC bucket, including observations after date; not an as-of cutoff. Omit for the latest matching snapshot."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for the snapshot. The 1m default is a persisted aggregate of finer source events, not a raw exchange-event feed. Higher resolutions roll up those 1m records."},"currency":{"example":"BTC","type":"string","description":"Base currency filter (e.g., BTC, ETH)"}},"required":["exchange"]}}}}}},"/api/v1/perpetuals/liquidations":{"get":{"description":"Individual retained forced-liquidation events, with all stored history per exchange served (no rolling retention): price, amount, amount_base, amount_usd, direction (liquidation order side: sell closes longs, buy closes shorts), position_side (position liquidated), category, mark/index price, margin_type, trade_id and order_id. Filter by instrument_name or currency, direction, position_side and min_amount_usd. An empty response carries meta.empty_reason. Served exchanges: binance, bybit, hyperliquid, kraken, lighter, nado, okx. Deribit is not served.\n\nVenue liquidation event time; date is derived from timestamp. Not Laevitas ingestion or publication time.\n\nIndividual events; no resolution parameter.\n\nInclusive millisecond event-time bounds [start, end]. Omitted start defaults to 24 hours before end, or before the request time without end. Sort by timestamp (default DESC) pages by keyset (timestamp, exchange, instrument_name, trade_id, order_id) without skipping same-millisecond events; amount_usd/price sorts page by offset.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\namount is the venue-native liquidation quantity (contracts or coin; per-venue convention unverified); amount_base is base coin; amount_usd = price × amount_base. min_amount_usd filters on amount_usd.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nNo rolling query TTL: all stored history per exchange is exposed. Coverage bounds are observed event boundaries, not completeness watermarks; an empty response carries meta.empty_reason (unsupported_exchange, ineligible_instrument, outside_coverage, no_matching_data).\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.liquidations. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.\n\nWhen data is empty, meta.empty_reason distinguishes unsupported_exchange, ineligible_instrument, outside_coverage and no_matching_data. Coverage timestamps are observed event boundaries, not completeness watermarks.","operationId":"Perpetuals Liquidation History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction. Defaults to DESC (newest/largest first).","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name. Served exchanges: binance, bybit, hyperliquid, kraken, lighter, nado, and okx. Catalog membership does not guarantee that liquidation events exist for an instrument.","schema":{"example":"binance","type":"string","enum":["binance","bybit","hyperliquid","kraken","lighter","nado","okx"]}},{"name":"instrument_name","required":false,"in":"query","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)","schema":{"example":"BTC-PERPETUAL","type":"string"}},{"name":"direction","required":false,"in":"query","description":"Filter by liquidation order direction (buy = short squeeze, sell = long liquidation)","schema":{"type":"string","enum":["buy","sell"]}},{"name":"position_side","required":false,"in":"query","description":"Filter by position side being liquidated","schema":{"type":"string","enum":["long","short"]}},{"name":"min_amount_usd","required":false,"in":"query","description":"Minimum liquidation value in USD. Filters out small liquidations.","schema":{"example":1000,"type":"number"}},{"name":"sort","required":false,"in":"query","description":"Sort field. Default: timestamp.","schema":{"default":"timestamp","type":"string","enum":["timestamp","amount_usd","price"]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LiquidationEntity"}},"meta":{"$ref":"#/components/schemas/DataAvailabilityPaginationMetaEntity"}}},"example":{"data":[{"instrument_name":"BTCUSDT","timestamp":1772104946628,"date":"2026-02-26T18:22:26.628Z","exchange":"binance","currency":"BTC","direction":"sell","position_side":"long","category":"forced","price":68187.4,"amount":0.075,"amount_base":0.075,"amount_usd":5114.05,"mark_price":68187.5,"index_price":68222.5,"margin_type":"linear","maturity":null,"days_to_expiry":null,"trade_id":null,"order_id":null},{"instrument_name":"ENSOUSDT","timestamp":1772104947089,"date":"2026-02-26T18:22:27.089Z","exchange":"binance","currency":"ENSO","direction":"sell","position_side":"long","category":"forced","price":1.5442,"amount":21.7,"amount_base":21.7,"amount_usd":33.51,"mark_price":1.5444,"index_price":1.6229,"margin_type":"linear","maturity":null,"days_to_expiry":null,"trade_id":null,"order_id":null}],"meta":{"next_cursor":"eyJ0aW1lc3RhbXAiOjE3NzIxMDQ5NDYwMDB9","empty_reason":null,"coverage":{"source_id":"perpetuals.liquidations","exchange_supported":true,"instrument_eligible":true,"earliest_observed_at":null,"latest_observed_at":null}}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Perpetuals Liquidation History","tags":["Perpetuals"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"DESC","type":"string","enum":["ASC","DESC"],"description":"Sort direction. Defaults to DESC (newest/largest first)."},"exchange":{"example":"binance","type":"string","enum":["binance","bybit","hyperliquid","kraken","lighter","nado","okx"],"description":"Exchange name. Served exchanges: binance, bybit, hyperliquid, kraken, lighter, nado, and okx. Catalog membership does not guarantee that liquidation events exist for an instrument."},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)"},"direction":{"type":"string","enum":["buy","sell"],"description":"Filter by liquidation order direction (buy = short squeeze, sell = long liquidation)"},"position_side":{"type":"string","enum":["long","short"],"description":"Filter by position side being liquidated"},"min_amount_usd":{"example":1000,"type":"number","description":"Minimum liquidation value in USD. Filters out small liquidations."},"sort":{"default":"timestamp","type":"string","enum":["timestamp","amount_usd","price"],"description":"Sort field. Default: timestamp."}}}}}}}},"/api/v1/futures/catalog":{"get":{"description":"Dated futures observed in the last 24 hours and unexpired at request time, using exchange-published expiry timestamps where available and otherwise the latest observed days_to_expiry advanced to the request time. Not an all-history catalog: expired contracts remain requestable by name on the data routes.\n\nCurrent discovery, not a historical listed/open-for-trading timeline.\n\nInstrument inventory, not a time series.\n\nFilter exchange, currency and maturity; follow next_cursor. total counts the whole matching list.\n\nRecently observed and unexpired, not certified historical trading eligibility.\n\nUse selector-scoped data coverage, historical snapshots or a known instrument name, not this current catalog, to investigate history. Absence from the catalog does not establish absence of history.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.catalog. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures Catalog","parameters":[{"name":"exchange","required":false,"in":"query","description":"Filter by exchange (e.g., deribit, binance, okx, bybit, hyperliquid)","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Filter by base currency (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"maturity","required":false,"in":"query","description":"Filter by maturity/expiry date (e.g., 23OCT26, 27JUN25)","schema":{"example":"23OCT26","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of instruments to return (1-1000)","schema":{"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from a previous response","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":[{"instrument_name":"BNBUSD_251226","exchange":"binance"},{"instrument_name":"BNBUSD_260327","exchange":"binance"},{"instrument_name":"BTC-23OCT26","exchange":"deribit"}]}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Catalog","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Filter by exchange (e.g., deribit, binance, okx, bybit, hyperliquid)"},"currency":{"example":"BTC","type":"string","description":"Filter by base currency (e.g., BTC, ETH, SOL)"},"maturity":{"example":"23OCT26","type":"string","description":"Filter by maturity/expiry date (e.g., 23OCT26, 27JUN25)"},"limit":{"default":100,"example":100,"type":"number","description":"Maximum number of instruments to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor from a previous response"}}}}}}}},"/api/v1/futures/metadata":{"get":{"description":"Returns metadata for a specific futures instrument including data availability, total record count, and pagination information.","operationId":"Futures Metadata","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name","schema":{"example":"deribit","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Number of records per page for pagination calculation","schema":{"minimum":1,"maximum":100,"default":100,"example":100,"type":"number"}},{"name":"instrument_name","required":true,"in":"query","description":"Instrument name","schema":{"example":"BTC-23OCT26","type":"string"}}],"responses":{"200":{"description":"Metadata successfully retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataResponseEntity"}}}},"400":{"description":"Bad Request - Invalid parameters or no data found","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Metadata","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name"},"limit":{"minimum":1,"maximum":100,"default":100,"example":100,"type":"number","description":"Number of records per page for pagination calculation"},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Instrument name"}},"required":["exchange","instrument_name"]}}}}}},"/api/v1/futures/ohlcvt":{"get":{"description":"Trade-price OHLC plus interval buy/sell volume, trade counts, liquidation and block-trade volume per UTC bucket. Minutes without executions are synthetic mark-filled candles (OHLC = mark price, trades_count = 0); a price is not evidence of an execution. Coarser OHLC uses first open, maximum high, minimum low and last close; VWAP is traded-volume weighted, and a zero-volume bucket uses the mean minute reference price. mark_price and index_price are final-minute values, not OHLC. liquidation_short_volume is forced buying (shorts liquidated); liquidation_long_volume is forced selling (longs liquidated). days_to_expiry comes from one source minute of the bucket, not necessarily its close.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nCount of retained trades in the bucket; 0 marks a synthetic mark-filled candle.\n\ndays_to_expiry is fractional days until expiry.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.ohlcvt. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures OHLCVT Market Data","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)","schema":{"example":"BTC-23OCT26","type":"string"}}],"responses":{"200":{"description":"OHLCVT data successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FuturesOhlcvtEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","open":109307.5,"high":109307.5,"low":109307.5,"close":109307.5,"vwap":109307.5,"volume":5830,"buy_volume":0,"sell_volume":5830,"trades_count":2,"buy_trades_count":0,"sell_trades_count":2,"liquidation_short_volume":null,"liquidation_long_volume":null,"block_trade_buy_volume":null,"block_trade_sell_volume":null,"mark_price":109224.93,"index_price":103721.05,"days_to_expiry":324.9166666666667},{"date":"2025-11-04 11:01:00","open":109139.43,"high":109139.43,"low":109139.43,"close":109139.43,"vwap":109139.43,"volume":0,"buy_volume":0,"sell_volume":0,"trades_count":0,"buy_trades_count":0,"sell_trades_count":0,"liquidation_short_volume":3200,"liquidation_long_volume":5800,"block_trade_buy_volume":null,"block_trade_sell_volume":null,"mark_price":109139.43,"index_price":103641.58,"days_to_expiry":324.91597222222225},{"date":"2025-11-04 11:02:00","open":109183.39,"high":109183.39,"low":109183.39,"close":109183.39,"vwap":109183.39,"volume":0,"buy_volume":0,"sell_volume":0,"trades_count":0,"buy_trades_count":0,"sell_trades_count":0,"liquidation_short_volume":null,"liquidation_long_volume":null,"block_trade_buy_volume":50000,"block_trade_sell_volume":35000,"mark_price":109183.39,"index_price":103686.12,"days_to_expiry":324.91527777777776}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures OHLCVT Market Data","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)"},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)"}}}}}}}},"/api/v1/futures/level1":{"get":{"description":"Best bid/ask price OHLC, displayed bid/ask size OHLC, bid_ask_spread OHLC and total_liquidity (bid size + ask size) OHLC plus average per bucket. Only minutes with at least one quote update contribute; buckets without them are absent, not zero-filled. No size or spread averages are returned. Top of book only: not depth, order IDs, queue position or an executable quote replay.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.level1. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures Level 1","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)","schema":{"example":"BTC-23OCT26","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseBookEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","bid_price_open":109295,"bid_price_high":109347.5,"bid_price_low":109120,"bid_price_close":109182.5,"ask_price_open":109330,"ask_price_high":109367.5,"ask_price_low":109207.5,"ask_price_close":109225,"bid_size_open":5730,"bid_size_high":48510,"bid_size_low":320,"bid_size_close":40000,"ask_size_open":700,"ask_size_high":59890,"ask_size_low":490,"ask_size_close":40000,"bid_ask_spread_open":35,"bid_ask_spread_high":192.5,"bid_ask_spread_low":2.5,"bid_ask_spread_close":42.5,"total_liquidity_open":40700,"total_liquidity_high":99890,"total_liquidity_low":1110,"total_liquidity_close":80000,"total_liquidity_avg":23645.138121546963},{"date":"2025-11-04 11:01:00","bid_price_open":109187.5,"bid_price_high":109242.5,"bid_price_low":109110,"bid_price_close":109125,"ask_price_open":109215,"ask_price_high":109315,"ask_price_low":109135,"ask_price_close":109135,"bid_size_open":7460,"bid_size_high":45000,"bid_size_low":40,"bid_size_close":3520,"ask_size_open":6980,"ask_size_high":135000,"ask_size_low":700,"ask_size_close":700,"bid_ask_spread_open":27.5,"bid_ask_spread_high":112.5,"bid_ask_spread_low":5,"bid_ask_spread_close":10,"total_liquidity_open":7250,"total_liquidity_high":148430,"total_liquidity_low":740,"total_liquidity_close":4220,"total_liquidity_avg":21844.923547400613},{"date":"2025-11-04 11:02:00","bid_price_open":109125,"bid_price_high":109260,"bid_price_low":109110,"bid_price_close":109162.5,"ask_price_open":109135,"ask_price_high":109330,"ask_price_low":109135,"ask_price_close":109182.5,"bid_size_open":4370,"bid_size_high":45000,"bid_size_low":40,"bid_size_close":4550,"ask_size_open":700,"ask_size_high":90000,"ask_size_low":670,"ask_size_close":700,"bid_ask_spread_open":10,"bid_ask_spread_high":165,"bid_ask_spread_low":5,"bid_ask_spread_close":20,"total_liquidity_open":6200,"total_liquidity_high":103430,"total_liquidity_low":1220,"total_liquidity_close":5250,"total_liquidity_avg":21753.742038216562}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Level 1","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)"},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)"}}}}}}}},"/api/v1/futures/orderbook":{"get":{"description":"Aggregated L2 depth per bucket: bid/ask liquidity (summed displayed size over the top 10, 20, 50 and 100 levels) and imbalance at each depth as open/high/low/close/avg, microprice open/high/low/close/avg, and snapshot_count (book snapshots, summed across minutes). Imbalance runs from -1 (ask-heavy) to +1 (bid-heavy). microprice is documented as the top-of-book size-weighted mid (bid × ask_size + ask × bid_size) / (bid_size + ask_size); the formula is not re-verified against samples. Coarser averages are unweighted means of minute averages. Rows add instrument_type, maturity and days_to_expiry (last source minute).\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end. For repeated reads with the same explicit bounds, selectors, resolution and sort order, compare all REST data rows separately from meta. meta.coverage.latest_observed_at, meta.completeness.complete_through and meta.completeness.updated_at can change while those rows stay unchanged. A full-response hash or ETag is not a data-only revision identifier; no per-window data revision field is exposed. Follow every page and preserve every row field, null and zero. MCP compaction can omit fields or round values, so use REST for exact data comparisons. This is not a historical-immutability or original-availability guarantee.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.orderbook. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures L2 Orderbook","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)","schema":{"example":"BTC-23OCT26","type":"string"}}],"responses":{"200":{"description":"L2 orderbook data successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseL2OrderbookEntity"}}}}]},"example":{"data":[{"date":"2026-01-22 07:20:00","exchange":"deribit","instrument_name":"BTC-23OCT26","currency":"BTC","instrument_type":"future","maturity":"23OCT26","days_to_expiry":64.7,"bid_liq_10_open":12.5,"bid_liq_10_high":18.2,"bid_liq_10_low":8.1,"bid_liq_10_close":14.3,"bid_liq_10_avg":13.1,"bid_liq_20_open":25.8,"bid_liq_20_high":35,"bid_liq_20_low":18.5,"bid_liq_20_close":28.1,"bid_liq_20_avg":26.4,"bid_liq_50_open":65.2,"bid_liq_50_high":82,"bid_liq_50_low":50.3,"bid_liq_50_close":70.5,"bid_liq_50_avg":66.8,"bid_liq_100_open":120.5,"bid_liq_100_high":155,"bid_liq_100_low":95.2,"bid_liq_100_close":130.8,"bid_liq_100_avg":124.3,"ask_liq_10_open":15.3,"ask_liq_10_high":22.1,"ask_liq_10_low":10.5,"ask_liq_10_close":17.8,"ask_liq_10_avg":16.2,"ask_liq_20_open":30.1,"ask_liq_20_high":42,"ask_liq_20_low":22.5,"ask_liq_20_close":33.5,"ask_liq_20_avg":31,"ask_liq_50_open":78.5,"ask_liq_50_high":95,"ask_liq_50_low":60.2,"ask_liq_50_close":82.1,"ask_liq_50_avg":77.5,"ask_liq_100_open":145.2,"ask_liq_100_high":180,"ask_liq_100_low":110.5,"ask_liq_100_close":152.3,"ask_liq_100_avg":142.1,"imbalance_10_open":-0.1,"imbalance_10_high":0.25,"imbalance_10_low":-0.35,"imbalance_10_close":-0.11,"imbalance_10_avg":-0.09,"imbalance_20_open":-0.08,"imbalance_20_high":0.2,"imbalance_20_low":-0.3,"imbalance_20_close":-0.09,"imbalance_20_avg":-0.07,"imbalance_50_open":-0.09,"imbalance_50_high":0.15,"imbalance_50_low":-0.25,"imbalance_50_close":-0.08,"imbalance_50_avg":-0.06,"imbalance_100_open":-0.09,"imbalance_100_high":0.12,"imbalance_100_low":-0.2,"imbalance_100_close":-0.08,"imbalance_100_avg":-0.06,"microprice_open":105250.5,"microprice_high":105320,"microprice_low":105180,"microprice_close":105290.2,"microprice_avg":105260.8,"snapshot_count":60}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI2LTAxLTIyIDA3OjIxOjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures L2 Orderbook","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)"},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)"}}}}}}}},"/api/v1/futures/orderbook-raw":{"get":{"description":"Individual retained L2 book snapshots, kept for a rolling 30 days: up to 100 bid and ask levels as {price, size} (best first), depth, pre-computed liquidity and imbalance at depths 10/20/50/100, microprice, margin_type and multiplier (null when not recorded). Not aggregated. Pages are keyset-ordered by (timestamp, exchange, instrument_name), so snapshots sharing a millisecond are not skipped. Rows add instrument_type, maturity and days_to_expiry.\n\nSnapshot event time in timestamp; date is the same instant truncated to whole seconds (.000Z). Order by timestamp.\n\nIndividual events; no resolution parameter.\n\nInclusive millisecond event-time bounds [start, end]. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Raw L2 snapshots are kept for a rolling 30-day window.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.orderbook_raw. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures L2 Orderbook Raw","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction. Defaults to ASC for instrument mode, DESC for currency mode.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full futures instrument identifier (e.g., BTC-23OCT26). Either instrument_name or currency is required.","schema":{"example":"BTC-23OCT26","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL dated futures for this currency. Either currency or instrument_name is required.","schema":{"example":"BTC","type":"string"}},{"name":"direction","required":false,"in":"query","description":"Filter by trade direction (aggressor side)","schema":{"type":"string","enum":["buy","sell"]}},{"name":"block_only","required":false,"in":"query","description":"If true, only return trades with a block_trade_id (block trades).","schema":{"default":false,"type":"boolean"}},{"name":"min_amount","required":false,"in":"query","description":"Minimum trade amount in the venue-native trade amount unit (e.g. USD on Deribit inverse, USDT notional on Binance USDT-M). Filters out dust trades.","schema":{"example":1,"type":"number"}},{"name":"strategy","required":false,"in":"query","description":"Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread).","schema":{"type":"string","enum":["COMBO_CALENDAR_SPREAD","COMBO_HEDGE_ROLL_TO_FUTURE","COMBO_HEDGE_ROLL_TO_PERP","COMBO_MULTI_LEG_1","COMBO_PERP_VS_FUTURE","COMBO_ROLL_BACK","COMBO_ROLL_FORWARD","Closed COMBO_CALENDAR_SPREAD","Closed COMBO_PERP_VS_FUTURE_UNWIND","Closed SHORT_FUTURE","LONG_FUTURE","Opened COMBO_CALENDAR_SPREAD","Opened COMBO_PERP_VS_FUTURE_SPREAD","Opened LONG_FUTURE","Opened SHORT_FUTURE"]}},{"name":"maturity","required":false,"in":"query","description":"Filter by maturity date (e.g. 23OCT26). Only for dated futures.","schema":{"example":"23OCT26","type":"string"}},{"name":"sort","required":false,"in":"query","description":"Sort field. Default: timestamp.","schema":{"default":"timestamp","type":"string","enum":["timestamp","amount","price"]}},{"name":"top_n","required":false,"in":"query","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned.","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":"Raw L2 orderbook snapshots successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseL2OrderbookRawEntity"}}}}]},"example":{"data":[{"timestamp":1769066457868,"date":"2026-01-22T07:20:57.000Z","exchange":"deribit","instrument_name":"BTC-23OCT26","currency":"BTC","instrument_type":"future","maturity":"23OCT26","days_to_expiry":64.7,"margin_type":"inverse","multiplier":1,"depth":100,"bids":[{"price":105250,"size":1.5},{"price":105249.5,"size":0.8}],"asks":[{"price":105250.5,"size":2.1},{"price":105251,"size":1.2}],"bid_liquidity_10":12.5,"ask_liquidity_10":15.3,"bid_liquidity_20":25.8,"ask_liquidity_20":30.1,"bid_liquidity_50":65.2,"ask_liquidity_50":78.5,"bid_liquidity_100":120.5,"ask_liquidity_100":145.2,"imbalance_10":-0.1,"imbalance_20":-0.08,"imbalance_50":-0.09,"imbalance_100":-0.09,"microprice":105250.3}],"meta":{"next_cursor":"eyJ0aW1lc3RhbXAiOjE3NjkwNjY0NTc4Njh9"}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures L2 Orderbook Raw Snapshots","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction. Defaults to ASC for instrument mode, DESC for currency mode."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance)"},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Full futures instrument identifier (e.g., BTC-23OCT26). Either instrument_name or currency is required."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL dated futures for this currency. Either currency or instrument_name is required."},"direction":{"type":"string","enum":["buy","sell"],"description":"Filter by trade direction (aggressor side)"},"block_only":{"default":false,"type":"boolean","description":"If true, only return trades with a block_trade_id (block trades)."},"min_amount":{"example":1,"type":"number","description":"Minimum trade amount in the venue-native trade amount unit (e.g. USD on Deribit inverse, USDT notional on Binance USDT-M). Filters out dust trades."},"strategy":{"example":"calendar_spread","type":"string","description":"Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread)."},"maturity":{"example":"23OCT26","type":"string","description":"Filter by maturity date (e.g. 23OCT26). Only for dated futures."},"sort":{"default":"timestamp","type":"string","enum":["timestamp","amount","price"],"description":"Sort field. Default: timestamp."},"top_n":{"example":20,"type":"number","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned."}}}}}}}},"/api/v1/futures/volume":{"get":{"description":"Per bucket for one instrument: the latest venue-reported rolling volume_24h and volume_usd_24h from the final ticker minute, plus interval buy_volume, sell_volume, volume (= buy + sell) and trade counts summed from trade candles. Buckets come from ticker data: a bucket without a ticker row is absent even if it had trades. instrument_name is required; currency selection is not supported.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nvolume_24h is the venue-reported rolling 24-hour volume in base coin (verified on Deribit inverse); volume_usd_24h is the rolling 24-hour volume in USD. Both are latest rolling states, not sums over the requested interval.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.volume. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures Volume Stats","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)","schema":{"example":"BTC-23OCT26","type":"string"}}],"responses":{"200":{"description":"Successfully retrieved futures volume data","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseVolumeDataEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","volume_24h":29.54344186,"volume_usd_24h":3297310},{"date":"2025-11-04 11:01:00","volume_24h":29.54264721,"volume_usd_24h":3297220},{"date":"2025-11-04 11:02:00","volume_24h":29.54264721,"volume_usd_24h":3297220}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Volume Stats","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)"},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)"}}}}}}}},"/api/v1/futures/trades/summary":{"get":{"description":"Aggregates retained raw dated-futures trades (rolling 30 days) of one exchange and base currency over [start, end], grouped by exchange, instrument_name, maturity, direction or strategy: trade_count, volume, buy/sell volume, net_oi_change, block-trade count/volume, avg_price and vwap, plus metadata totals (group_by, total_trades, total_volume). Filters: direction, block_only, min_amount, strategy, maturity.\n\nWindow aggregate over trade event times in [start, end]; result rows carry no bucket timestamp.\n\nOne row per group over the whole window; no time buckets.\n\nInclusive millisecond event-time bounds [start, end]. Omitted start defaults to 24 hours before end, or before the request time without end. Omitted end is the request time. exchange and currency are required.\n\nvolume, buy_volume, sell_volume and block_trade_volume sum trade amount, and net_oi_change sums trade-level oi_change, in venue-native units added across instruments (e.g. Deribit inverse USD with linear base-coin amounts); not comparable across margin types.\n\nTrade amount is venue-native with no unit column: USD on Deribit inverse, observed as USDC notional on Deribit USDC linear, USDT notional on Binance USDT-M. Binance COIN-M and other venues are unverified. min_amount filters in this same unit.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified. avg_price is an unweighted mean of trade prices; vwap is amount-weighted.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Raw trades are kept for a rolling 30-day window; earlier observed rows are sparse residuals, not continuous history.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.trades_summary. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures Trades Summary","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., deribit, binance)","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":true,"in":"query","description":"Base currency (e.g. BTC, ETH)","schema":{"example":"BTC","type":"string"}},{"name":"group_by","required":true,"in":"query","description":"Axis to group results by","schema":{"type":"string","enum":["exchange","instrument_name","maturity","direction","strategy"]}},{"name":"direction","required":false,"in":"query","description":"Filter by trade direction","schema":{"type":"string","enum":["buy","sell"]}},{"name":"block_only","required":false,"in":"query","description":"If true, only include block trades.","schema":{"default":false,"type":"boolean"}},{"name":"min_amount","required":false,"in":"query","description":"Minimum trade amount in the venue-native trade amount unit.","schema":{"type":"number"}},{"name":"strategy","required":false,"in":"query","description":"Filter by strategy label. Accepts comma-separated values.","schema":{"type":"string","enum":["COMBO_CALENDAR_SPREAD","COMBO_HEDGE_ROLL_TO_FUTURE","COMBO_HEDGE_ROLL_TO_PERP","COMBO_MULTI_LEG_1","COMBO_PERP_VS_FUTURE","COMBO_ROLL_BACK","COMBO_ROLL_FORWARD","Closed COMBO_CALENDAR_SPREAD","Closed COMBO_PERP_VS_FUTURE_UNWIND","Closed SHORT_FUTURE","LONG_FUTURE","Opened COMBO_CALENDAR_SPREAD","Opened COMBO_PERP_VS_FUTURE_SPREAD","Opened LONG_FUTURE","Opened SHORT_FUTURE"]}},{"name":"maturity","required":false,"in":"query","description":"Filter by maturity date (e.g. 23OCT26).","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"group_key":"23OCT26","trade_count":150,"volume":1234.5,"buy_volume":700.2,"sell_volume":534.3,"net_oi_change":120.5,"block_trade_count":5,"block_trade_volume":200,"avg_price":95000,"vwap":95100}],"metadata":{"group_by":"maturity","total_trades":150,"total_volume":1234.5}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Trades Summary","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH)"},"group_by":{"type":"string","enum":["exchange","instrument_name","maturity","direction","strategy"],"description":"Axis to group results by"},"direction":{"type":"string","enum":["buy","sell"],"description":"Filter by trade direction"},"block_only":{"default":false,"type":"boolean","description":"If true, only include block trades."},"min_amount":{"type":"number","description":"Minimum trade amount in the venue-native trade amount unit."},"strategy":{"type":"string","description":"Filter by strategy label. Accepts comma-separated values."},"maturity":{"type":"string","description":"Filter by maturity date (e.g. 23OCT26)."}},"required":["exchange","currency","group_by"]}}}}}},"/api/v1/futures/flow":{"get":{"description":"One summary of retained raw trades (rolling 30 days) for one exchange and base currency over [start, end]: total_trades, total/buy/sell volume (sum of amount), net_oi_change, block-trade count/volume, avg_price (unweighted) and vwap (amount-weighted); most_active_instruments (top_n by summed amount) and notable_trades (top_n largest by amount, which compares units across instruments); plus liquidation stats for the same exchange, currency and window (counts and USD totals by long/short side, largest) with notable_liquidations (largest by amount_usd). min_amount filters trades only. Venues without a liquidation feed (e.g. Deribit) report zero liquidation stats.\n\nWindow aggregate over trade event times in [start, end]; result rows carry no bucket timestamp.\n\nOne summary over the whole window; no time buckets.\n\nInclusive millisecond event-time bounds [start, end]. Omitted start defaults to 24 hours before end, or before the request time without end. Omitted end is the request time. exchange and currency are required.\n\nvolume, buy_volume, sell_volume and block_trade_volume sum trade amount, and net_oi_change sums trade-level oi_change, in venue-native units added across instruments (e.g. Deribit inverse USD with linear base-coin amounts); not comparable across margin types.\n\nTrade amount is venue-native with no unit column: USD on Deribit inverse, observed as USDC notional on Deribit USDC linear, USDT notional on Binance USDT-M. Binance COIN-M and other venues are unverified. min_amount filters in this same unit.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified. avg_price is an unweighted mean of trade prices; vwap is amount-weighted.\n\nLiquidation totals are USD sums of amount_usd.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Raw trades are kept for a rolling 30-day window; earlier observed rows are sparse residuals, not continuous history.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.flow. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures Flow Summary","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., deribit, binance)","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":true,"in":"query","description":"Base currency (e.g. BTC, ETH). Required.","schema":{"example":"BTC","type":"string"}},{"name":"min_amount","required":false,"in":"query","description":"Minimum trade amount (venue-native trade amount unit) per trade to include. Applies to trades only (summary, most-active instruments, notable trades); liquidation stats are not size-filtered.","schema":{"example":1,"type":"number"}},{"name":"top_n","required":false,"in":"query","description":"Number of notable trades and most active instruments to return. Default 10.","schema":{"default":10,"example":10,"type":"number"}}],"responses":{"200":{"description":"Flow summary successfully retrieved","content":{"application/json":{"example":{"summary":{"total_trades":500,"total_volume":1234.5,"buy_volume":700.2,"sell_volume":534.3,"net_oi_change":120.5,"block_trade_count":8,"block_trade_volume":400,"avg_price":95000,"vwap":95100,"most_active_instruments":[{"instrument_name":"BTC-23OCT26","trade_count":150,"volume":500,"net_oi_change":80}],"liquidation_count":45,"long_liquidation_count":30,"short_liquidation_count":15,"total_liquidation_usd":2500000,"long_liquidation_usd":1800000,"short_liquidation_usd":700000,"largest_liquidation_usd":250000},"notable_trades":[],"notable_liquidations":[]}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Flow Summary","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH). Required."},"min_amount":{"example":1,"type":"number","description":"Minimum trade amount (venue-native trade amount unit) per trade to include. Applies to trades only (summary, most-active instruments, notable trades); liquidation stats are not size-filtered."},"top_n":{"default":10,"example":10,"type":"number","description":"Number of notable trades and most active instruments to return. Default 10."}},"required":["exchange","currency"]}}}}}},"/api/v1/futures/trades":{"get":{"description":"Individual retained executed trades, kept for a rolling 30 days: trade_id, price, amount, direction, tick_direction, index_price, basis (price − index; null without a usable index), trade-level open_interest/oi_before/oi_change, maturity, days_to_expiry and block/combo/strategy identifiers. Not mark-filled bars. Rows carry instrument_name but no exchange or currency field; pass exchange to avoid mixing venues. Instrument mode (instrument_name) or currency mode (all dated futures of a base currency, optionally one maturity).\n\nVenue trade event time. date is UTC with a space separator and no 'Z' (not ISO 8601). Not Laevitas ingestion or publication time.\n\nIndividual events; no resolution parameter.\n\nInclusive millisecond event-time bounds [start, end]. Omitted start defaults to 24 hours before end, or before the request time without end. Sort by timestamp pages by keyset (timestamp, trade_id) without skipping same-millisecond trades; amount/price sorts page by offset. top_n returns the N largest by the sort field with no cursor.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nTrade amount is venue-native with no unit column: USD on Deribit inverse, observed as USDC notional on Deribit USDC linear, USDT notional on Binance USDT-M. Binance COIN-M and other venues are unverified. min_amount filters in this same unit.\n\nTrade-level open_interest, oi_before and oi_change are USD on Deribit inverse (unlike oi on /open-interest, which is base coin) and null where the venue reports no trade-level open interest (e.g. Binance). Genuine zero readings are kept.\n\ndays_to_expiry is fractional days until expiry.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Raw trades are kept for a rolling 30-day window; earlier observed rows are sparse residuals, not continuous history.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.trades. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.\n\nAdditional filters: direction, block_only, min_amount (in the trade amount unit), strategy, maturity, sort, sort_dir. top_n returns the N largest trades by the sort field without a cursor.","operationId":"Futures Trade History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction. Defaults to ASC for instrument mode, DESC for currency mode.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full futures instrument identifier (e.g., BTC-23OCT26). Either instrument_name or currency is required.","schema":{"example":"BTC-23OCT26","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL dated futures for this currency. Either currency or instrument_name is required.","schema":{"example":"BTC","type":"string"}},{"name":"direction","required":false,"in":"query","description":"Filter by trade direction (aggressor side)","schema":{"type":"string","enum":["buy","sell"]}},{"name":"block_only","required":false,"in":"query","description":"If true, only return trades with a block_trade_id (block trades).","schema":{"default":false,"type":"boolean"}},{"name":"min_amount","required":false,"in":"query","description":"Minimum trade amount in the venue-native trade amount unit (e.g. USD on Deribit inverse, USDT notional on Binance USDT-M). Filters out dust trades.","schema":{"example":1,"type":"number"}},{"name":"strategy","required":false,"in":"query","description":"Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread).","schema":{"type":"string","enum":["COMBO_CALENDAR_SPREAD","COMBO_HEDGE_ROLL_TO_FUTURE","COMBO_HEDGE_ROLL_TO_PERP","COMBO_MULTI_LEG_1","COMBO_PERP_VS_FUTURE","COMBO_ROLL_BACK","COMBO_ROLL_FORWARD","Closed COMBO_CALENDAR_SPREAD","Closed COMBO_PERP_VS_FUTURE_UNWIND","Closed SHORT_FUTURE","LONG_FUTURE","Opened COMBO_CALENDAR_SPREAD","Opened COMBO_PERP_VS_FUTURE_SPREAD","Opened LONG_FUTURE","Opened SHORT_FUTURE"]}},{"name":"maturity","required":false,"in":"query","description":"Filter by maturity date (e.g. 23OCT26). Only for dated futures.","schema":{"example":"23OCT26","type":"string"}},{"name":"sort","required":false,"in":"query","description":"Sort field. Default: timestamp.","schema":{"default":"timestamp","type":"string","enum":["timestamp","amount","price"]}},{"name":"top_n","required":false,"in":"query","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned.","schema":{"example":20,"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FuturesTradeEntity"}}}}]},"example":{"data":[{"instrument_name":"BTC-23OCT26","date":"2025-11-04T11:01:55.040Z","timestamp":1758876115040,"trade_id":"386518052","block_trade_id":"","combo_id":"BTC-FS-25SEP26_26JUN26","combo_trade_id":"386518051","strategy":"COMBO_CALENDAR_SPREAD","direction":"sell","tick_direction":2,"amount":23750,"price":117287.5,"index_price":109621.72,"oi_change":null,"open_interest":1095380,"oi_before":1095380,"maturity":"25SEP26","days_to_expiry":363.9709,"basis":7665.779999999999},{"instrument_name":"BTC-23OCT26","date":"2025-11-04T11:01:55.040Z","timestamp":1758885173562,"trade_id":"386539875","block_trade_id":"","combo_id":"BTC-FS-25SEP26_26JUN26","combo_trade_id":"386539874","strategy":"COMBO_CALENDAR_SPREAD","direction":"buy","tick_direction":2,"amount":50000,"price":116762.5,"index_price":108916.75,"oi_change":50000,"open_interest":2985210,"oi_before":2935210,"maturity":"25SEP26","days_to_expiry":363.866,"basis":7845.75},{"instrument_name":"BTC-23OCT26","date":"2025-11-04T11:01:55.040Z","timestamp":1758885174875,"trade_id":"386539878","block_trade_id":"","combo_id":"BTC-FS-25SEP26_26JUN26","combo_trade_id":"386539877","strategy":"COMBO_CALENDAR_SPREAD","direction":"sell","tick_direction":0,"amount":50000,"price":116797,"index_price":108913.27,"oi_change":50000,"open_interest":3035210,"oi_before":2985210,"maturity":"25SEP26","days_to_expiry":363.866,"basis":7883.729999999996}],"meta":{"next_cursor":"eyJ0aW1lc3RhbXAiOiIxNzU4ODk5MjAxMDY0IiwidHJhZGVfaWQiOiIzODY2MjA5ODgifQ=="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Trade History","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction. Defaults to ASC for instrument mode, DESC for currency mode."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance)"},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Full futures instrument identifier (e.g., BTC-23OCT26). Either instrument_name or currency is required."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL dated futures for this currency. Either currency or instrument_name is required."},"direction":{"type":"string","enum":["buy","sell"],"description":"Filter by trade direction (aggressor side)"},"block_only":{"default":false,"type":"boolean","description":"If true, only return trades with a block_trade_id (block trades)."},"min_amount":{"example":1,"type":"number","description":"Minimum trade amount in the venue-native trade amount unit (e.g. USD on Deribit inverse, USDT notional on Binance USDT-M). Filters out dust trades."},"strategy":{"example":"calendar_spread","type":"string","description":"Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread)."},"maturity":{"example":"23OCT26","type":"string","description":"Filter by maturity date (e.g. 23OCT26). Only for dated futures."},"sort":{"default":"timestamp","type":"string","enum":["timestamp","amount","price"],"description":"Sort field. Default: timestamp."},"top_n":{"example":20,"type":"number","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned."}}}}}}}},"/api/v1/futures/open-interest":{"get":{"description":"Open-interest OHLC per bucket for one instrument: first open, maximum high, minimum low and last close of the minute OI states. Outstanding positions, not traded volume or a sum of minute OI. instrument_name is required; currency or cross-instrument aggregation is not supported.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end compare bucket starts, not source minutes: a bucket is returned only if its start lies in [start, end]. An unaligned start drops its containing bucket; an end inside a bucket returns the whole bucket, including minutes after end. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nOpen interest (oi, oi_*) in base coin: BTC for Deribit inverse BTC contracts, base coin for Deribit USDC linear and Binance USDT-M, converted to base coin for Binance COIN-M. Other venues are unverified.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.open_interest. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures Open Interest","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)","schema":{"example":"BTC-23OCT26","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BaseOpenInterestEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","oi_open":559.1289933303566,"oi_high":559.7229134379199,"oi_low":559.0182983385522,"oi_close":559.6348745657242},{"date":"2025-11-04 11:01:00","oi_open":559.666130831103,"oi_high":560.0817095526673,"oi_low":559.5719114785235,"oi_close":560.0732934009276},{"date":"2025-11-04 11:02:00","oi_open":560.0728315462629,"oi_high":560.0728315462629,"oi_low":559.4456693812764,"oi_close":559.8441531321868}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Open Interest","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)"},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)"}}}}}}}},"/api/v1/futures/ticker-history":{"get":{"description":"One final observed ticker state per UTC bucket (latest source minute, duplicates resolved deterministically): mark_price, index_price, best bid/ask and displayed sizes, bid_ask_spread, oi, volume_usd_24h and days_to_expiry. Not OHLC and not interval sums; no volume_24h, funding, settlement_price or total_liquidity. Buckets without ticker rows are absent. Use /futures/carry for basis.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end. For repeated reads with the same explicit bounds, selectors, resolution and sort order, compare all REST data rows separately from meta. meta.coverage.latest_observed_at, meta.completeness.complete_through and meta.completeness.updated_at can change while those rows stay unchanged. A full-response hash or ETag is not a data-only revision identifier; no per-window data revision field is exposed. Follow every page and preserve every row field, null and zero. MCP compaction can omit fields or round values, so use REST for exact data comparisons. This is not a historical-immutability or original-availability guarantee.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nOpen interest (oi, oi_*) in base coin: BTC for Deribit inverse BTC contracts, base coin for Deribit USDC linear and Binance USDT-M, converted to base coin for Binance COIN-M. Other venues are unverified.\n\nvolume_usd_24h is the latest rolling 24-hour USD volume state, not bucket volume.\n\ndays_to_expiry is fractional days until expiry.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.ticker_history. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures Ticker History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)","schema":{"example":"BTC-23OCT26","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FuturesTickerDataEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","mark_price":109224.93,"index_price":103721.05,"bid_price":109182.5,"ask_price":109225,"bid_ask_spread":42.5,"bid_size":40000,"ask_size":40000,"oi":559.6348745657242,"volume_usd_24h":3297310,"days_to_expiry":324.9166666666667},{"date":"2025-11-04 11:01:00","mark_price":109139.43,"index_price":103641.58,"bid_price":109125,"ask_price":109135,"bid_ask_spread":10,"bid_size":3520,"ask_size":700,"oi":560.0732934009276,"volume_usd_24h":3297220,"days_to_expiry":324.91597222222225},{"date":"2025-11-04 11:02:00","mark_price":109184.1,"index_price":103686.53,"bid_price":109162.5,"ask_price":109182.5,"bid_ask_spread":20,"bid_size":4550,"ask_size":700,"oi":559.8441531321868,"volume_usd_24h":3297220,"days_to_expiry":324.91527777777776}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Ticker History","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)"},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)"}}}}}}}},"/api/v1/futures/carry":{"get":{"description":"Basis per bucket for one dated future: basis OHLC, days_to_expiry (last source minute) and annualized_carry = basis_close / index × 365 / days_to_expiry × 100 (percent) using the bucket’s final index price; null when the index or days_to_expiry is missing or non-positive. basis_open and basis_close are observed mark − index at the first and last source minute with a usable index; basis_high (maximum of mark_high − index_low) and basis_low (minimum of mark_low − index_high) are synthetic bounds, not observed basis values. Basis is null where the index is missing or zero. No funding fields (MCP: get_futures_basis).\n\nUTC bucket start as Unix milliseconds and as an ISO string in minute. This route has no date field.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end compare bucket starts, not source minutes: a bucket is returned only if its start lies in [start, end]. An unaligned start drops its containing bucket; an end inside a bucket returns the whole bucket, including minutes after end. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\ndays_to_expiry is fractional days until expiry.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.carry. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures Carry","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)","schema":{"example":"BTC-23OCT26","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FuturesOhlcCarryEntity"}}}}]},"example":{"data":[{"timestamp":1733788800000,"minute":"2024-12-10T00:00:00.000Z","basis_open":5503.88,"basis_high":5519.17,"basis_low":5497.57,"basis_close":5503.88},{"timestamp":1733788860000,"minute":"2024-12-10T00:01:00.000Z","basis_open":5503.88,"basis_high":5534.09,"basis_low":5497.65,"basis_close":5497.57}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI0LTEyLTEwIDAwOjAxOjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Carry","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)"},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)"}}}}}}}},"/api/v1/futures/reference-price":{"get":{"description":"Mark-price OHLC and index-price OHLC per bucket (first open, maximum high, minimum low, last close of the minute values). Source minutes with any missing or non-positive mark or index value are excluded, so gaps are absent rather than zero-filled. underlying_price is always null on this route. For basis use /futures/carry.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end, or before the request time without end.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.reference_price. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures Reference Prices","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)","schema":{"example":"BTC-23OCT26","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/FuturesOhlcrefDataEntity"}}}}]},"example":{"data":[{"date":"2025-11-04 11:00:00","mark_price_open":109334.18,"mark_price_high":109355.83,"mark_price_low":109207.75,"mark_price_close":109224.93,"index_price_open":103814.31,"index_price_high":103834.66,"index_price_low":103703.62,"index_price_close":103721.05,"underlying_price":19321.37},{"date":"2025-11-04 11:01:00","mark_price_open":109218.83,"mark_price_high":109237.22,"mark_price_low":109137.79,"mark_price_close":109139.43,"index_price_open":103715.64,"index_price_high":103732.25,"index_price_low":103639.67,"index_price_close":103641.58,"underlying_price":19321.37},{"date":"2025-11-04 11:02:00","mark_price_open":109139.52,"mark_price_high":109261.87,"mark_price_low":109139.52,"mark_price_close":109184.1,"index_price_open":103641.87,"index_price_high":103755.75,"index_price_low":103641.87,"index_price_close":103686.53,"underlying_price":19321.37}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDEyOjM5OjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Reference Prices","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, kraken)"},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)"}}}}}}}},"/api/v1/futures/snapshot":{"get":{"description":"Cross-instrument dated-futures chain for one exchange (optional currency) at one minute or bucket: final ticker state per instrument (mark/index price, best bid/ask and sizes, bid_ask_spread, oi, volume_usd_24h, days_to_expiry) joined with that minute or bucket’s trade-candle open/high/low/close, vwap, buy/sell volume, volume and trade counts. Open interest is named oi; no volume_24h or funding.\n\nSelected UTC minute (1m) or bucket start shared by every row; meta.date repeats it.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nAt 1m, date must equal a retained minute exactly (non-zero seconds return an empty chain); there is no nearest-minute fallback. Omitted date selects the latest minute observed for that exchange (and currency) in the current or previous UTC day. At coarser resolutions date selects the whole containing UTC bucket, including observations after date: ticker fields are each instrument’s last minute in the bucket and candle fields aggregate the bucket. Not an as-of cutoff. meta.date and meta.next_date name the selected and following minute/bucket. REST returns every matching instrument without a limit.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\nCandle volume, displayed L1 sizes and L2 depth are venue-native with no unit column: USD notional on Deribit inverse; base coin on Deribit USDC linear and Binance USDT-M; contracts on Binance COIN-M (100 USD face for BTC; verified for candle volume and L1 sizes). Other venues are unverified. Convert before adding across venues or margin types.\n\nOpen interest (oi, oi_*) in base coin: BTC for Deribit inverse BTC contracts, base coin for Deribit USDC linear and Binance USDT-M, converted to base coin for Binance COIN-M. Other venues are unverified.\n\ndays_to_expiry is fractional days until expiry.\n\nInstruments with retained ticker rows at the selected minute/bucket, not a join against the current catalog; expired contracts appear on historical dates. Does not certify listed or open-for-trading status.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.snapshot. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Futures Snapshot","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., deribit, binance, okx, bybit, bullish, derive, paradex). Required.","schema":{"example":"deribit","type":"string"}},{"name":"date","required":false,"in":"query","description":"At 1m, exact retained minute (use :00 seconds), not nearest minute; other seconds return no rows. At coarser resolutions selects the entire containing UTC bucket, including observations after date; not an as-of cutoff. Omit for the latest matching snapshot.","schema":{"format":"date-time","example":"2026-01-20T10:00:00Z","type":"string"}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for the snapshot. The 1m default is a persisted aggregate of finer source events, not a raw exchange-event feed. Higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"currency","required":false,"in":"query","description":"Base currency filter (e.g., BTC, ETH)","schema":{"example":"BTC","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"date":"2025-11-04 11:00:00","exchange":"deribit","instrument_name":"BTC-23OCT26","currency":"BTC","mark_price":109224.93,"index_price":103721.05,"bid_price":109182.5,"ask_price":109225,"bid_ask_spread":42.5,"bid_size":40000,"ask_size":40000,"oi":559.63,"volume_usd_24h":3297310,"days_to_expiry":324.92},{"date":"2025-11-04 11:00:00","exchange":"deribit","instrument_name":"ETH-23OCT26","currency":"ETH","mark_price":3212.45,"index_price":3180.12,"bid_price":3210,"ask_price":3215,"bid_ask_spread":5,"bid_size":500,"ask_size":600,"oi":12450.5,"volume_usd_24h":8540000,"days_to_expiry":143.92}],"meta":{"minute":"2025-11-04 11:00:00"}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Snapshot","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx, bybit, bullish, derive, paradex). Required."},"date":{"format":"date-time","example":"2026-01-20T10:00:00Z","type":"string","description":"At 1m, exact retained minute (use :00 seconds), not nearest minute; other seconds return no rows. At coarser resolutions selects the entire containing UTC bucket, including observations after date; not an as-of cutoff. Omit for the latest matching snapshot."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for the snapshot. The 1m default is a persisted aggregate of finer source events, not a raw exchange-event feed. Higher resolutions roll up those 1m records."},"currency":{"example":"BTC","type":"string","description":"Base currency filter (e.g., BTC, ETH)"}},"required":["exchange"]}}}}}},"/api/v1/futures/liquidations":{"get":{"description":"Individual retained forced-liquidation events, with all stored history per exchange served (no rolling retention): price, amount, amount_base, amount_usd, direction (liquidation order side: sell closes longs, buy closes shorts), position_side (position liquidated), category, mark/index price, margin_type, trade_id and order_id. Filter by instrument_name or currency, direction, position_side and min_amount_usd. An empty response carries meta.empty_reason. Rows add maturity and days_to_expiry. Served exchanges: binance, bybit, kraken, okx. Deribit is not served.\n\nVenue liquidation event time; date is derived from timestamp. Not Laevitas ingestion or publication time.\n\nIndividual events; no resolution parameter.\n\nInclusive millisecond event-time bounds [start, end]. Omitted start defaults to 24 hours before end, or before the request time without end. Sort by timestamp (default DESC) pages by keyset (timestamp, exchange, instrument_name, trade_id, order_id) without skipping same-millisecond events; amount_usd/price sorts page by offset.\n\nPrices (OHLC, VWAP, mark, index, bid/ask, spread, basis, microprice) are in the quote currency: USD for Deribit inverse (BTC-PERPETUAL, BTC-25DEC26) and Binance COIN-M (BTCUSD_261225), USDC for Deribit USDC linear, USDT for Binance USDT-M. Other venues are unverified.\n\namount is the venue-native liquidation quantity (contracts or coin; per-venue convention unverified); amount_base is base coin; amount_usd = price × amount_base. min_amount_usd filters on amount_usd.\n\nMatching retained instrument observations. Current catalog membership is not required to request an expired instrument.\n\nNo rolling query TTL: all stored history per exchange is exposed. Coverage bounds are observed event boundaries, not completeness watermarks; an empty response carries meta.empty_reason (unsupported_exchange, ineligible_instrument, outside_coverage, no_matching_data).\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.liquidations. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.\n\nWhen data is empty, meta.empty_reason distinguishes unsupported_exchange, ineligible_instrument, outside_coverage and no_matching_data. Coverage timestamps are observed event boundaries, not completeness watermarks.","operationId":"Futures Liquidation History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction. Defaults to DESC (newest/largest first).","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name. Served exchanges: binance, bybit, kraken, and okx. Catalog membership does not guarantee that liquidation events exist for an instrument.","schema":{"example":"binance","type":"string","enum":["binance","bybit","kraken","okx"]}},{"name":"instrument_name","required":false,"in":"query","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)","schema":{"example":"BTC-23OCT26","type":"string"}},{"name":"direction","required":false,"in":"query","description":"Filter by liquidation order direction (buy = short squeeze, sell = long liquidation)","schema":{"type":"string","enum":["buy","sell"]}},{"name":"position_side","required":false,"in":"query","description":"Filter by position side being liquidated","schema":{"type":"string","enum":["long","short"]}},{"name":"min_amount_usd","required":false,"in":"query","description":"Minimum liquidation value in USD. Filters out small liquidations.","schema":{"example":1000,"type":"number"}},{"name":"sort","required":false,"in":"query","description":"Sort field. Default: timestamp.","schema":{"default":"timestamp","type":"string","enum":["timestamp","amount_usd","price"]}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LiquidationEntity"}},"meta":{"$ref":"#/components/schemas/DataAvailabilityPaginationMetaEntity"}}},"example":{"data":[{"instrument_name":"BTCUSD_250627","timestamp":1772104946628,"date":"2026-02-26T18:22:26.628Z","exchange":"binance","currency":"BTC","direction":"sell","position_side":"long","category":"forced","price":68187.4,"amount":0.075,"amount_base":0.075,"amount_usd":5114.05,"mark_price":68187.5,"index_price":68222.5,"margin_type":"linear","maturity":"250627","days_to_expiry":121.2,"trade_id":null,"order_id":null}],"meta":{"next_cursor":"eyJ0aW1lc3RhbXAiOjE3NzIxMDQ5NDYwMDB9","empty_reason":null,"coverage":{"source_id":"futures.liquidations","exchange_supported":true,"instrument_eligible":true,"earliest_observed_at":null,"latest_observed_at":null}}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Futures Liquidation History","tags":["Futures"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"DESC","type":"string","enum":["ASC","DESC"],"description":"Sort direction. Defaults to DESC (newest/largest first)."},"exchange":{"example":"binance","type":"string","enum":["binance","bybit","kraken","okx"],"description":"Exchange name. Served exchanges: binance, bybit, kraken, and okx. Catalog membership does not guarantee that liquidation events exist for an instrument."},"instrument_name":{"example":"BTC-23OCT26","type":"string","description":"Full futures instrument identifier (e.g., BTC-23OCT26, ETH-23OCT26)"},"direction":{"type":"string","enum":["buy","sell"],"description":"Filter by liquidation order direction (buy = short squeeze, sell = long liquidation)"},"position_side":{"type":"string","enum":["long","short"],"description":"Filter by position side being liquidated"},"min_amount_usd":{"example":1000,"type":"number","description":"Minimum liquidation value in USD. Filters out small liquidations."},"sort":{"default":"timestamp","type":"string","enum":["timestamp","amount_usd","price"],"description":"Sort field. Default: timestamp."}}}}}}}},"/api/v1/options/vol-surface/by-expiry":{"get":{"description":"Exchange mark-IV analytics, not a fitted SVI/SABR surface. ATM selects the call nearest delta +0.50; call/put wings target nearest +0.25/-0.25 and +0.10/-0.10. Eligible quotes have positive mark IV, nonzero delta and positive time to expiry; an expiry requires an ATM call delta gap below 0.15. Wings have no maximum delta-distance test. A wing is null when its option side has no eligible quote; dependent skew and butterfly are also null. A populated wing is not proof that the exact requested delta was observed. For coarse resolution, each target selects across the entire requested interval, not just its final minute, so the returned metrics can describe different times within that interval.\n\nUTC interval start. Metrics can use quotes later within the labelled interval and can change while it is open; the label is not the time the value first became available. MCP also exposes snapshot_time in snapshot mode.\n\n1m, 5m, 15m, 1h, 4h or 1d quote-selection intervals; not IV candles.\n\nSnapshot date selects the exact retained minute at 1m or its containing interval at coarser resolution, not the last quote at or before date. Without date, latest discovery considers the current and preceding UTC day. start or end enables history with inclusive bounds applied before grouping; edge intervals can be partial. In history, omitted start defaults to 24 hours before end; omitted end defaults to now, on both REST and MCP. History limit counts time intervals, not expiry/tenor rows; follow meta.next_cursor. Supply both bounds explicitly for reproducible comparisons and keep them unchanged while paging.\n\nIVs are percentage points: 65 means 65%. Skew is put IV minus call IV at the named absolute delta; positive means puts are richer. Butterfly is (put IV + call IV) / 2 minus ATM IV, in the same percentage-point units.\n\nunderlying_price is the option pricing reference in USD, which may be expiry-specific; days_to_expiry and tenor are days.\n\nEligible observed expiries for the selected exchange and currency, not a guaranteed complete chain or historical listing universe.\n\nQuery /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selectors. Bounds do not certify every intermediate time or the completeness of every calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.vol_surface_by_expiry. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Vol Surface By Expiry","parameters":[{"name":"exchange","required":true,"in":"query","description":"Options exchange, including Paradex. Required; availability follows retained chain observations.","schema":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"]}},{"name":"currency","required":true,"in":"query","description":"Base currency (e.g., BTC, ETH). Required for vol-surface queries.","schema":{"example":"BTC","type":"string"}},{"name":"date","required":false,"in":"query","description":"Exact date/time for a single snapshot in ISO 8601 format (UTC). If omitted and no start/end provided, returns the latest available snapshot. Mutually exclusive with start/end.","schema":{"format":"date-time","example":"2026-01-20T10:00:00Z","type":"string"}},{"name":"start","required":false,"in":"query","description":"Start date for time-series mode in ISO 8601 UTC. Providing start or end selects history. When only end is supplied, start defaults to 24 hours before end.","schema":{"format":"date-time","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date for time-series mode in ISO 8601 UTC. Defaults to now when start is supplied.","schema":{"format":"date-time","type":"string"}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for aggregation. The 1m default is a persisted aggregate of finer source observations; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"limit","required":false,"in":"query","description":"Requested page limit (1-1000). Only used in time-series mode (when start/end provided). limit is an upper bound on distinct time buckets, not tenor/expiry rows. Page caps by resolution: 1m/5m 1000, 15m 672, 1h 168, 4h 42, 1d 7. All tenors/expiries of a bucket stay together. This limits page work, not the requested date range or historical coverage. Keep the same filters and follow meta.next_cursor until null, even when a page is shorter than limit.","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response. Only used in time-series mode.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket (time-series mode only). ASC = oldest first (default). DESC = newest first. Keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"date":"2025-11-04T11:00:00.000Z","exchange":"deribit","currency":"BTC","maturity":"29NOV25","days_to_expiry":25.5,"underlying_price":103722.83,"atm_iv":47.62,"call_25d_iv":43.8,"put_25d_iv":52.1,"skew_25d":8.3,"butterfly_25d":0.33,"call_10d_iv":40.1,"put_10d_iv":58.3,"skew_10d":18.2,"butterfly_10d":1.58},{"date":"2025-11-04T11:00:00.000Z","exchange":"deribit","currency":"BTC","maturity":"27DEC25","days_to_expiry":53.5,"underlying_price":103722.83,"atm_iv":52.1,"call_25d_iv":48.5,"put_25d_iv":56.8,"skew_25d":8.3,"butterfly_25d":0.55,"call_10d_iv":44.2,"put_10d_iv":63.5,"skew_10d":19.3,"butterfly_10d":1.75},{"date":"2025-11-04T11:00:00.000Z","exchange":"deribit","currency":"BTC","maturity":"28MAR26","days_to_expiry":144.5,"underlying_price":103722.83,"atm_iv":55.3,"call_25d_iv":51.2,"put_25d_iv":60.1,"skew_25d":8.9,"butterfly_25d":0.35,"call_10d_iv":47.5,"put_10d_iv":66.2,"skew_10d":18.7,"butterfly_10d":1.55}],"meta":{"date":"2025-11-04T11:00:00.000Z","next_date":"2025-11-04T11:01:00.000Z"}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}},"504":{"description":"VOL_SURFACE_QUERY_TIMEOUT: history query could not complete in time. Retry with a smaller limit or shorter window."}},"security":[{"X-API-Key":[]}],"summary":"Vol Surface By Expiry","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"],"description":"Options exchange, including Paradex. Required; availability follows retained chain observations."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g., BTC, ETH). Required for vol-surface queries."},"date":{"format":"date-time","example":"2026-01-20T10:00:00Z","type":"string","description":"Exact date/time for a single snapshot in ISO 8601 format (UTC). If omitted and no start/end provided, returns the latest available snapshot. Mutually exclusive with start/end."},"start":{"format":"date-time","type":"string","description":"Start date for time-series mode in ISO 8601 UTC. Providing start or end selects history. When only end is supplied, start defaults to 24 hours before end."},"end":{"format":"date-time","type":"string","description":"End date for time-series mode in ISO 8601 UTC. Defaults to now when start is supplied."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for aggregation. The 1m default is a persisted aggregate of finer source observations; higher resolutions roll up those 1m records."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Requested page limit (1-1000). Only used in time-series mode (when start/end provided). limit is an upper bound on distinct time buckets, not tenor/expiry rows. Page caps by resolution: 1m/5m 1000, 15m 672, 1h 168, 4h 42, 1d 7. All tenors/expiries of a bucket stay together. This limits page work, not the requested date range or historical coverage. Keep the same filters and follow meta.next_cursor until null, even when a page is shorter than limit."},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response. Only used in time-series mode."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket (time-series mode only). ASC = oldest first (default). DESC = newest first. Keep sort_dir constant within a paginated scan."}},"required":["exchange","currency"]}}}}}},"/api/v1/options/vol-surface/by-tenor":{"get":{"description":"Exchange mark-IV analytics, not a fitted SVI/SABR surface. ATM selects the call nearest delta +0.50; call/put wings target nearest +0.25/-0.25 and +0.10/-0.10. Eligible quotes have positive mark IV, nonzero delta and positive time to expiry; an expiry requires an ATM call delta gap below 0.15. Wings have no maximum delta-distance test. A wing is null when its option side has no eligible quote; dependent skew and butterfly are also null. A populated wing is not proof that the exact requested delta was observed. For coarse resolution, each target selects across the entire requested interval, not just its final minute, so the returned metrics can describe different times within that interval. Each selected ATM/wing IV is independently interpolated in total-variance space to 1, 7, 14, 30, 60, 90, 180 and 365 days; outside the available expiry range IV stays flat at the nearest endpoint. Skew/butterfly are then calculated from those tenor IVs. This is not a fitted synthetic smile with a new delta solve.\n\nUTC interval start. Metrics can use quotes later within the labelled interval and can change while it is open; the label is not the time the value first became available. MCP also exposes snapshot_time in snapshot mode.\n\n1m, 5m, 15m, 1h, 4h or 1d quote-selection intervals; not IV candles.\n\nSnapshot date selects the exact retained minute at 1m or its containing interval at coarser resolution, not the last quote at or before date. Without date, latest discovery considers the current and preceding UTC day. start or end enables history with inclusive bounds applied before grouping; edge intervals can be partial. In history, omitted start defaults to 24 hours before end; omitted end defaults to now, on both REST and MCP. History limit counts time intervals, not expiry/tenor rows; follow meta.next_cursor. Supply both bounds explicitly for reproducible comparisons and keep them unchanged while paging.\n\nIVs are percentage points: 65 means 65%. Skew is put IV minus call IV at the named absolute delta; positive means puts are richer. Butterfly is (put IV + call IV) / 2 minus ATM IV, in the same percentage-point units.\n\nunderlying_price is the option pricing reference in USD, which may be expiry-specific; days_to_expiry and tenor are days.\n\nEligible observed expiries for the selected exchange and currency, not a guaranteed complete chain or historical listing universe.\n\nQuery /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selectors. Bounds do not certify every intermediate time or the completeness of every calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.vol_surface_by_tenor. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Vol Surface By Tenor","parameters":[{"name":"exchange","required":true,"in":"query","description":"Options exchange, including Paradex. Required; availability follows retained chain observations.","schema":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"]}},{"name":"currency","required":true,"in":"query","description":"Base currency (e.g., BTC, ETH). Required for vol-surface queries.","schema":{"example":"BTC","type":"string"}},{"name":"date","required":false,"in":"query","description":"Exact date/time for a single snapshot in ISO 8601 format (UTC). If omitted and no start/end provided, returns the latest available snapshot. Mutually exclusive with start/end.","schema":{"format":"date-time","example":"2026-01-20T10:00:00Z","type":"string"}},{"name":"start","required":false,"in":"query","description":"Start date for time-series mode in ISO 8601 UTC. Providing start or end selects history. When only end is supplied, start defaults to 24 hours before end.","schema":{"format":"date-time","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date for time-series mode in ISO 8601 UTC. Defaults to now when start is supplied.","schema":{"format":"date-time","type":"string"}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for aggregation. The 1m default is a persisted aggregate of finer source observations; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"limit","required":false,"in":"query","description":"Requested page limit (1-1000). Only used in time-series mode (when start/end provided). limit is an upper bound on distinct time buckets, not tenor/expiry rows. Page caps by resolution: 1m/5m 1000, 15m 672, 1h 168, 4h 42, 1d 7. All tenors/expiries of a bucket stay together. This limits page work, not the requested date range or historical coverage. Keep the same filters and follow meta.next_cursor until null, even when a page is shorter than limit.","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response. Only used in time-series mode.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket (time-series mode only). ASC = oldest first (default). DESC = newest first. Keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"tenor":1,"atm_iv":43.74,"call_25d_iv":41.2,"put_25d_iv":46.8,"skew_25d":5.6,"butterfly_25d":0.26,"call_10d_iv":38.5,"put_10d_iv":52.1,"skew_10d":13.6,"butterfly_10d":1.54},{"tenor":7,"atm_iv":40.43,"call_25d_iv":38.1,"put_25d_iv":43.9,"skew_25d":5.8,"butterfly_25d":0.57,"call_10d_iv":35.2,"put_10d_iv":49.3,"skew_10d":14.1,"butterfly_10d":1.82},{"tenor":14,"atm_iv":38.66,"call_25d_iv":36.5,"put_25d_iv":41.8,"skew_25d":5.3,"butterfly_25d":0.49,"call_10d_iv":33.8,"put_10d_iv":47.2,"skew_10d":13.4,"butterfly_10d":1.84},{"tenor":30,"atm_iv":38.55,"call_25d_iv":36.2,"put_25d_iv":41.9,"skew_25d":5.7,"butterfly_25d":0.5,"call_10d_iv":33.1,"put_10d_iv":48.5,"skew_10d":15.4,"butterfly_10d":2.25},{"tenor":60,"atm_iv":39.92,"call_25d_iv":37.4,"put_25d_iv":43.1,"skew_25d":5.7,"butterfly_25d":0.33,"call_10d_iv":34.5,"put_10d_iv":49.8,"skew_10d":15.3,"butterfly_10d":2.23},{"tenor":90,"atm_iv":41.3,"call_25d_iv":38.8,"put_25d_iv":44.5,"skew_25d":5.7,"butterfly_25d":0.35,"call_10d_iv":36.1,"put_10d_iv":51.2,"skew_10d":15.1,"butterfly_10d":2.35},{"tenor":180,"atm_iv":44.78,"call_25d_iv":42.1,"put_25d_iv":48.2,"skew_25d":6.1,"butterfly_25d":0.37,"call_10d_iv":39.3,"put_10d_iv":54.5,"skew_10d":15.2,"butterfly_10d":2.12},{"tenor":365,"atm_iv":47.15,"call_25d_iv":44.3,"put_25d_iv":50.8,"skew_25d":6.5,"butterfly_25d":0.4,"call_10d_iv":41.8,"put_10d_iv":57.3,"skew_10d":15.5,"butterfly_10d":2.4}],"meta":{"date":"2025-11-04T11:00:00.000Z","next_date":"2025-11-04T11:01:00.000Z"}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}},"504":{"description":"VOL_SURFACE_QUERY_TIMEOUT: history query could not complete in time. Retry with a smaller limit or shorter window."}},"security":[{"X-API-Key":[]}],"summary":"Vol Surface By Tenor","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"],"description":"Options exchange, including Paradex. Required; availability follows retained chain observations."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g., BTC, ETH). Required for vol-surface queries."},"date":{"format":"date-time","example":"2026-01-20T10:00:00Z","type":"string","description":"Exact date/time for a single snapshot in ISO 8601 format (UTC). If omitted and no start/end provided, returns the latest available snapshot. Mutually exclusive with start/end."},"start":{"format":"date-time","type":"string","description":"Start date for time-series mode in ISO 8601 UTC. Providing start or end selects history. When only end is supplied, start defaults to 24 hours before end."},"end":{"format":"date-time","type":"string","description":"End date for time-series mode in ISO 8601 UTC. Defaults to now when start is supplied."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for aggregation. The 1m default is a persisted aggregate of finer source observations; higher resolutions roll up those 1m records."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Requested page limit (1-1000). Only used in time-series mode (when start/end provided). limit is an upper bound on distinct time buckets, not tenor/expiry rows. Page caps by resolution: 1m/5m 1000, 15m 672, 1h 168, 4h 42, 1d 7. All tenors/expiries of a bucket stay together. This limits page work, not the requested date range or historical coverage. Keep the same filters and follow meta.next_cursor until null, even when a page is shorter than limit."},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response. Only used in time-series mode."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket (time-series mode only). ASC = oldest first (default). DESC = newest first. Keep sort_dir constant within a paginated scan."}},"required":["exchange","currency"]}}}}}},"/api/v1/options/vol-surface/by-time":{"get":{"description":"Exchange mark-IV analytics, not a fitted SVI/SABR surface. ATM selects the call nearest delta +0.50; call/put wings target nearest +0.25/-0.25 and +0.10/-0.10. Eligible quotes have positive mark IV, nonzero delta and positive time to expiry; an expiry requires an ATM call delta gap below 0.15. Wings have no maximum delta-distance test. A wing is null when its option side has no eligible quote; dependent skew and butterfly are also null. A populated wing is not proof that the exact requested delta was observed. For coarse resolution, each target selects across the entire requested interval, not just its final minute, so the returned metrics can describe different times within that interval. Historical expiry rows, optionally restricted by maturity.\n\nUTC interval start. Metrics can use quotes later within the labelled interval and can change while it is open; the label is not the time the value first became available. MCP also exposes snapshot_time in snapshot mode.\n\n1m, 5m, 15m, 1h, 4h or 1d quote-selection intervals; not IV candles.\n\nAlways history mode. Inclusive bounds are applied before grouping; limit counts time intervals, not maturity rows. Omitted start defaults to 24 hours before end; omitted end defaults to now, on both REST and MCP. Follow meta.next_cursor with unchanged bounds. Supply start explicitly to request older history.\n\nIVs are percentage points: 65 means 65%. Skew is put IV minus call IV at the named absolute delta; positive means puts are richer. Butterfly is (put IV + call IV) / 2 minus ATM IV, in the same percentage-point units.\n\nunderlying_price is the option pricing reference in USD, which may be expiry-specific; days_to_expiry and tenor are days.\n\nEligible observed expiries for the selected exchange and currency, not a guaranteed complete chain or historical listing universe.\n\nQuery /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selectors. Bounds do not certify every intermediate time or the completeness of every calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.vol_surface_by_time. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Vol Surface By Time","parameters":[{"name":"exchange","required":true,"in":"query","description":"Options exchange, including Paradex. Required; availability follows retained chain observations.","schema":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"]}},{"name":"currency","required":true,"in":"query","description":"Base currency (e.g., BTC, ETH). Required for vol-surface queries.","schema":{"example":"BTC","type":"string"}},{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 UTC. Omitted means 24 hours before end, or before now without end. Supply start explicitly for older history.","schema":{"format":"date-time","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 UTC. Defaults to now.","schema":{"format":"date-time","type":"string"}},{"name":"maturity","required":true,"in":"query","description":"Maturity to query (e.g., 23OCT26). Required for vol-surface history due to large dataset size.","schema":{"example":"23OCT26","type":"string"}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for aggregation. Default 1m.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"limit","required":false,"in":"query","description":"Requested page limit (1-1000). limit is an upper bound on distinct time buckets, not tenor/expiry rows. Page caps by resolution: 1m/5m 1000, 15m 672, 1h 168, 4h 42, 1d 7. All tenors/expiries of a bucket stay together. This limits page work, not the requested date range or historical coverage. Keep the same filters and follow meta.next_cursor until null, even when a page is shorter than limit.","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default). DESC = newest first. Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"date":"2025-11-04T10:00:00.000Z","exchange":"deribit","currency":"BTC","maturity":"29NOV25","days_to_expiry":25.54,"underlying_price":103500,"atm_iv":47.2,"call_25d_iv":43.5,"put_25d_iv":51.8,"skew_25d":8.3,"butterfly_25d":0.45,"call_10d_iv":39.8,"put_10d_iv":58.1,"skew_10d":18.3,"butterfly_10d":1.7},{"date":"2025-11-04T10:00:00.000Z","exchange":"deribit","currency":"BTC","maturity":"27DEC25","days_to_expiry":53.54,"underlying_price":103500,"atm_iv":51.9,"call_25d_iv":48.2,"put_25d_iv":56.5,"skew_25d":8.3,"butterfly_25d":0.45,"call_10d_iv":44.5,"put_10d_iv":63.2,"skew_10d":18.7,"butterfly_10d":1.75},{"date":"2025-11-04T11:00:00.000Z","exchange":"deribit","currency":"BTC","maturity":"29NOV25","days_to_expiry":25.5,"underlying_price":103722.83,"atm_iv":47.62,"call_25d_iv":43.8,"put_25d_iv":52.1,"skew_25d":8.3,"butterfly_25d":0.33,"call_10d_iv":40.1,"put_10d_iv":58.3,"skew_10d":18.2,"butterfly_10d":1.58}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI1LTExLTA0IDExOjAwOjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}},"504":{"description":"VOL_SURFACE_QUERY_TIMEOUT: history query could not complete in time. Retry with a smaller limit or shorter window."}},"security":[{"X-API-Key":[]}],"summary":"Vol Surface By Time","tags":["Options"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","enum":["deribit","binance","okx","bybit","bullish","derive","paradex"],"description":"Options exchange, including Paradex. Required; availability follows retained chain observations."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g., BTC, ETH). Required for vol-surface queries."},"start":{"format":"date-time","type":"string","description":"Start date in ISO 8601 UTC. Omitted means 24 hours before end, or before now without end. Supply start explicitly for older history."},"end":{"format":"date-time","type":"string","description":"End date in ISO 8601 UTC. Defaults to now."},"maturity":{"example":"23OCT26","type":"string","description":"Maturity to query (e.g., 23OCT26). Required for vol-surface history due to large dataset size."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for aggregation. Default 1m."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Requested page limit (1-1000). limit is an upper bound on distinct time buckets, not tenor/expiry rows. Page caps by resolution: 1m/5m 1000, 15m 672, 1h 168, 4h 42, 1d 7. All tenors/expiries of a bucket stay together. This limits page work, not the requested date range or historical coverage. Keep the same filters and follow meta.next_cursor until null, even when a page is shorter than limit."},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default). DESC = newest first. Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."}},"required":["exchange","currency","maturity"]}}}}}},"/api/v1/spot/catalog":{"get":{"description":"Spot instruments (instrument_name, exchange, currency, quote_currency) with a ticker row in the last 24 hours, as {data, next_cursor, total}. Pairs quiet for more than 24 hours, or with only trade candles, are absent. Current discovery, not an all-history instrument list.\n\nCurrent discovery over the trailing 24 hours, not a historical listing or trading-status timeline.\n\nInstrument inventory, not a time series.\n\nOptional exchange, currency and quote_currency filters; limit default 100, maximum 1000. next_cursor is an offset cursor and can shift if membership changes between pages.\n\nInstruments with ticker activity in the trailing 24 hours.\n\nAbsence from this current catalog does not establish absence of history. Use data-coverage for the specific spot product and instrument instead.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: spot.catalog. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Spot Catalog","parameters":[{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., binance, coinbase, bybit, okx)","schema":{"example":"binance","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency filter (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"quote_currency","required":false,"in":"query","description":"Quote currency filter (e.g., USDT, USDC, USD)","schema":{"example":"USDT","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"instrument_name":"BTCUSDT","exchange":"binance","currency":"BTC","quote_currency":"USDT"},{"instrument_name":"BTC-USD","exchange":"coinbase","currency":"BTC","quote_currency":"USD"}],"next_cursor":"eyJvZmZzZXQiOjEwMH0=","total":412}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Spot Catalog","tags":["Spot"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"binance","type":"string","description":"Exchange name (e.g., binance, coinbase, bybit, okx)"},"currency":{"example":"BTC","type":"string","description":"Base currency filter (e.g., BTC, ETH, SOL)"},"quote_currency":{"example":"USDT","type":"string","description":"Quote currency filter (e.g., USDT, USDC, USD)"},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."}}}}}}}},"/api/v1/spot/metadata":{"get":{"description":"For one exchange and instrument: first and last stored spot.ohlcvt candle minute and the number of stored candle minutes. Candles only, not ticker, level1, L2 or trade availability. total_pages = ceil(total_count / 100), a fixed page size of 100. Returns 400 when the instrument has no stored candles.\n\nFirst and last stored one-minute candle starts; not listing dates and not a promise of a candle at every minute in between.\n\nOne summary per instrument over stored one-minute candles.\n\nexchange and instrument_name are required; there are no time filters.\n\nNumber of stored one-minute candles, including flat zero-volume candles. Stored minutes are not continuous, so this is not the minute span between start_date and end_date.\n\nAny instrument with stored candles, including pairs no longer in the current catalog.\n\nThis summary bounds spot.ohlcvt candles only. For other spot products use data-coverage with their own coverage_endpoint_id and selector.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: spot.metadata. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Spot Metadata","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., binance, coinbase, bybit, okx)","schema":{"example":"binance","type":"string"}},{"name":"instrument_name","required":true,"in":"query","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD)","schema":{"example":"BTCUSDT","type":"string"}}],"responses":{"200":{"description":"Metadata successfully retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataResponseEntity"}}}},"400":{"description":"Bad Request - Invalid parameters or no data found","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Spot Metadata","tags":["Spot"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"binance","type":"string","description":"Exchange name (e.g., binance, coinbase, bybit, okx)"},"instrument_name":{"example":"BTCUSDT","type":"string","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD)"}},"required":["exchange","instrument_name"]}}}}}},"/api/v1/spot/ohlcvt":{"get":{"description":"Trade candles per UTC bucket: open, high, low, close, vwap, buy/sell base volume, buy/sell quote volume, buy/sell trade counts and first/last trade id; volume, quote_volume and trades_count are buy + sell. Coarser buckets use first open, maximum high, minimum low, last close and summed volumes and counts. vwap is weighted by traded base volume; a bucket with zero volume reports the mean of its minute vwap values. Stored minutes include flat zero-volume candles with no trades, so a candle is not evidence of an execution, and stored minutes are not continuous. data_source labels the ingestion path.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end (or now); omitted end is open-ended. Resolutions 1m, 5m, 15m, 1h, 4h and 1d (REST default 1m), aligned to UTC (4h buckets start at 00:00, 04:00, ... UTC). Buckets without a stored source minute are absent; there is no gap filling. Pass exchange and instrument_name. limit counts buckets; follow meta.next_cursor and keep sort_dir constant within a paginated scan.\n\nPrice in quote currency per one unit of base asset (USDT per BTC for binance BTCUSDT, USD per BTC for coinbase BTC-USD). Not converted to USD; USDT, USDC and USD pairs are separate markets.\n\nBase-asset quantity (BTC for BTCUSDT), not quote notional and not USD.\n\nQuote-asset notional (USDT for BTCUSDT, USD for BTC-USD), not converted to or certified as USD. Convert before adding across quote currencies.\n\nNumber of trades in the bucket; 0 on flat no-trade candles.\n\nbuy_*/sell_* split interval activity by the aggressor side of each trade.\n\nMatching stored rows for the requested exchange and instrument. Current catalog membership is not required; a pair that stopped trading can still be requested.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: spot.ohlcvt. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Spot OHLCVT Market Data","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., binance, coinbase, bybit, okx)","schema":{"example":"binance","type":"string"}},{"name":"instrument_name","required":true,"in":"query","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)","schema":{"example":"BTCUSDT","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"quote_currency","required":false,"in":"query","description":"Quote currency (e.g., USDT, USDC, USD)","schema":{"example":"USDT","type":"string"}}],"responses":{"200":{"description":"OHLCVT data successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SpotOhlcvtEntity"}}}}]},"example":{"data":[{"date":"2026-09-29T12:00:00.000Z","open":90125.5,"high":90340.75,"low":89980.25,"close":90210,"vwap":90150.3,"volume":45.82,"buy_volume":25.5,"sell_volume":20.32,"quote_volume":4130280,"buy_quote_volume":2298825,"sell_quote_volume":1831455,"trades_count":312,"buy_trades_count":175,"sell_trades_count":137,"first_trade_id":"5230471001","last_trade_id":"3847291312","data_source":"rest","quote_currency":"USDT"},{"date":"2026-09-29T12:01:00.000Z","open":90210,"high":90415,"low":90150,"close":90380.5,"vwap":90285.2,"volume":38.15,"buy_volume":22.1,"sell_volume":16.05,"quote_volume":3444382,"buy_quote_volume":1995303,"sell_quote_volume":1449079,"trades_count":248,"buy_trades_count":140,"sell_trades_count":108,"first_trade_id":"3847291313","last_trade_id":"3847291560","data_source":"rest","quote_currency":"USDT"},{"date":"2026-09-29T12:02:00.000Z","open":90380.5,"high":90425,"low":90200,"close":90275,"vwap":90310.8,"volume":29.63,"buy_volume":14.2,"sell_volume":15.43,"quote_volume":2675507,"buy_quote_volume":1282413,"sell_quote_volume":1393094,"trades_count":195,"buy_trades_count":92,"sell_trades_count":103,"first_trade_id":"3847291561","last_trade_id":"3847291755","data_source":"rest","quote_currency":"USDT"}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI2LTA5LTI5IDEyOjAyOjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Spot OHLCVT Market Data","tags":["Spot"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results"},"exchange":{"example":"binance","type":"string","description":"Exchange name (e.g., binance, coinbase, bybit, okx)"},"instrument_name":{"example":"BTCUSDT","type":"string","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g., BTC, ETH, SOL)"},"quote_currency":{"example":"USDT","type":"string","description":"Quote currency (e.g., USDT, USDC, USD)"}},"required":["instrument_name"]}}}}}},"/api/v1/spot/ticker":{"get":{"description":"Ticker-state bars per UTC bucket: open/high/low/close of last trade price, best bid, best ask, bid-ask spread, best bid size, best ask size and total_liquidity, with *_avg values and update counts, plus rolling 24-hour state fields. Coarser buckets use first open, maximum high, minimum low and last close; *_avg is the unweighted mean of the minute averages; ticker_updates_count and quote_updates_count are summed. The rolling 24-hour fields come from the final minute of the bucket. Trade-only minutes (quote_updates_count = 0) are included and serialize their bid/ask fields as 0, which can also pull coarser bid/ask lows and averages toward 0; use spot.level1 for quote statistics.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end (or now); omitted end is open-ended. Resolutions 1m, 5m, 15m, 1h, 4h and 1d (REST default 1m), aligned to UTC (4h buckets start at 00:00, 04:00, ... UTC). Buckets without a stored source minute are absent; there is no gap filling. Pass exchange and instrument_name. limit counts buckets; follow meta.next_cursor and keep sort_dir constant within a paginated scan.\n\nPrice in quote currency per one unit of base asset (USDT per BTC for binance BTCUSDT, USD per BTC for coinbase BTC-USD). Not converted to USD; USDT, USDC and USD pairs are separate markets.\n\nAbsolute best ask minus best bid in quote currency, not basis points or a percentage.\n\nBase-asset quantity (BTC for BTCUSDT), not quote notional and not USD. total_liquidity is best bid size plus best ask size.\n\nvolume_24h (base asset), quote_volume_24h (quote asset), high_24h and low_24h are the rolling 24-hour state at the final minute of the bucket, not a sum over the requested window. Do not add them across buckets.\n\nprice_change_24h_pct is a fraction, not percentage points: 0.0235 means +2.35%.\n\nbid_ask_spread_low / bid_ask_spread_high of a minute (0 to 1, higher = steadier spread); at coarser resolutions the mean of the minute ratios.\n\nMatching stored rows for the requested exchange and instrument. Current catalog membership is not required; a pair that stopped trading can still be requested.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: spot.ticker. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Spot Ticker History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., binance, coinbase, bybit, okx)","schema":{"example":"binance","type":"string"}},{"name":"instrument_name","required":true,"in":"query","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)","schema":{"example":"BTCUSDT","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"quote_currency","required":false,"in":"query","description":"Quote currency (e.g., USDT, USDC, USD)","schema":{"example":"USDT","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array"}}}]},"example":{"data":[{"date":"2026-09-29T12:00:00.000Z","last_price_open":90125.5,"last_price_high":90340.75,"last_price_low":89980.25,"last_price_close":90210,"bid_price_open":90124,"bid_price_high":90339,"bid_price_low":89979,"bid_price_close":90209,"ask_price_open":90126,"ask_price_high":90341,"ask_price_low":89981,"ask_price_close":90211,"bid_ask_spread_open":2,"bid_ask_spread_high":5,"bid_ask_spread_low":0.5,"bid_ask_spread_close":2,"bid_ask_spread_avg":1.8,"bid_size_open":0.5,"bid_size_high":2,"bid_size_low":0.1,"bid_size_close":0.8,"bid_size_avg":0.6,"ask_size_open":0.4,"ask_size_high":1.5,"ask_size_low":0.05,"ask_size_close":0.7,"ask_size_avg":0.5,"total_liquidity_open":0.9,"total_liquidity_high":3.5,"total_liquidity_low":0.15,"total_liquidity_close":1.5,"total_liquidity_avg":1.1,"volume_24h":15230.5,"quote_volume_24h":1373250000,"high_24h":91200,"low_24h":88500,"price_change_24h_pct":0.0235,"ticker_updates_count":1200,"quote_updates_count":800,"spread_stability_ratio":0.1,"quote_currency":"USDT"},{"date":"2026-09-29T12:01:00.000Z","last_price_open":90210,"last_price_high":90415,"last_price_low":90150,"last_price_close":90380.5,"bid_price_open":90209,"bid_price_high":90414,"bid_price_low":90149,"bid_price_close":90379,"ask_price_open":90211,"ask_price_high":90416,"ask_price_low":90151,"ask_price_close":90381,"bid_ask_spread_open":2,"bid_ask_spread_high":4,"bid_ask_spread_low":1,"bid_ask_spread_close":2,"bid_ask_spread_avg":1.9,"bid_size_open":0.8,"bid_size_high":1.8,"bid_size_low":0.2,"bid_size_close":0.6,"bid_size_avg":0.7,"ask_size_open":0.7,"ask_size_high":1.2,"ask_size_low":0.1,"ask_size_close":0.5,"ask_size_avg":0.55,"total_liquidity_open":1.5,"total_liquidity_high":3,"total_liquidity_low":0.3,"total_liquidity_close":1.1,"total_liquidity_avg":1.25,"volume_24h":15245.2,"quote_volume_24h":1374580000,"high_24h":91200,"low_24h":88500,"price_change_24h_pct":0.0238,"ticker_updates_count":1150,"quote_updates_count":780,"spread_stability_ratio":0.25,"quote_currency":"USDT"}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI2LTA5LTI5IDEyOjAxOjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Spot Ticker History","tags":["Spot"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results"},"exchange":{"example":"binance","type":"string","description":"Exchange name (e.g., binance, coinbase, bybit, okx)"},"instrument_name":{"example":"BTCUSDT","type":"string","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g., BTC, ETH, SOL)"},"quote_currency":{"example":"USDT","type":"string","description":"Quote currency (e.g., USDT, USDC, USD)"}},"required":["instrument_name"]}}}}}},"/api/v1/spot/trades":{"get":{"description":"All retained spot trade records, not a large-trade feed: trade_id, price, amount, quote_amount and direction, plus an attached quote snapshot (bid/ask price and size). Instrument mode selects one pair by instrument_name; currency mode selects every pair of a base currency. exchange is optional in both modes. Filters: quote_currency, direction, min_amount, min_quote_amount.\n\nStored trade event time. timestamp keeps milliseconds; date is the same time truncated to the second (.000Z), so order and paginate on timestamp. Not Laevitas ingestion or publication time.\n\nIndividual trades; no candle resolution.\n\nInclusive timestamp start/end. Omitted start defaults to 24 hours before end (or now); currency mode without end ends now. Default order is timestamp ASC in instrument mode and DESC in currency mode. Timestamp order paginates with a (timestamp, trade_id) cursor, so trades sharing a millisecond are not skipped; amount, price and quote_amount orders use an offset cursor that can shift if trades arrive between pages. top_n returns the N largest by the sort field (DESC) and disables the cursor.\n\nPrice in quote currency per one unit of base asset (USDT per BTC for binance BTCUSDT, USD per BTC for coinbase BTC-USD). Not converted to USD; USDT, USDC and USD pairs are separate markets.\n\nBase-asset quantity (BTC for BTCUSDT), not quote notional and not USD.\n\nQuote-asset notional (USDT for BTCUSDT, USD for BTC-USD), not converted to or certified as USD. Convert before adding across quote currencies.\n\nAggressor (taker) side: buy when the buyer took the ask, sell when the seller hit the bid. Verified on binance and coinbase; other venues report their own taker-side field.\n\nbid_price/ask_price/bid_size/ask_size are the same venue's best bid/ask and displayed sizes from its ticker stream as of the trade, refreshed every few seconds: a near-time reference rather than the exact book at execution. For execution-level spread or slippage analysis use spot.level1 or the order-book products.\n\nMatching retained trades within the 30-day retention window.\n\nTrades are kept for a rolling 30-day window, which data-coverage reports as retention; completeness is not_supported. Use it with this coverage_endpoint_id and the exact selector; for older activity use spot.ohlcvt candles.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: spot.trades. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Spot Trade History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction. Defaults to ASC for instrument mode, DESC for currency mode.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., binance, coinbase)","schema":{"example":"binance","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Full spot instrument identifier (e.g., BTCUSDT). Either instrument_name or currency is recommended.","schema":{"example":"BTCUSDT","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL spot pairs for this currency. Either currency or instrument_name is recommended.","schema":{"example":"BTC","type":"string"}},{"name":"quote_currency","required":false,"in":"query","description":"Quote currency (e.g., USDT, USDC, USD)","schema":{"example":"USDT","type":"string"}},{"name":"direction","required":false,"in":"query","description":"Filter by aggressor (taker) side","schema":{"type":"string","enum":["buy","sell"]}},{"name":"min_amount","required":false,"in":"query","description":"Minimum trade amount (in base currency). Filters out dust trades.","schema":{"example":0.01,"type":"number"}},{"name":"min_quote_amount","required":false,"in":"query","description":"Minimum trade value in quote currency. Filters out small trades.","schema":{"example":100,"type":"number"}},{"name":"sort","required":false,"in":"query","description":"Sort field. Default: timestamp.","schema":{"default":"timestamp","type":"string","enum":["timestamp","amount","price","quote_amount"]}},{"name":"top_n","required":false,"in":"query","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned.","schema":{"example":20,"type":"number"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array"}}}]},"example":{"data":[{"timestamp":1790685000123,"date":"2026-09-29T12:30:00.000Z","trade_id":"5230471001","exchange":"binance","instrument_name":"BTCUSDT","currency":"BTC","quote_currency":"USDT","direction":"buy","amount":0.125,"price":90250.5,"quote_amount":11281.31,"bid_price":90249,"ask_price":90251,"bid_size":0.5,"ask_size":0.4},{"timestamp":1790685001456,"date":"2026-09-29T12:30:01.000Z","trade_id":"5230471002","exchange":"binance","instrument_name":"BTCUSDT","currency":"BTC","quote_currency":"USDT","direction":"sell","amount":0.05,"price":90248,"quote_amount":4512.4,"bid_price":90247,"ask_price":90249,"bid_size":0.3,"ask_size":0.6},{"timestamp":1790685002789,"date":"2026-09-29T12:30:02.000Z","trade_id":"5230471003","exchange":"binance","instrument_name":"BTCUSDT","currency":"BTC","quote_currency":"USDT","direction":"buy","amount":1.5,"price":90255,"quote_amount":135382.5,"bid_price":90254,"ask_price":90256,"bid_size":0.8,"ask_size":0.3}],"meta":{"next_cursor":"eyJ0aW1lc3RhbXAiOjE3OTA2ODUwMDI3ODksInRyYWRlX2lkIjoiNTIzMDQ3MTAwMyJ9"}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Spot Trade History","tags":["Spot"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction. Defaults to ASC for instrument mode, DESC for currency mode."},"exchange":{"example":"binance","type":"string","description":"Exchange name (e.g., binance, coinbase)"},"instrument_name":{"example":"BTCUSDT","type":"string","description":"Full spot instrument identifier (e.g., BTCUSDT). Either instrument_name or currency is recommended."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, ETH). Returns trades across ALL spot pairs for this currency. Either currency or instrument_name is recommended."},"quote_currency":{"example":"USDT","type":"string","description":"Quote currency (e.g., USDT, USDC, USD)"},"direction":{"type":"string","enum":["buy","sell"],"description":"Filter by aggressor (taker) side"},"min_amount":{"example":0.01,"type":"number","description":"Minimum trade amount (in base currency). Filters out dust trades."},"min_quote_amount":{"example":100,"type":"number","description":"Minimum trade value in quote currency. Filters out small trades."},"sort":{"default":"timestamp","type":"string","enum":["timestamp","amount","price","quote_amount"],"description":"Sort field. Default: timestamp."},"top_n":{"example":20,"type":"number","description":"Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned."}}}}}}}},"/api/v1/spot/volume":{"get":{"description":"Per UTC bucket: the final rolling 24-hour counters volume_24h and quote_volume_24h from the last ticker minute of the bucket, alongside interval buy/sell base volume, buy/sell quote volume and buy/sell trade counts summed from trade candles (volume, quote_volume and trades_count are buy + sell). Rows exist only for buckets with a ticker row; a ticker bucket without candles reports 0 interval volume. Without exchange, REST returns one row per exchange per bucket.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end (or now); omitted end is open-ended. Resolutions 1m, 5m, 15m, 1h, 4h and 1d (REST default 1m), aligned to UTC (4h buckets start at 00:00, 04:00, ... UTC). Buckets without a stored source minute are absent; there is no gap filling. instrument_name is required; exchange is optional on REST. limit counts buckets; follow meta.next_cursor and keep sort_dir constant within a paginated scan.\n\nRolling 24-hour state, not a sum over the requested window. Base-asset quantity (BTC for BTCUSDT), not quote notional and not USD.\n\nRolling 24-hour state, not a sum over the requested window. Quote-asset notional (USDT for BTCUSDT, USD for BTC-USD), not converted to or certified as USD. Convert before adding across quote currencies.\n\nBase-asset quantity (BTC for BTCUSDT), not quote notional and not USD.\n\nQuote-asset notional (USDT for BTCUSDT, USD for BTC-USD), not converted to or certified as USD. Convert before adding across quote currencies.\n\nbuy_*/sell_* split interval activity by the aggressor side of each trade.\n\nMatching stored rows for the requested exchange and instrument. Current catalog membership is not required; a pair that stopped trading can still be requested.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: spot.volume. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Spot Volume Stats","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., binance, coinbase, bybit, okx)","schema":{"example":"binance","type":"string"}},{"name":"instrument_name","required":true,"in":"query","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)","schema":{"example":"BTCUSDT","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"quote_currency","required":false,"in":"query","description":"Quote currency (e.g., USDT, USDC, USD)","schema":{"example":"USDT","type":"string"}}],"responses":{"200":{"description":"Successfully retrieved spot volume data","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array"}}}]},"example":{"data":[{"date":"2026-09-29T12:00:00.000Z","volume_24h":15230.5,"quote_volume_24h":1373250000,"buy_volume":25.5,"sell_volume":20.32,"volume":45.82,"buy_quote_volume":2298825,"sell_quote_volume":1831455,"quote_volume":4130280,"buy_trades_count":175,"sell_trades_count":137,"trades_count":312,"quote_currency":"USDT"},{"date":"2026-09-29T12:01:00.000Z","volume_24h":15245.2,"quote_volume_24h":1374580000,"buy_volume":22.1,"sell_volume":16.05,"volume":38.15,"buy_quote_volume":1995303,"sell_quote_volume":1449079,"quote_volume":3444382,"buy_trades_count":140,"sell_trades_count":108,"trades_count":248,"quote_currency":"USDT"},{"date":"2026-09-29T12:02:00.000Z","volume_24h":15260.8,"quote_volume_24h":1375920000,"buy_volume":14.2,"sell_volume":15.43,"volume":29.63,"buy_quote_volume":1282413,"sell_quote_volume":1393094,"quote_volume":2675507,"buy_trades_count":92,"sell_trades_count":103,"trades_count":195,"quote_currency":"USDT"}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI2LTA5LTI5IDEyOjAyOjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Spot Volume Stats","tags":["Spot"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results"},"exchange":{"example":"binance","type":"string","description":"Exchange name (e.g., binance, coinbase, bybit, okx)"},"instrument_name":{"example":"BTCUSDT","type":"string","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g., BTC, ETH, SOL)"},"quote_currency":{"example":"USDT","type":"string","description":"Quote currency (e.g., USDT, USDC, USD)"}},"required":["instrument_name"]}}}}}},"/api/v1/spot/snapshot":{"get":{"description":"Cross-instrument chain of ticker-state rows for one exchange, optionally filtered by currency and quote_currency, at one minute or bucket. Each row has the spot.ticker field set: last/bid/ask/spread/size/total_liquidity OHLC and averages, update counts and rolling 24-hour state (price_change_24h_pct is a fraction). Trade-candle fields (open/close/vwap/volume/trade counts) are not returned; use spot.ohlcvt. meta.date and meta.next_date give the selected and the next minute or bucket.\n\nRow date and meta.date are the selected UTC minute or bucket start; meta.next_date is the following minute or bucket start. Not an exchange publication time.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nAt 1m (default), date must match a stored minute exactly; there is no nearest-minute fallback, and a date-only value means 00:00:00 UTC. Omitted date selects the latest stored minute (or the bucket containing it) for the exchange and filters since the start of the previous UTC day; that newest minute can be only partly populated while ingestion completes. At coarser resolutions, date selects the whole containing UTC bucket, including observations AFTER date; it is not an as-of cutoff. REST returns all matching rows without an instrument limit.\n\nPrice in quote currency per one unit of base asset (USDT per BTC for binance BTCUSDT, USD per BTC for coinbase BTC-USD). Not converted to USD; USDT, USDC and USD pairs are separate markets.\n\nAbsolute best ask minus best bid in quote currency, not basis points or a percentage.\n\nBase-asset quantity (BTC for BTCUSDT), not quote notional and not USD. total_liquidity is best bid size plus best ask size.\n\nvolume_24h (base asset), quote_volume_24h (quote asset), high_24h and low_24h are the rolling 24-hour state at the final minute of the bucket, not a sum over the requested window. Do not add them across buckets.\n\nprice_change_24h_pct is a fraction, not percentage points: 0.0235 means +2.35%.\n\nbid_ask_spread_low / bid_ask_spread_high of a minute (0 to 1, higher = steadier spread); at coarser resolutions the mean of the minute ratios.\n\nInstruments with a ticker row in the selected minute or bucket; instruments with only trade candles are excluded. Not a join against the current catalog and not a certified listing or trading-status record.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: spot.snapshot. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Spot Snapshot","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., binance, coinbase, bybit, okx)","schema":{"example":"binance","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency filter (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"quote_currency","required":false,"in":"query","description":"Quote currency filter (e.g., USDT, USDC, USD)","schema":{"example":"USDT","type":"string"}},{"name":"date","required":false,"in":"query","description":"At 1m, exact retained minute (use :00 seconds), not nearest minute. At coarser resolutions selects the entire containing UTC bucket, including observations after date; not an as-of cutoff. Omit for latest available snapshot.","schema":{"format":"date-time","example":"2025-01-15T15:09:00Z","type":"string"}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for the snapshot data. 1m returns one exact minute; coarser values aggregate a UTC bucket.","schema":{"default":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"exchange":"binance","instrument_name":"BTCUSDT","currency":"BTC","date":"2026-09-29T12:00:00.000Z","last_price_open":90125.5,"last_price_high":90340.75,"last_price_low":89980.25,"last_price_close":90210,"bid_price_open":90124,"bid_price_high":90339,"bid_price_low":89979,"bid_price_close":90209,"ask_price_open":90126,"ask_price_high":90341,"ask_price_low":89981,"ask_price_close":90211,"bid_ask_spread_open":2,"bid_ask_spread_high":5,"bid_ask_spread_low":0.5,"bid_ask_spread_close":2,"bid_ask_spread_avg":1.8,"bid_size_open":0.5,"bid_size_high":2,"bid_size_low":0.1,"bid_size_close":0.8,"bid_size_avg":0.6,"ask_size_open":0.4,"ask_size_high":1.5,"ask_size_low":0.05,"ask_size_close":0.7,"ask_size_avg":0.5,"total_liquidity_open":0.9,"total_liquidity_high":3.5,"total_liquidity_low":0.15,"total_liquidity_close":1.5,"total_liquidity_avg":1.1,"volume_24h":15230.5,"quote_volume_24h":1373250000,"high_24h":91200,"low_24h":88500,"price_change_24h_pct":0.0235,"ticker_updates_count":1200,"quote_updates_count":800,"spread_stability_ratio":0.1,"quote_currency":"USDT"}],"meta":{"date":"2026-09-29T12:00:00.000Z","next_date":"2026-09-29T12:01:00.000Z"}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Spot Snapshot","tags":["Spot"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"binance","type":"string","description":"Exchange name (e.g., binance, coinbase, bybit, okx)"},"currency":{"example":"BTC","type":"string","description":"Base currency filter (e.g., BTC, ETH, SOL)"},"quote_currency":{"example":"USDT","type":"string","description":"Quote currency filter (e.g., USDT, USDC, USD)"},"date":{"format":"date-time","example":"2025-01-15T15:09:00Z","type":"string","description":"At 1m, exact retained minute (use :00 seconds), not nearest minute. At coarser resolutions selects the entire containing UTC bucket, including observations after date; not an as-of cutoff. Omit for latest available snapshot."},"resolution":{"default":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for the snapshot data. 1m returns one exact minute; coarser values aggregate a UTC bucket."}},"required":["exchange"]}}}}}},"/api/v1/spot/level1":{"get":{"description":"Same fields and aggregation as spot.ticker, restricted to minutes with at least one quote update (quote_updates_count > 0), so trade-only minutes do not contribute zero bid/ask values. Coarser buckets use first open, maximum high, minimum low and last close; *_avg is the unweighted mean of the minute averages; ticker_updates_count and quote_updates_count are summed. Top of book only: no depth, order IDs or quote-by-quote replay; historical displayed size does not guarantee a fill. Default limit 100.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end (or now); omitted end is open-ended. Resolutions 1m, 5m, 15m, 1h, 4h and 1d (REST default 1m), aligned to UTC (4h buckets start at 00:00, 04:00, ... UTC). Buckets without a stored source minute are absent; there is no gap filling. Pass exchange and instrument_name. limit counts buckets; follow meta.next_cursor and keep sort_dir constant within a paginated scan.\n\nPrice in quote currency per one unit of base asset (USDT per BTC for binance BTCUSDT, USD per BTC for coinbase BTC-USD). Not converted to USD; USDT, USDC and USD pairs are separate markets.\n\nAbsolute best ask minus best bid in quote currency, not basis points or a percentage.\n\nBase-asset quantity (BTC for BTCUSDT), not quote notional and not USD. total_liquidity is best bid size plus best ask size.\n\nvolume_24h (base asset), quote_volume_24h (quote asset), high_24h and low_24h are the rolling 24-hour state at the final minute of the bucket, not a sum over the requested window. Do not add them across buckets.\n\nprice_change_24h_pct is a fraction, not percentage points: 0.0235 means +2.35%.\n\nbid_ask_spread_low / bid_ask_spread_high of a minute (0 to 1, higher = steadier spread); at coarser resolutions the mean of the minute ratios.\n\nMatching stored rows for the requested exchange and instrument. Current catalog membership is not required; a pair that stopped trading can still be requested.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. Bounds cover this product only, not all Laevitas history; they do not certify every intermediate minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: spot.level1. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Spot Level 1","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., binance, coinbase, bybit, okx)","schema":{"example":"binance","type":"string"}},{"name":"instrument_name","required":true,"in":"query","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)","schema":{"example":"BTCUSDT","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"quote_currency","required":false,"in":"query","description":"Quote currency (e.g., USDT, USDC, USD)","schema":{"example":"USDT","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array"}}}]},"example":{"data":[{"date":"2026-09-29T12:00:00.000Z","last_price_open":90125.5,"last_price_high":90340.75,"last_price_low":89980.25,"last_price_close":90210,"bid_price_open":90124,"bid_price_high":90339,"bid_price_low":89979,"bid_price_close":90209,"ask_price_open":90126,"ask_price_high":90341,"ask_price_low":89981,"ask_price_close":90211,"bid_ask_spread_open":2,"bid_ask_spread_high":5,"bid_ask_spread_low":0.5,"bid_ask_spread_close":2,"bid_ask_spread_avg":1.8,"bid_size_open":0.5,"bid_size_high":2,"bid_size_low":0.1,"bid_size_close":0.8,"bid_size_avg":0.6,"ask_size_open":0.4,"ask_size_high":1.5,"ask_size_low":0.05,"ask_size_close":0.7,"ask_size_avg":0.5,"total_liquidity_open":0.9,"total_liquidity_high":3.5,"total_liquidity_low":0.15,"total_liquidity_close":1.5,"total_liquidity_avg":1.1,"volume_24h":15230.5,"quote_volume_24h":1373250000,"high_24h":91200,"low_24h":88500,"price_change_24h_pct":0.0235,"ticker_updates_count":1200,"quote_updates_count":800,"spread_stability_ratio":0.1,"quote_currency":"USDT"}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI2LTA5LTI5IDEyOjAwOjAwIn0="}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Spot Level 1","tags":["Spot"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results"},"exchange":{"example":"binance","type":"string","description":"Exchange name (e.g., binance, coinbase, bybit, okx)"},"instrument_name":{"example":"BTCUSDT","type":"string","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g., BTC, ETH, SOL)"},"quote_currency":{"example":"USDT","type":"string","description":"Quote currency (e.g., USDT, USDC, USD)"}},"required":["instrument_name"]}}}}}},"/api/v1/spot/l2-orderbook":{"get":{"description":"Per-UTC-bucket summaries of order-book snapshots (about one per second): open/high/low/close and mean of the summed top-10/20/50/100 bid and ask sizes (bid_liq_*, ask_liq_*), of depth imbalance and of microprice, plus snapshot_count. Coarser buckets use first open, maximum high, minimum low, last close, the mean of the minute averages and the summed snapshot_count. microprice is the top-of-book size-weighted price (best_bid × best_ask_size + best_ask × best_bid_size) / (best_bid_size + best_ask_size), in quote currency; not a depth-weighted mid.\n\nUTC interval start. 15:09 labels [15:09:00, 15:10:00) at 1m, not a quote at exactly 15:09:00.\n\nRetained one-minute buckets; coarser resolutions combine those buckets, not raw tick replay.\n\nstart/end include matching source minutes before aggregation. Partial edge buckets can differ between windows. For a full hour use :00:00 through :59:59 UTC, not an end at the next hour. Omitted start defaults to 24 hours before end (or now); omitted end is open-ended. Resolutions 1m, 5m, 15m, 1h, 4h and 1d (REST default 1m), aligned to UTC (4h buckets start at 00:00, 04:00, ... UTC). Buckets without a stored source minute are absent; there is no gap filling. Pass exchange and instrument_name. limit counts buckets; follow meta.next_cursor and keep sort_dir constant within a paginated scan. For repeated reads with the same explicit bounds, selectors, resolution and sort order, compare all REST data rows separately from meta. meta.coverage.latest_observed_at, meta.completeness.complete_through and meta.completeness.updated_at can change while those rows stay unchanged. A full-response hash or ETag is not a data-only revision identifier; no per-window data revision field is exposed. Follow every page and preserve every row field, null and zero. MCP compaction can omit fields or round values, so use REST for exact data comparisons. This is not a historical-immutability or original-availability guarantee.\n\nSum of displayed sizes at the top N levels. Base-asset quantity (BTC for BTCUSDT), not quote notional and not USD.\n\nDimensionless (bid − ask) / (bid + ask) of the summed sizes at that depth, in [−1, 1]; positive means more resting bid size.\n\nPrice in quote currency per one unit of base asset (USDT per BTC for binance BTCUSDT, USD per BTC for coinbase BTC-USD). Not converted to USD; USDT, USDC and USD pairs are separate markets.\n\nNumber of order-book snapshots summarized in the bucket.\n\nMatching stored rows for the requested exchange and instrument. Current catalog membership is not required; a pair that stopped trading can still be requested.\n\nUse /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selector. No retention term is declared for this product (retention=null), which does not mean unlimited history, and completeness is not_supported; observed bounds cover this product only and do not certify every minute.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: spot.l2_orderbook. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Spot L2 Orderbook","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., binance, coinbase, bybit, okx)","schema":{"example":"binance","type":"string"}},{"name":"instrument_name","required":true,"in":"query","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)","schema":{"example":"BTCUSDT","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"quote_currency","required":false,"in":"query","description":"Quote currency (e.g., USDT, USDC, USD)","schema":{"example":"USDT","type":"string"}}],"responses":{"200":{"description":"L2 orderbook data successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array"}}}]},"example":{"data":[{"date":"2026-09-29T12:00:00.000Z","exchange":"binance","instrument_name":"BTCUSDT","currency":"BTC","quote_currency":"USDT","bid_liq_10_open":0.301,"bid_liq_10_high":0.55,"bid_liq_10_low":0.15,"bid_liq_10_close":0.42,"bid_liq_10_avg":0.35,"bid_liq_20_open":0.359,"bid_liq_20_high":0.8,"bid_liq_20_low":0.2,"bid_liq_20_close":0.5,"bid_liq_20_avg":0.45,"bid_liq_50_open":7.831,"bid_liq_50_high":10.5,"bid_liq_50_low":5.2,"bid_liq_50_close":8.1,"bid_liq_50_avg":7.5,"bid_liq_100_open":12.891,"bid_liq_100_high":18,"bid_liq_100_low":9,"bid_liq_100_close":14.5,"bid_liq_100_avg":13.2,"ask_liq_10_open":5.375,"ask_liq_10_high":6.2,"ask_liq_10_low":4.1,"ask_liq_10_close":5.1,"ask_liq_10_avg":5,"ask_liq_20_open":6.398,"ask_liq_20_high":8,"ask_liq_20_low":4.5,"ask_liq_20_close":6,"ask_liq_20_avg":5.8,"ask_liq_50_open":18.966,"ask_liq_50_high":22,"ask_liq_50_low":15,"ask_liq_50_close":19.5,"ask_liq_50_avg":18.2,"ask_liq_100_open":40.834,"ask_liq_100_high":50,"ask_liq_100_low":30,"ask_liq_100_close":42,"ask_liq_100_avg":39.5,"imbalance_10_open":-0.894,"imbalance_10_high":-0.5,"imbalance_10_low":-0.95,"imbalance_10_close":-0.82,"imbalance_10_avg":-0.78,"imbalance_20_open":-0.894,"imbalance_20_high":-0.5,"imbalance_20_low":-0.95,"imbalance_20_close":-0.82,"imbalance_20_avg":-0.78,"imbalance_50_open":-0.416,"imbalance_50_high":-0.1,"imbalance_50_low":-0.6,"imbalance_50_close":-0.35,"imbalance_50_avg":-0.38,"imbalance_100_open":-0.52,"imbalance_100_high":-0.2,"imbalance_100_low":-0.7,"imbalance_100_close":-0.45,"imbalance_100_avg":-0.48,"microprice_open":90125.9,"microprice_high":90340,"microprice_low":89980,"microprice_close":90210.5,"microprice_avg":90165.2,"snapshot_count":60}],"meta":{"next_cursor":"eyJtaW51dGUiOiIyMDI2LTA5LTI5IDEyOjAwOjAwIn0="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Spot L2 Orderbook","tags":["Spot"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results"},"exchange":{"example":"binance","type":"string","description":"Exchange name (e.g., binance, coinbase, bybit, okx)"},"instrument_name":{"example":"BTCUSDT","type":"string","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g., BTC, ETH, SOL)"},"quote_currency":{"example":"USDT","type":"string","description":"Quote currency (e.g., USDT, USDC, USD)"}},"required":["instrument_name"]}}}}}},"/api/v1/spot/l2-orderbook-raw":{"get":{"description":"Individual stored order-book snapshots, not aggregated: bids and asks as up to 100 {price, size} levels ordered best first, depth (levels present), precomputed summed bid/ask liquidity at 10/20/50/100 levels, imbalance at each depth and microprice. Snapshot books, not incremental deltas, order IDs or queue positions. microprice is the top-of-book size-weighted price (best_bid × best_ask_size + best_ask × best_bid_size) / (best_bid_size + best_ask_size), in quote currency; not a depth-weighted mid.\n\nStored snapshot time; timestamp keeps milliseconds and date is truncated to the second. Whether it is exchange time or Laevitas receipt time is not verified.\n\nIndividual stored snapshots, roughly one per second per instrument; no resolution parameter.\n\nInclusive timestamp start/end; omitted start defaults to 24 hours before end (or now). instrument_name is required; without exchange, REST merges snapshots from every venue. The cursor resumes after (timestamp, exchange, instrument_name), so snapshots sharing a millisecond across venues or instruments are not skipped; follow meta.next_cursor.\n\nprice: Price in quote currency per one unit of base asset (USDT per BTC for binance BTCUSDT, USD per BTC for coinbase BTC-USD). Not converted to USD; USDT, USDC and USD pairs are separate markets. size: Base-asset quantity (BTC for BTCUSDT), not quote notional and not USD.\n\nSum of displayed sizes at the top N levels. Base-asset quantity (BTC for BTCUSDT), not quote notional and not USD.\n\nDimensionless (bid − ask) / (bid + ask) of the summed sizes at that depth, in [−1, 1]; positive means more resting bid size.\n\nMatching stored snapshots within the 30-day retention window.\n\nRaw snapshots are kept for a rolling 30-day window, which data-coverage reports as retention; completeness is not_supported. Use it with this coverage_endpoint_id and the exact selector; for older depth use spot.l2_orderbook.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: spot.l2_orderbook_raw. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Spot L2 Orderbook Raw","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (e.g., binance, coinbase, bybit, okx)","schema":{"example":"binance","type":"string"}},{"name":"instrument_name","required":true,"in":"query","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)","schema":{"example":"BTCUSDT","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"quote_currency","required":false,"in":"query","description":"Quote currency (e.g., USDT, USDC, USD)","schema":{"example":"USDT","type":"string"}}],"responses":{"200":{"description":"Raw L2 orderbook snapshots successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array"}}}]},"example":{"data":[{"timestamp":1790685000123,"date":"2026-09-29T12:30:00.000Z","exchange":"binance","instrument_name":"BTCUSDT","currency":"BTC","quote_currency":"USDT","depth":100,"bids":[{"price":90209,"size":0.169},{"price":90208.5,"size":0.002}],"asks":[{"price":90211,"size":3.085},{"price":90211.5,"size":0.002}],"bid_liquidity_10":0.301,"ask_liquidity_10":5.375,"bid_liquidity_20":0.359,"ask_liquidity_20":6.398,"bid_liquidity_50":7.831,"ask_liquidity_50":18.966,"bid_liquidity_100":12.891,"ask_liquidity_100":40.834,"imbalance_10":-0.894,"imbalance_20":-0.894,"imbalance_50":-0.416,"imbalance_100":-0.52,"microprice":90210.905}],"meta":{"next_cursor":"eyJ0aW1lc3RhbXAiOjE3OTA2ODUwMDAxMjMsImV4Y2hhbmdlIjoiYmluYW5jZSIsImluc3RydW1lbnRfbmFtZSI6IkJUQ1VTRFQifQ=="}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Spot L2 Orderbook Raw Snapshots","tags":["Spot"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"exchange":{"example":"binance","type":"string","description":"Exchange name (e.g., binance, coinbase, bybit, okx)"},"instrument_name":{"example":"BTCUSDT","type":"string","description":"Full spot instrument identifier (e.g., BTCUSDT, BTC-USD, BTC-USDT)"},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g., BTC, ETH, SOL)"},"quote_currency":{"example":"USDT","type":"string","description":"Quote currency (e.g., USDT, USDC, USD)"}},"required":["instrument_name"]}}}}}},"/api/v1/analytics/realized-volatility":{"get":{"description":"Calculated from perpetual mark-price OHLC, not trade-price candles or an aggregate spot index. Let A = 8760 for hourly bars or 365 for daily bars. close_to_close = 100 × sqrt(A × population variance of finite, nonzero log(close / previous close) returns); zero returns are excluded. parkinson = 100 × sqrt(A × mean(log(high / low)² / (4 × ln(2)))). garman_klass = 100 × sqrt(A × mean(0.5 × log(high / low)² - (2 × ln(2) - 1) × log(close / open)²)). The range estimators use positive OHLC with high > low. sample_count counts the qualifying returns or bars for that estimator. At least 90% of window_days × (24 hourly or 1 daily) qualifying samples are required; gaps are not filled or elapsed-time adjusted.\n\nCalculation snapshot label, not the close of its hourly/daily input bar or first availability. Lookbacks end at calculation time and can include the current unfinished hour/day; inputs are not certified as bounded by the labelled snapshot time.\n\nNominal five-minute calculations. frequency selects hourly/daily input bars, not output sampling. Hourly lookbacks: 7/30/60/90/180/365 days; daily: 30/60/90/180/365. frequency=daily with window_days=7 is rejected; use hourly for a seven-day lookback.\n\nOmit start/end for the latest row per frequency/window/estimator; date adds an at-or-before cutoff, not original availability. Those combinations may have different dates. start or end enables history with only the supplied inclusive bounds; no automatic 24-hour start. limit counts rows and the cursor orders date/frequency/window/estimator. Keep every selector and bound unchanged while paging.\n\nrv_annualized is annualized percentage points: 38.76 means 38.76%, not 0.3876. sample_count is an estimator-specific count, not elapsed hours or proof of continuous inputs.\n\nObserved perpetual instruments with enough qualifying mark-price bars. Not options implied volatility, dated-futures coverage, or the aggregate-spot realized_volatility series of /derivatives/funding-history.\n\nNo dedicated coverage lookup is declared for this product. Catalog dates or returned rows describe observed availability, not continuous completeness or an original trading-universe record.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: analytics.realized_volatility. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"getRealizedVolatility","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name. Required. Case-insensitive. Example data includes Deribit, Binance, and Hyperliquid instruments.","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":true,"in":"query","description":"Exact instrument identifier. Required; preserve catalog spelling and case.","schema":{"example":"BTC-PERPETUAL","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency filter. Case-insensitive.","schema":{"example":"BTC","type":"string"}},{"name":"frequency","required":false,"in":"query","description":"Input-bar frequency (hourly/daily), not output cadence; can include the unfinished interval.","schema":{"example":"daily","type":"string","enum":["daily","hourly"]}},{"name":"window_days","required":false,"in":"query","description":"Lookback days. Hourly: 7/30/60/90/180/365; daily: 30/60/90/180/365. Daily 7 is rejected; use hourly for a seven-day lookback.","schema":{"minimum":1,"example":30,"type":"number","enum":[7,30,60,90,180,365]}},{"name":"estimator","required":false,"in":"query","description":"Realised volatility estimator filter.","schema":{"example":"close_to_close","type":"string","enum":["close_to_close","parkinson","garman_klass"]}},{"name":"date","required":false,"in":"query","description":"Latest calculation at or before this UTC cutoff, not originally available-at history. Used only without start/end; omit for latest rows.","schema":{"format":"date-time","example":"2026-04-27T12:35:30Z","type":"string"}},{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). Providing start or end enables historical mode.","schema":{"format":"date-time","example":"2026-04-27T00:00:00Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Providing start or end enables historical mode.","schema":{"format":"date-time","example":"2026-04-28T00:00:00Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of historical records to return (1-1000). Ignored in snapshot mode.","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next historical page. Use meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by ts (historical mode only). ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":"Realised volatility data successfully retrieved","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PaginatedResponse"},{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RealizedVolatilityEntity"}}}}]},"example":{"data":[{"date":"2026-04-27T12:35:30.000Z","exchange":"deribit","currency":"BTC","instrument_name":"BTC-PERPETUAL","frequency":"daily","window_days":30,"estimator":"close_to_close","rv_annualized":35.73,"sample_count":30},{"date":"2026-04-27T12:35:30.000Z","exchange":"deribit","currency":"BTC","instrument_name":"BTC-PERPETUAL","frequency":"daily","window_days":30,"estimator":"parkinson","rv_annualized":39.11,"sample_count":30},{"date":"2026-04-27T12:35:30.000Z","exchange":"deribit","currency":"BTC","instrument_name":"BTC-PERPETUAL","frequency":"daily","window_days":30,"estimator":"garman_klass","rv_annualized":39.85,"sample_count":30}],"meta":{"next_cursor":null}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Realized Volatility","tags":["Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name. Required. Case-insensitive. Example data includes Deribit, Binance, and Hyperliquid instruments."},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Exact instrument identifier. Required; preserve catalog spelling and case."},"currency":{"example":"BTC","type":"string","description":"Base currency filter. Case-insensitive."},"frequency":{"example":"daily","type":"string","enum":["daily","hourly"],"description":"Input-bar frequency (hourly/daily), not output cadence; can include the unfinished interval."},"window_days":{"minimum":1,"example":30,"type":"number","enum":[7,30,60,90,180,365],"description":"Lookback days. Hourly: 7/30/60/90/180/365; daily: 30/60/90/180/365. Daily 7 is rejected; use hourly for a seven-day lookback."},"estimator":{"example":"close_to_close","type":"string","enum":["close_to_close","parkinson","garman_klass"],"description":"Realised volatility estimator filter."},"date":{"format":"date-time","example":"2026-04-27T12:35:30Z","type":"string","description":"Latest calculation at or before this UTC cutoff, not originally available-at history. Used only without start/end; omit for latest rows."},"start":{"format":"date-time","example":"2026-04-27T00:00:00Z","type":"string","description":"Start date in ISO 8601 format (UTC). Providing start or end enables historical mode."},"end":{"format":"date-time","example":"2026-04-28T00:00:00Z","type":"string","description":"End date in ISO 8601 format (UTC). Providing start or end enables historical mode."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of historical records to return (1-1000). Ignored in snapshot mode."},"cursor":{"type":"string","description":"Pagination cursor for fetching the next historical page. Use meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by ts (historical mode only). ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."}},"required":["exchange","instrument_name"]}}}}}},"/api/v1/instruments":{"get":{"description":"Returns a paginated list of instrument contract specifications across all exchanges and market types. Filter by exchange, market_type, base_currency, quote_currency, status, margin_type, option_type, expiry range, or partial instrument name match. Returns contract reference data including tick size, lot size, leverage, expiry, etc.","operationId":"getInstruments","parameters":[{"name":"exchange","required":false,"in":"query","description":"Filter by exchange (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, bullish, nado, coinbase, paradex)","schema":{"example":"deribit","type":"string"}},{"name":"market_type","required":false,"in":"query","description":"Filter by market type","schema":{"example":"perpetual","type":"string","enum":["spot","perpetual","future","option"]}},{"name":"base_currency","required":false,"in":"query","description":"Filter by base currency (e.g., BTC, ETH, SOL)","schema":{"example":"BTC","type":"string"}},{"name":"quote_currency","required":false,"in":"query","description":"Filter by quote currency (e.g., USD, USDT, USDC)","schema":{"example":"USD","type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by instrument status. Default 'active'. Pass 'all' to include all statuses.","schema":{"default":"active","example":"active","type":"string","enum":["active","expired","delisted","suspended","all"]}},{"name":"instrument_name","required":false,"in":"query","description":"Filter by instrument name (partial match, case-insensitive)","schema":{"example":"BTC","type":"string"}},{"name":"margin_type","required":false,"in":"query","description":"Filter by margin type: linear or inverse","schema":{"example":"linear","type":"string"}},{"name":"option_type","required":false,"in":"query","description":"Filter by option type: call or put","schema":{"example":"call","type":"string"}},{"name":"asset_class","required":false,"in":"query","description":"Filter by asset class. Defaults to all classes. Use \"equity\"/\"commodity\"/\"forex\"/\"index\" to scope to non-crypto perps (NVDA/TSLA equity perps, GOLD/OIL commodity perps, EURUSD FX perps, etc.).","schema":{"example":"equity","type":"string","enum":["crypto","equity","commodity","forex","index"]}},{"name":"sub_exchange","required":false,"in":"query","description":"Filter by sub-venue. Used for Hyperliquid HIP-3 deployers: xyz, flx, km, cash, vntl, hyna. Empty string matches single-venue exchanges (binance/bybit/okx/kraken/etc.).","schema":{"example":"xyz","type":"string"}},{"name":"expiry_from","required":false,"in":"query","description":"Filter instruments with expiry_date >= this value (ISO 8601 datetime)","schema":{"example":"2026-01-01T00:00:00Z","type":"string"}},{"name":"expiry_to","required":false,"in":"query","description":"Filter instruments with expiry_date <= this value (ISO 8601 datetime)","schema":{"example":"2026-12-31T23:59:59Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in next_cursor from the previous response.","schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of instrument metadata","content":{"application/json":{"example":{"data":[{"exchange":"deribit","instrument_name":"BTC-PERPETUAL","market_type":"perpetual","base_currency":"BTC","quote_currency":"USD","settlement_currency":"BTC","margin_type":"inverse","contract_multiplier":1,"contract_value":10,"contract_value_currency":"USD","tick_size":0.5,"lot_size":1,"min_order_size":1,"option_type":"","exercise_style":"","strike":null,"expiry_date":null,"contract_cycle":"","funding_interval_hours":8,"delivery_date":null,"underlying_index":"btc_usd","max_leverage":50,"price_precision":1,"quantity_precision":0,"sub_exchange":"","asset_class":"crypto","max_position_notional":null,"status":"active","listing_date":"2020-01-01T00:00:00.000Z","updated_at":"2026-04-02T12:00:00.000Z","created_at":"2020-01-01T00:00:00.000Z"}],"meta":{"next_cursor":"eyJvZmZzZXQiOjEwMH0=","total":15000,"count":1}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"List Instruments","tags":["Instruments"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Filter by exchange (e.g., deribit, binance, okx, bybit, hyperliquid, kraken, bullish, nado, coinbase, paradex)"},"market_type":{"example":"perpetual","type":"string","enum":["spot","perpetual","future","option"],"description":"Filter by market type"},"base_currency":{"example":"BTC","type":"string","description":"Filter by base currency (e.g., BTC, ETH, SOL)"},"quote_currency":{"example":"USD","type":"string","description":"Filter by quote currency (e.g., USD, USDT, USDC)"},"status":{"default":"active","example":"active","type":"string","enum":["active","expired","delisted","suspended","all"],"description":"Filter by instrument status. Default 'active'. Pass 'all' to include all statuses."},"instrument_name":{"example":"BTC","type":"string","description":"Filter by instrument name (partial match, case-insensitive)"},"margin_type":{"example":"linear","type":"string","description":"Filter by margin type: linear or inverse"},"option_type":{"example":"call","type":"string","description":"Filter by option type: call or put"},"asset_class":{"example":"equity","type":"string","enum":["crypto","equity","commodity","forex","index"],"description":"Filter by asset class. Defaults to all classes. Use \"equity\"/\"commodity\"/\"forex\"/\"index\" to scope to non-crypto perps (NVDA/TSLA equity perps, GOLD/OIL commodity perps, EURUSD FX perps, etc.)."},"sub_exchange":{"example":"xyz","type":"string","description":"Filter by sub-venue. Used for Hyperliquid HIP-3 deployers: xyz, flx, km, cash, vntl, hyna. Empty string matches single-venue exchanges (binance/bybit/okx/kraken/etc.)."},"expiry_from":{"example":"2026-01-01T00:00:00Z","type":"string","description":"Filter instruments with expiry_date >= this value (ISO 8601 datetime)"},"expiry_to":{"example":"2026-12-31T23:59:59Z","type":"string","description":"Filter instruments with expiry_date <= this value (ISO 8601 datetime)"},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in next_cursor from the previous response."}}}}}}}},"/api/v1/instruments/detail":{"get":{"description":"Returns the full contract specification for a single instrument, including the raw exchange API data. Use this to get complete reference data for a specific instrument. Some exchanges (Binance, Bybit) list spot and perpetual instruments under the same name (e.g. BTCUSDT): pass market_type to select one, otherwise the derivative is returned in preference to spot.","operationId":"getInstrumentDetail","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name (e.g., deribit, binance, okx)","schema":{"example":"deribit","type":"string"}},{"name":"instrument_name","required":true,"in":"query","description":"Full instrument name (e.g., BTC-PERPETUAL, BTCUSDT, BTC-9OCT26-81000-P)","schema":{"example":"BTC-PERPETUAL","type":"string"}},{"name":"market_type","required":false,"in":"query","description":"Market type of the instrument. Binance and Bybit list spot and perpetual instruments under the same name (e.g., BTCUSDT); pass this to select one. When omitted, a derivative is preferred over spot.","schema":{"example":"perpetual","type":"string","enum":["spot","perpetual","future","option"]}}],"responses":{"200":{"description":"Full instrument metadata including raw exchange data","content":{"application/json":{"example":{"data":{"exchange":"deribit","instrument_name":"BTC-PERPETUAL","market_type":"perpetual","base_currency":"BTC","quote_currency":"USD","settlement_currency":"BTC","margin_type":"inverse","contract_multiplier":1,"contract_value":10,"contract_value_currency":"USD","tick_size":0.5,"lot_size":1,"min_order_size":1,"option_type":"","exercise_style":"","strike":null,"expiry_date":null,"contract_cycle":"","funding_interval_hours":8,"delivery_date":null,"underlying_index":"btc_usd","max_leverage":50,"price_precision":1,"quantity_precision":0,"sub_exchange":"","asset_class":"crypto","max_position_notional":null,"status":"active","listing_date":"2020-01-01T00:00:00.000Z","updated_at":"2026-04-02T12:00:00.000Z","created_at":"2020-01-01T00:00:00.000Z","raw_data":"{\"instrument_name\":\"BTC-PERPETUAL\",\"kind\":\"future\",...}"},"meta":{}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"404":{"description":"Not Found - Instrument not found","content":{"application/json":{"example":{"statusCode":404,"message":"No instrument found for NONEXISTENT on exchange deribit","error":"Not Found"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Instrument Detail","tags":["Instruments"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name (e.g., deribit, binance, okx)"},"instrument_name":{"example":"BTC-PERPETUAL","type":"string","description":"Full instrument name (e.g., BTC-PERPETUAL, BTCUSDT, BTC-9OCT26-81000-P)"},"market_type":{"example":"perpetual","type":"string","enum":["spot","perpetual","future","option"],"description":"Market type of the instrument. Binance and Bybit list spot and perpetual instruments under the same name (e.g., BTCUSDT); pass this to select one. When omitted, a derivative is preferred over spot."}},"required":["exchange","instrument_name"]}}}}}},"/api/v1/macro/catalog":{"get":{"description":"Discovery endpoint for non-crypto perpetuals: equity perps (NVDA, TSLA, MSTR, AAPL, …), commodity perps (GOLD, SILVER, OIL/CL, NATGAS, …), FX perps (EURUSD, GBPUSD, JPYUSD, …) and the small index segment. Returns full contract specs (tick_size, lot_size, max_leverage, funding_interval_hours, …).\n\nOnce you have an instrument_name + exchange, pull time-series data from the existing /api/v1/perpetuals/* endpoints — the routes are identical for crypto and macro perps:\n\n| Data | Route |\n|---|---|\n| OHLCVT candles (open/high/low/close/volume/trades) | `GET /api/v1/perpetuals/ohlcvt` |\n| Ticker history (mark/index/bid/ask/OI/spread) | `GET /api/v1/perpetuals/ticker-history` |\n| **Funding rate, basis, annualized carry** | `GET /api/v1/perpetuals/carry` |\n| Open interest history | `GET /api/v1/perpetuals/open-interest` |\n| Volume aggregates | `GET /api/v1/perpetuals/volume` |\n| L1 book (best bid/ask) | `GET /api/v1/perpetuals/level1` |\n| L2 orderbook (depth) | `GET /api/v1/perpetuals/orderbook` |\n| Liquidations | `GET /api/v1/perpetuals/liquidations` |\n| Snapshot (latest tick across all instruments) | `GET /api/v1/perpetuals/snapshot` |\n| Reference price | `GET /api/v1/perpetuals/reference-price` |\n| Individual trades (sparse on most macro venues) | `GET /api/v1/perpetuals/trades` |\n\nNote: funding rate lives on `/perpetuals/carry` (alongside basis and annualized carry — these three move together for perp analysis), not on a standalone `/funding` route. The MCP equivalent tool is `get_perpetuals_funding`.","operationId":"getMacroCatalog","parameters":[{"name":"asset_class","required":false,"in":"query","description":"Restrict to a single asset class. Defaults to all non-crypto (equity, commodity, forex, index).","schema":{"example":"equity","type":"string","enum":["equity","commodity","forex","index","crypto"]}},{"name":"market_type","required":false,"in":"query","description":"Restrict to one market_type. Defaults to perpetual (the dominant macro segment).","schema":{"default":"perpetual","example":"perpetual","type":"string","enum":["perpetual","future","spot"]}},{"name":"exchange","required":false,"in":"query","description":"Filter by exchange (binance, bybit, hyperliquid, kraken, okx, nado).","schema":{"example":"hyperliquid","type":"string"}},{"name":"sub_exchange","required":false,"in":"query","description":"Hyperliquid HIP-3 sub-venue: xyz, flx, km, cash, vntl, hyna. Empty string matches single-venue exchanges.","schema":{"example":"xyz","type":"string"}},{"name":"base_currency","required":false,"in":"query","description":"Filter by base currency / underlying ticker (NVDA, TSLA, GOLD, EUR, ...)","schema":{"example":"NVDA","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Partial, case-insensitive instrument-name match (e.g. \"NVDA\" finds xyz:NVDA-USD and PF_NVDAXUSD).","schema":{"example":"NVDA","type":"string"}},{"name":"status","required":false,"in":"query","description":"Instrument status. Default \"active\". Pass \"all\" to include expired/delisted/suspended.","schema":{"default":"active","type":"string","enum":["active","expired","delisted","suspended","all"]}},{"name":"limit","required":false,"in":"query","description":"Records per page (1-1000)","schema":{"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from a previous response.","schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated catalog of macro instruments"},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"Macro Catalog","tags":["Macro"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"asset_class":{"example":"equity","type":"string","enum":["equity","commodity","forex","index","crypto"],"description":"Restrict to a single asset class. Defaults to all non-crypto (equity, commodity, forex, index)."},"market_type":{"default":"perpetual","example":"perpetual","type":"string","enum":["perpetual","future","spot"],"description":"Restrict to one market_type. Defaults to perpetual (the dominant macro segment)."},"exchange":{"example":"hyperliquid","type":"string","description":"Filter by exchange (binance, bybit, hyperliquid, kraken, okx, nado)."},"sub_exchange":{"example":"xyz","type":"string","description":"Hyperliquid HIP-3 sub-venue: xyz, flx, km, cash, vntl, hyna. Empty string matches single-venue exchanges."},"base_currency":{"example":"NVDA","type":"string","description":"Filter by base currency / underlying ticker (NVDA, TSLA, GOLD, EUR, ...)"},"instrument_name":{"example":"NVDA","type":"string","description":"Partial, case-insensitive instrument-name match (e.g. \"NVDA\" finds xyz:NVDA-USD and PF_NVDAXUSD)."},"status":{"default":"active","type":"string","enum":["active","expired","delisted","suspended","all"],"description":"Instrument status. Default \"active\". Pass \"all\" to include expired/delisted/suspended."},"limit":{"default":100,"example":100,"type":"number","description":"Records per page (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor from a previous response."}}}}}}}},"/api/v1/macro/asset-classes":{"get":{"description":"Returns the four supported non-crypto asset classes (equity, commodity, forex, index) with active-instrument counts per market type and a few example tickers. Cheap dashboard endpoint.","operationId":"getMacroAssetClasses","parameters":[],"responses":{"200":{"description":"Asset class summary"},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"Macro Asset Classes","tags":["Macro"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/macro/venues":{"get":{"description":"Per-asset-class venue breakdown. Returns each (asset_class, exchange, sub_exchange, market_type) tuple with active instrument counts. Perpetuals and dated futures appear as separate rows so OKX/Bybit gold weeklies (market_type=future) don't get folded in with their perp counts. Filter by market_type to scope.","operationId":"getMacroVenues","parameters":[{"name":"asset_class","required":false,"in":"query","description":"Restrict to a single asset class. Defaults to all non-crypto.","schema":{"example":"equity","type":"string","enum":["equity","commodity","forex","index"]}},{"name":"market_type","required":false,"in":"query","description":"Restrict to a single market type. Omit to get a row per (exchange, sub_exchange, market_type) tuple.","schema":{"example":"perpetual","type":"string","enum":["perpetual","future","spot"]}}],"responses":{"200":{"description":"Venue breakdown"},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"Macro Venues","tags":["Macro"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"asset_class":{"example":"equity","type":"string","enum":["equity","commodity","forex","index"],"description":"Restrict to a single asset class. Defaults to all non-crypto."},"market_type":{"example":"perpetual","type":"string","enum":["perpetual","future","spot"],"description":"Restrict to a single market type. Omit to get a row per (exchange, sub_exchange, market_type) tuple."}}}}}}}},"/api/v1/macro/summary":{"get":{"description":"Top-N most-traded macro instruments per non-crypto asset class over the last 24h, ranked by USD volume. Returns last close, volume_24h_usd, and venue. Defaults to perpetual (the dominant macro segment). Pass market_type=future for dated commodity futures (OKX/Bybit gold weeklies, Bybit XAUT dateds). Use to surface \"what is hot in equity perps right now\" or \"biggest gold-future moves today\" without scanning the full catalog.","operationId":"getMacroSummary","parameters":[{"name":"asset_class","required":false,"in":"query","description":"Restrict to a single asset class. Defaults to all non-crypto.","schema":{"example":"equity","type":"string","enum":["equity","commodity","forex","index"]}},{"name":"market_type","required":false,"in":"query","description":"Market type to rank. Defaults to perpetual (the dominant macro segment). Use \"future\" for dated commodity futures (e.g. OKX gold weeklies, Bybit XAUT dateds).","schema":{"default":"perpetual","example":"perpetual","type":"string","enum":["perpetual","future"]}},{"name":"top","required":false,"in":"query","description":"Top-N per asset class (1-50).","schema":{"default":10,"example":10,"type":"number"}}],"responses":{"200":{"description":"Top-N per asset class"},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"Macro 24h Summary","tags":["Macro"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"asset_class":{"example":"equity","type":"string","enum":["equity","commodity","forex","index"],"description":"Restrict to a single asset class. Defaults to all non-crypto."},"market_type":{"default":"perpetual","example":"perpetual","type":"string","enum":["perpetual","future"],"description":"Market type to rank. Defaults to perpetual (the dominant macro segment). Use \"future\" for dated commodity futures (e.g. OKX gold weeklies, Bybit XAUT dateds)."},"top":{"default":10,"example":10,"type":"number","description":"Top-N per asset class (1-50)."}}}}}}}},"/api/v1/vol-surface/catalog":{"get":{"description":"Available fitted-surface exchange/currency/margin/model combinations and latest calibration metadata, not a historical instrument catalog.\n\nCalibration snapshot time, not the exchange event time of every quote, candle boundary, or first public availability. Current corrected history does not certify the surface a customer could originally have seen at that time.\n\nRetained calibration snapshots, without request-time candle resampling; no fixed completeness or publication-lag guarantee.\n\nOptional selectors and limit (default 100); no continuation cursor or earliest-coverage field. A tuple does not certify every expiry, strike or intermediate time.\n\nIVs are percentage points: 65 means 65%. Skew is put IV minus call IV at the named absolute delta; positive means puts are richer. Butterfly is (put IV + call IV) / 2 minus ATM IV, in the same percentage-point units.\n\ntau is ACT/365 years; expiry is UTC; index_price, forward and strike are USD prices. Inverse and linear margin books are distinct.\n\nFitted option expiries or strikes for the exact exchange/currency/margin selection, not a guarantee that every listed contract is represented. Use /vol-surface/catalog to discover available books and models.\n\nNo dedicated coverage lookup is declared for this product. Catalog dates or returned rows describe observed availability, not continuous completeness or an original trading-universe record.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: vol_surface.catalog. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Vol Surface Catalog","parameters":[{"name":"exchange","required":false,"in":"query","description":"Optional exchange filter.","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Optional base currency filter.","schema":{"example":"BTC","type":"string"}},{"name":"margin","required":false,"in":"query","description":"Optional margin filter.","schema":{"example":"inverse","type":"string","enum":["inverse","linear"]}},{"name":"model","required":false,"in":"query","description":"Optional model filter.","schema":{"example":"svi","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of surface tuples to return.","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"exchange":"deribit","currency":"BTC","margin":"inverse","model":"svi","date":"2026-06-08T12:00:00.000Z","index_price":104000.25,"n_slices":10,"n_forward_knots":7}],"meta":{"next_cursor":null}}}},"description":""},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"Vol Surface Catalog","tags":["Vol Surface"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Optional exchange filter."},"currency":{"example":"BTC","type":"string","description":"Optional base currency filter."},"margin":{"example":"inverse","type":"string","enum":["inverse","linear"],"description":"Optional margin filter."},"model":{"example":"svi","type":"string","description":"Optional model filter."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of surface tuples to return."}}}}}}}},"/api/v1/vol-surface/snapshots":{"get":{"description":"Fitted-surface calibration metadata: index price, expiry count, forward curve and calendar-arbitrage diagnostics. Not an option-chain snapshot or executable quotes. A calibration may cover only some expiries.\n\nCalibration snapshot time, not the exchange event time of every quote, candle boundary, or first public availability. Current corrected history does not certify the surface a customer could originally have seen at that time.\n\nRetained calibration snapshots, without request-time candle resampling; no fixed completeness or publication-lag guarantee.\n\nOmit start/end for the first snapshot page; date selects the latest calibration at or before the cutoff, which is not a first-availability guarantee. Slices, strikes and term structure support meta.next_cursor to retrieve the rest of the same snapshot in ascending row order, with unchanged filters and date; limit counts rows and may change between pages. Snapshot metadata is a single row. Snapshot cursors cannot be combined with start/end or latest=false. Explicit start/end or a history cursor select historical mode with inclusive bounds. In history, follow meta.next_cursor with unchanged selectors, bounds and sort direction. margin defaults to inverse; choose linear explicitly where appropriate. model defaults to svi.\n\nIVs are percentage points: 65 means 65%. Skew is put IV minus call IV at the named absolute delta; positive means puts are richer. Butterfly is (put IV + call IV) / 2 minus ATM IV, in the same percentage-point units.\n\ntau is ACT/365 years; expiry is UTC; index_price, forward and strike are USD prices. Inverse and linear margin books are distinct.\n\nFitted option expiries or strikes for the exact exchange/currency/margin selection, not a guarantee that every listed contract is represented. Use /vol-surface/catalog to discover available books and models.\n\nQuery /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selectors. Bounds do not certify every intermediate time or the completeness of every calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: vol_surface.snapshots. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Vol Surface Snapshots","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name. Examples: deribit, binance, okx, bybit, bullish, derive, paradex. Discover collected tuples through /vol-surface/catalog.","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":true,"in":"query","description":"Base currency.","schema":{"example":"BTC","type":"string"}},{"name":"margin","required":false,"in":"query","description":"Margin book. Use linear for Paradex (USD quotes, USDC settlement). Inverse and linear surfaces are distinct and must not be combined.","schema":{"default":"inverse","example":"inverse","type":"string","enum":["inverse","linear"]}},{"name":"date","required":false,"in":"query","description":"Snapshot cutoff time in ISO 8601 UTC. Snapshot mode returns the latest row at or before this timestamp.","schema":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string"}},{"name":"start","required":false,"in":"query","description":"Start time in ISO 8601 UTC. Providing start or end enables historical scan mode.","schema":{"format":"date-time","example":"2026-06-08T00:00:00Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End time in ISO 8601 UTC. Providing start or end enables historical scan mode.","schema":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum rows per page. Slices and term structure also paginate one fixed snapshot; follow meta.next_cursor with unchanged filters and date.","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from meta.next_cursor. A snapshot cursor continues the same calibration with unchanged filters and date, without start/end. A history cursor continues the historical selection.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction for historical scan mode.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"model","required":false,"in":"query","description":"Surface model. Defaults to 'svi'. Pass another model only when explicitly comparing model families.","schema":{"default":"svi","example":"svi","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"date":"2026-06-08T12:00:00.000Z","exchange":"deribit","currency":"BTC","margin":"inverse","model":"svi","index_price":104000.25,"n_slices":10,"n_forward_knots":7,"calendar_arb_pairs_checked":9,"calendar_arb_violating_pairs":0,"calendar_arb_in_range_violations":0,"calendar_arb_max_excess":0,"forward_curve":{"points":[{"tau":0.08,"forward":104250.1}]}}],"meta":{"next_cursor":null,"date":"2026-06-08T12:00:00.000Z"}}}},"description":""},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"Vol Surface Snapshots","tags":["Vol Surface"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name. Examples: deribit, binance, okx, bybit, bullish, derive, paradex. Discover collected tuples through /vol-surface/catalog."},"currency":{"example":"BTC","type":"string","description":"Base currency."},"margin":{"default":"inverse","example":"inverse","type":"string","enum":["inverse","linear"],"description":"Margin book. Use linear for Paradex (USD quotes, USDC settlement). Inverse and linear surfaces are distinct and must not be combined."},"date":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string","description":"Snapshot cutoff time in ISO 8601 UTC. Snapshot mode returns the latest row at or before this timestamp."},"start":{"format":"date-time","example":"2026-06-08T00:00:00Z","type":"string","description":"Start time in ISO 8601 UTC. Providing start or end enables historical scan mode."},"end":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string","description":"End time in ISO 8601 UTC. Providing start or end enables historical scan mode."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum rows per page. Slices and term structure also paginate one fixed snapshot; follow meta.next_cursor with unchanged filters and date."},"cursor":{"type":"string","description":"Pagination cursor from meta.next_cursor. A snapshot cursor continues the same calibration with unchanged filters and date, without start/end. A history cursor continues the historical selection."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction for historical scan mode."},"model":{"default":"svi","example":"svi","type":"string","description":"Surface model. Defaults to 'svi'. Pass another model only when explicitly comparing model families."}},"required":["exchange","currency"]}}}}}},"/api/v1/vol-surface/slices":{"get":{"description":"Per-expiry fitted mid-volatility smiles (SVI/SABR as selected), ATM/wing metrics and quote-quality diagnostics. Model IVs are distinct from exchange-reported mark IVs and the nearest-delta product /options/vol-surface. Read quality_tier, slice_source and fallback_age_seconds where supplied: a fallback can reuse an older fit under a newer calibration time. Missing numeric diagnostics may be represented as zero; zero alone is not evidence of a valid fit or zero risk. This definition does not certify historical corrections as originally published.\n\nCalibration snapshot time, not the exchange event time of every quote, candle boundary, or first public availability. Current corrected history does not certify the surface a customer could originally have seen at that time.\n\nRetained calibration snapshots, without request-time candle resampling; no fixed completeness or publication-lag guarantee.\n\nOmit start/end for the first snapshot page; date selects the latest calibration at or before the cutoff, which is not a first-availability guarantee. Slices, strikes and term structure support meta.next_cursor to retrieve the rest of the same snapshot in ascending row order, with unchanged filters and date; limit counts rows and may change between pages. Snapshot metadata is a single row. Snapshot cursors cannot be combined with start/end or latest=false. Explicit start/end or a history cursor select historical mode with inclusive bounds. In history, follow meta.next_cursor with unchanged selectors, bounds and sort direction. margin defaults to inverse; choose linear explicitly where appropriate. model defaults to svi. Optional expiry, quality_tier and slice_source filter rows of the selected calibration.\n\nIVs are percentage points: 65 means 65%. Skew is put IV minus call IV at the named absolute delta; positive means puts are richer. Butterfly is (put IV + call IV) / 2 minus ATM IV, in the same percentage-point units.\n\ntau is ACT/365 years; expiry is UTC; index_price, forward and strike are USD prices. Inverse and linear margin books are distinct.\n\nFitted option expiries or strikes for the exact exchange/currency/margin selection, not a guarantee that every listed contract is represented. Use /vol-surface/catalog to discover available books and models.\n\nQuery /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selectors. Bounds do not certify every intermediate time or the completeness of every calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: vol_surface.slices. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Vol Surface Slices","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name. Examples: deribit, binance, okx, bybit, bullish, derive, paradex. Discover collected tuples through /vol-surface/catalog.","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":true,"in":"query","description":"Base currency.","schema":{"example":"BTC","type":"string"}},{"name":"margin","required":false,"in":"query","description":"Margin book. Use linear for Paradex (USD quotes, USDC settlement). Inverse and linear surfaces are distinct and must not be combined.","schema":{"default":"inverse","example":"inverse","type":"string","enum":["inverse","linear"]}},{"name":"date","required":false,"in":"query","description":"Snapshot cutoff time in ISO 8601 UTC. Snapshot mode returns the latest row at or before this timestamp.","schema":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string"}},{"name":"start","required":false,"in":"query","description":"Start time in ISO 8601 UTC. Providing start or end enables historical scan mode.","schema":{"format":"date-time","example":"2026-06-08T00:00:00Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End time in ISO 8601 UTC. Providing start or end enables historical scan mode.","schema":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum rows per page. Slices and term structure also paginate one fixed snapshot; follow meta.next_cursor with unchanged filters and date.","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from meta.next_cursor. A snapshot cursor continues the same calibration with unchanged filters and date, without start/end. A history cursor continues the historical selection.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction for historical scan mode.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"model","required":false,"in":"query","description":"Surface model. Defaults to 'svi'. Pass another model only when explicitly comparing model families.","schema":{"default":"svi","example":"svi","type":"string"}},{"name":"expiry","required":false,"in":"query","description":"Expiry filter in ISO 8601 UTC. If omitted in snapshot mode, follow meta.next_cursor to retrieve all expiries of the selected snapshot.","schema":{"format":"date-time","example":"2026-06-26T08:00:00Z","type":"string"}},{"name":"quality_tier","required":false,"in":"query","description":"Filter by engine trust label: trusted, indicative, or untrusted.","schema":{"example":"trusted","type":"string","enum":["trusted","indicative","untrusted"]}},{"name":"slice_source","required":false,"in":"query","description":"Filter by slice source: fitted or fallback.","schema":{"example":"fitted","type":"string","enum":["fitted","fallback"]}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"date":"2026-06-08T12:00:00.000Z","exchange":"deribit","currency":"BTC","margin":"inverse","model":"svi","expiry":"2026-06-26T08:00:00.000Z","tau":0.0465,"forward":104250.1,"atm_iv":48.2,"skew_25d":3.1,"butterfly_25d":1.4,"put_25d_iv":50.1,"call_25d_iv":47,"rmse":0.42,"n_strikes":64,"n_two_sided":55,"n_one_sided":9,"n_mark_only":0,"quality_tier":"trusted","slice_source":"fitted","fallback_age_seconds":0,"model_params":{"a":0.01,"b":0.2,"rho":-0.4,"m":0,"sigma":0.3}}],"meta":{"next_cursor":null,"date":"2026-06-08T12:00:00.000Z"}}}},"description":""},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"Vol Surface Slices","tags":["Vol Surface"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name. Examples: deribit, binance, okx, bybit, bullish, derive, paradex. Discover collected tuples through /vol-surface/catalog."},"currency":{"example":"BTC","type":"string","description":"Base currency."},"margin":{"default":"inverse","example":"inverse","type":"string","enum":["inverse","linear"],"description":"Margin book. Use linear for Paradex (USD quotes, USDC settlement). Inverse and linear surfaces are distinct and must not be combined."},"date":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string","description":"Snapshot cutoff time in ISO 8601 UTC. Snapshot mode returns the latest row at or before this timestamp."},"start":{"format":"date-time","example":"2026-06-08T00:00:00Z","type":"string","description":"Start time in ISO 8601 UTC. Providing start or end enables historical scan mode."},"end":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string","description":"End time in ISO 8601 UTC. Providing start or end enables historical scan mode."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum rows per page. Slices and term structure also paginate one fixed snapshot; follow meta.next_cursor with unchanged filters and date."},"cursor":{"type":"string","description":"Pagination cursor from meta.next_cursor. A snapshot cursor continues the same calibration with unchanged filters and date, without start/end. A history cursor continues the historical selection."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction for historical scan mode."},"model":{"default":"svi","example":"svi","type":"string","description":"Surface model. Defaults to 'svi'. Pass another model only when explicitly comparing model families."},"expiry":{"format":"date-time","example":"2026-06-26T08:00:00Z","type":"string","description":"Expiry filter in ISO 8601 UTC. If omitted in snapshot mode, follow meta.next_cursor to retrieve all expiries of the selected snapshot."},"quality_tier":{"example":"trusted","type":"string","enum":["trusted","indicative","untrusted"],"description":"Filter by engine trust label: trusted, indicative, or untrusted."},"slice_source":{"example":"fitted","type":"string","enum":["fitted","fallback"],"description":"Filter by slice source: fitted or fallback."}},"required":["exchange","currency"]}}}}}},"/api/v1/vol-surface/term-structure":{"get":{"description":"Constant-maturity analytics from fitted smiles, interpolating total variance and solving wings on the resulting smile. source distinguishes fitted_expiry, interpolated and single_pillar_extrapolation; interpolated can also include extrapolation outside the listed expiry range. This is not /options/vol-surface/by-tenor. Zero forward_vol can mean no following tenor (empty forward_tenor) or a non-positive forward variance; it is not always a measured zero-volatility forecast.\n\nCalibration snapshot time, not the exchange event time of every quote, candle boundary, or first public availability. Current corrected history does not certify the surface a customer could originally have seen at that time.\n\nRetained calibration snapshots, without request-time candle resampling; no fixed completeness or publication-lag guarantee.\n\nOmit start/end for the first snapshot page; date selects the latest calibration at or before the cutoff, which is not a first-availability guarantee. Slices, strikes and term structure support meta.next_cursor to retrieve the rest of the same snapshot in ascending row order, with unchanged filters and date; limit counts rows and may change between pages. Snapshot metadata is a single row. Snapshot cursors cannot be combined with start/end or latest=false. Explicit start/end or a history cursor select historical mode with inclusive bounds. In history, follow meta.next_cursor with unchanged selectors, bounds and sort direction. margin defaults to inverse; choose linear explicitly where appropriate. tenor_days optionally selects a tenor. No model selector is exposed on this route.\n\nIVs are percentage points: 65 means 65%. Skew is put IV minus call IV at the named absolute delta; positive means puts are richer. Butterfly is (put IV + call IV) / 2 minus ATM IV, in the same percentage-point units.\n\ntau is ACT/365 years; expiry is UTC; index_price, forward and strike are USD prices. Inverse and linear margin books are distinct.\n\ntotal_variance = (atm_iv / 100)² × tenor_days / 365; it is dimensionless variance, not percent. term_slope is IV percentage points per year between adjacent tenors; forward_vol is annualized IV in percentage points over forward_tenor.\n\nFitted option expiries or strikes for the exact exchange/currency/margin selection, not a guarantee that every listed contract is represented. Use /vol-surface/catalog to discover available books and models.\n\nQuery /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selectors. Bounds do not certify every intermediate time or the completeness of every calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: vol_surface.term_structure. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Vol Surface Term Structure","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name. Examples: deribit, binance, okx, bybit, bullish, derive, paradex. Discover collected tuples through /vol-surface/catalog.","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":true,"in":"query","description":"Base currency.","schema":{"example":"BTC","type":"string"}},{"name":"margin","required":false,"in":"query","description":"Margin book. Use linear for Paradex (USD quotes, USDC settlement). Inverse and linear surfaces are distinct and must not be combined.","schema":{"default":"inverse","example":"inverse","type":"string","enum":["inverse","linear"]}},{"name":"date","required":false,"in":"query","description":"Snapshot cutoff time in ISO 8601 UTC. Snapshot mode returns the latest row at or before this timestamp.","schema":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string"}},{"name":"start","required":false,"in":"query","description":"Start time in ISO 8601 UTC. Providing start or end enables historical scan mode.","schema":{"format":"date-time","example":"2026-06-08T00:00:00Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End time in ISO 8601 UTC. Providing start or end enables historical scan mode.","schema":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum rows per page. Slices and term structure also paginate one fixed snapshot; follow meta.next_cursor with unchanged filters and date.","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from meta.next_cursor. A snapshot cursor continues the same calibration with unchanged filters and date, without start/end. A history cursor continues the historical selection.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction for historical scan mode.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"tenor_days","required":false,"in":"query","description":"Constant-maturity tenor in days.","schema":{"minimum":1,"example":30,"type":"number"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"date":"2026-06-08T12:00:00.000Z","exchange":"deribit","currency":"BTC","margin":"inverse","tenor_days":30,"atm_iv":49.1,"total_variance":0.0198,"skew_25d":3.4,"butterfly_25d":1.5,"forward":104500.2,"term_slope":0.7,"forward_vol":50.3,"forward_tenor":"30d-60d","source":"interpolated"}],"meta":{"next_cursor":null,"date":"2026-06-08T12:00:00.000Z"}}}},"description":""},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"Vol Surface Term Structure","tags":["Vol Surface"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name. Examples: deribit, binance, okx, bybit, bullish, derive, paradex. Discover collected tuples through /vol-surface/catalog."},"currency":{"example":"BTC","type":"string","description":"Base currency."},"margin":{"default":"inverse","example":"inverse","type":"string","enum":["inverse","linear"],"description":"Margin book. Use linear for Paradex (USD quotes, USDC settlement). Inverse and linear surfaces are distinct and must not be combined."},"date":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string","description":"Snapshot cutoff time in ISO 8601 UTC. Snapshot mode returns the latest row at or before this timestamp."},"start":{"format":"date-time","example":"2026-06-08T00:00:00Z","type":"string","description":"Start time in ISO 8601 UTC. Providing start or end enables historical scan mode."},"end":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string","description":"End time in ISO 8601 UTC. Providing start or end enables historical scan mode."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum rows per page. Slices and term structure also paginate one fixed snapshot; follow meta.next_cursor with unchanged filters and date."},"cursor":{"type":"string","description":"Pagination cursor from meta.next_cursor. A snapshot cursor continues the same calibration with unchanged filters and date, without start/end. A history cursor continues the historical selection."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction for historical scan mode."},"tenor_days":{"minimum":1,"example":30,"type":"number","description":"Constant-maturity tenor in days."}},"required":["exchange","currency"]}}}}}},"/api/v1/vol-surface/strikes":{"get":{"description":"Per-instrument fitted versus market IV diagnostics and unit-option Greeks, not signed trade or portfolio exposure. Read quality_tier, slice_source and fallback_age_seconds where supplied: a fallback can reuse an older fit under a newer calibration time. Missing numeric diagnostics may be represented as zero; zero alone is not evidence of a valid fit or zero risk. This definition does not certify historical corrections as originally published.\n\nCalibration snapshot time, not the exchange event time of every quote, candle boundary, or first public availability. Current corrected history does not certify the surface a customer could originally have seen at that time.\n\nRetained calibration snapshots, without request-time candle resampling; no fixed completeness or publication-lag guarantee.\n\nOmit start/end for the first snapshot page; date selects the latest calibration at or before the cutoff, which is not a first-availability guarantee. Slices, strikes and term structure support meta.next_cursor to retrieve the rest of the same snapshot in ascending row order, with unchanged filters and date; limit counts rows and may change between pages. Snapshot metadata is a single row. Snapshot cursors cannot be combined with start/end or latest=false. Explicit start/end or a history cursor select historical mode with inclusive bounds. In history, follow meta.next_cursor with unchanged selectors, bounds and sort direction. margin defaults to inverse; choose linear explicitly where appropriate. Historical scans require expiry or instrument. latest=false explicitly selects a scan; supply time bounds and an instrument or expiry. No model selector is exposed.\n\nIVs are percentage points: 65 means 65%. Skew is put IV minus call IV at the named absolute delta; positive means puts are richer. Butterfly is (put IV + call IV) / 2 minus ATM IV, in the same percentage-point units.\n\ntau is ACT/365 years; expiry is UTC; index_price, forward and strike are USD prices. Inverse and linear margin books are distinct.\n\nbs_delta/smile_delta/mv_delta are unit-option deltas; bs_gamma/smile_gamma are per 1 USD underlying move; bs_vega is USD per volatility percentage point; bs_theta is USD per calendar day. Multiply unit Greeks by the appropriate signed underlying exposure for a position; do not apply the trade-flow convention to these fields.\n\nFitted option expiries or strikes for the exact exchange/currency/margin selection, not a guarantee that every listed contract is represented. Use /vol-surface/catalog to discover available books and models.\n\nQuery /api/v1/changelog/data-coverage with this coverage_endpoint_id and the exact selectors. Bounds do not certify every intermediate time or the completeness of every calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: vol_surface.strikes. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Vol Surface Strikes","parameters":[{"name":"exchange","required":true,"in":"query","description":"Exchange name. Examples: deribit, binance, okx, bybit, bullish, derive, paradex. Discover collected tuples through /vol-surface/catalog.","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":true,"in":"query","description":"Base currency.","schema":{"example":"BTC","type":"string"}},{"name":"margin","required":false,"in":"query","description":"Margin book. Use linear for Paradex (USD quotes, USDC settlement). Inverse and linear surfaces are distinct and must not be combined.","schema":{"default":"inverse","example":"inverse","type":"string","enum":["inverse","linear"]}},{"name":"date","required":false,"in":"query","description":"Snapshot cutoff time in ISO 8601 UTC. Snapshot mode returns strikes at the latest fit at or before this timestamp.","schema":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string"}},{"name":"start","required":false,"in":"query","description":"Start time in ISO 8601 UTC. Historical strike scans require expiry or instrument.","schema":{"format":"date-time","example":"2026-06-08T00:00:00Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End time in ISO 8601 UTC. Historical strike scans require expiry or instrument.","schema":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string"}},{"name":"expiry","required":false,"in":"query","description":"Expiry filter in ISO 8601 UTC.","schema":{"format":"date-time","example":"2026-06-26T08:00:00Z","type":"string"}},{"name":"instrument","required":false,"in":"query","description":"Option instrument identifier.","schema":{"example":"BTC-26JUN26-100000-C","type":"string"}},{"name":"strike","required":false,"in":"query","description":"Strike filter.","schema":{"example":100000,"type":"number"}},{"name":"option_type","required":false,"in":"query","description":"Option type filter.","schema":{"example":"C","type":"string","enum":["C","P"]}},{"name":"limit","required":false,"in":"query","description":"Maximum number of rows to return.","schema":{"minimum":1,"maximum":5000,"default":500,"example":500,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from meta.next_cursor. Snapshot continuation stays at the same calibration; keep filters and date unchanged and omit start/end.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction for historical scan mode.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"latest","required":false,"in":"query","description":"Whether snapshot mode should return only rows from the latest fit. Defaults to true.","schema":{"default":true,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"example":{"data":[{"date":"2026-06-08T12:00:00.000Z","exchange":"deribit","currency":"BTC","margin":"inverse","expiry":"2026-06-26T08:00:00.000Z","instrument":"BTC-26JUN26-100000-C","strike":100000,"option_type":"C","log_moneyness":-0.0416,"bid_iv":47.5,"ask_iv":48.2,"mark_iv":47.9,"model_iv":48,"deviation_vol":-0.1,"bs_delta":0.55,"bs_gamma":0.00004,"bs_vega":155.2,"bs_theta":-120.4,"smile_delta":0.53,"mv_delta":0.52}],"meta":{"next_cursor":null,"date":"2026-06-08T12:00:00.000Z"}}}},"description":""},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"Vol Surface Strikes","tags":["Vol Surface"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"example":"deribit","type":"string","description":"Exchange name. Examples: deribit, binance, okx, bybit, bullish, derive, paradex. Discover collected tuples through /vol-surface/catalog."},"currency":{"example":"BTC","type":"string","description":"Base currency."},"margin":{"default":"inverse","example":"inverse","type":"string","enum":["inverse","linear"],"description":"Margin book. Use linear for Paradex (USD quotes, USDC settlement). Inverse and linear surfaces are distinct and must not be combined."},"date":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string","description":"Snapshot cutoff time in ISO 8601 UTC. Snapshot mode returns strikes at the latest fit at or before this timestamp."},"start":{"format":"date-time","example":"2026-06-08T00:00:00Z","type":"string","description":"Start time in ISO 8601 UTC. Historical strike scans require expiry or instrument."},"end":{"format":"date-time","example":"2026-06-08T12:00:00Z","type":"string","description":"End time in ISO 8601 UTC. Historical strike scans require expiry or instrument."},"expiry":{"format":"date-time","example":"2026-06-26T08:00:00Z","type":"string","description":"Expiry filter in ISO 8601 UTC."},"instrument":{"example":"BTC-26JUN26-100000-C","type":"string","description":"Option instrument identifier."},"strike":{"example":100000,"type":"number","description":"Strike filter."},"option_type":{"example":"C","type":"string","enum":["C","P"],"description":"Option type filter."},"limit":{"minimum":1,"maximum":5000,"default":500,"example":500,"type":"number","description":"Maximum number of rows to return."},"cursor":{"type":"string","description":"Pagination cursor from meta.next_cursor. Snapshot continuation stays at the same calibration; keep filters and date unchanged and omit start/end."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction for historical scan mode."},"latest":{"default":true,"type":"boolean","description":"Whether snapshot mode should return only rows from the latest fit. Defaults to true."}},"required":["exchange","currency"]}}}}}},"/api/v1/vol-surface/risk/decompose":{"post":{"description":"Current portfolio valuation, unrealized PnL and risk decomposition by position and tenor. Level/skew/curvature vega are allocations of total vega, not independent derivatives with respect to scenario parameters.\n\nOn-demand calculation using currently available surfaces and caller-supplied positions. Not a historical risk snapshot or a replay of the surface available at an earlier decision time.\n\nOne calculation per POST request; no historical resolution or cursor.\n\nPOST a portfolio of up to 500 positions. Results depend on the current surface and may change between requests. Inspect returned warnings, slice_quality_tier and quantity_status; a successful calculation is not a quote or a guarantee of execution. Options without entry_price use entry 0 for unrealized PnL; delta-one positions default entry to their supplied mark. This differs from scenario PnL, which compares current and shocked values.\n\nUnits: spot shifts are percent (-20 means -20%). Vol shifts are vol points, exact at ATM. skew_shift is added to the smile correlation parameter (rho) and curvature_shift to the smile curvature parameter (sigma for SVI, nu for SABR); neither is in vol points. time_decay_days is calendar days. Option quantity is a signed contract count, scaled by the contract multiplier into underlying units; perpetual, future and spot quantity is a base-coin amount. Outputs: *_usd in USD; *_coin in coin for inverse positions, 0 otherwise; delta in underlying units; gamma per 1 USD spot move; vega and vanna per vol point; theta and charm per calendar day; volga per vol point squared; IV fields in percent. level_vega, skew_vega and curvature_vega split total_vega by bump size and are not sensitivities to the shock fields. Scenario and ladder PnL is measured from the current value, not from entry_price. For options and linear perpetual, future and spot positions pnl_usd is shocked_value_usd minus base_value_usd; for inverse perpetuals and futures PnL is computed in coin (base coin value minus shocked coin value) and pnl_usd converts it at the shocked price, so it is not shocked_value_usd minus base_value_usd. pnl_pct and pnl_pct_matrix are fractions of base_value_usd (-0.58 means -58%).\n\npnl_pct = pnl_usd / abs(base_value_usd), a signed fraction; zero base value leaves pnl_pct at zero, not a defined investment return.\n\nOnly caller-supplied positions; not a holdings feed or complete exchange instrument universe.\n\nNot a historical dataset; there is no earliest retained date or coverage lookup for an on-demand portfolio calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: vol_surface.risk_decompose. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Vol Surface Risk Decompose","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolSurfaceRiskDecomposeRequestDto"},"examples":{"default":{"value":{"exchange":"deribit","currency":"BTC","positions":[{"instrument":"BTC-31JUL26-62000-C","kind":"option","exchange":"deribit","currency":"BTC","margin":"inverse","strike":62000,"expiry":"2026-07-31T08:00:00Z","option_type":"C","quantity":1}]}}}}}},"responses":{"200":{"content":{"application/json":{"example":{"exchange":"deribit","currency":"BTC","margin":"inverse","position_count":1,"mark_value_usd":4048.0574817095476,"mark_value_coin":0.06562415469101558,"gross_value_usd":4048.0574817095476,"market_value_usd":4055.7195304898014,"model_edge_value_usd":-7.662048780253826,"total_mark_pnl_usd":4048.0574817095476,"total_funding_pnl_usd":0,"total_pnl_usd":4048.0574817095476,"total_delta":0.5298747339971175,"total_gamma":0.000038802800723917366,"total_theta":-39.54853334689837,"total_vega":92.5870843232772,"total_rho":34.91393048941768,"total_vanna":0.0008183791577023126,"total_volga":-0.014276290645167958,"total_charm":-0.0003495703061108222,"level_vega":10.904900106306162,"skew_vega":49.27619330071987,"curvature_vega":32.40599091625117,"total_smile_gamma":0.000042352439219740666,"total_smile_vanna":0.0008096251247532112,"total_pa_delta":0.4642505793061019,"total_pa_gamma":0.00003127670901957946,"total_pa_vega":0.0015009542654653445,"total_pa_theta":-0.0006411319705528492,"total_pa_vanna":-0.0006825751077630318,"buckets":[{"tenor_label":"60d","tenor_days":60,"total_vega":92.5870843232772,"level_vega":10.904900106306162,"skew_vega":49.27619330071987,"curvature_vega":32.40599091625117,"net_delta":0.5298747339971175,"net_gamma":0.000038802800723917366,"net_theta":-39.54853334689837,"positions":1}],"positions":[{"instrument":"BTC-31JUL26-62000-C","kind":"option","exchange":"deribit","currency":"BTC","margin":"inverse","strike":62000,"expiry":"2026-07-31T08:00:00Z","option_type":"C","quantity":1,"spot":61685.479999999996,"forward":61919.63800499999,"atm_iv":44.101471505515754,"model_iv":44.05210602686287,"market_iv":44.134861605065296,"model_price_usd":4048.0574817095476,"market_price_usd":4055.7195304898014,"model_edge_usd":-7.662048780253826,"delta":0.5298747339971175,"gamma":0.000038802800723917366,"theta":-39.54853334689837,"vega":92.5870843232772,"rho":34.91393048941768,"pa_delta":0.4642505793061019,"smile_delta":0.5866479117764257,"level_vega":10.904900106306162,"skew_vega":49.27619330071987,"curvature_vega":32.40599091625117,"bid_iv":43.80047281798966,"ask_iv":44.46925039214093,"deviation_vol":0.08275557820242341,"slice_source":"fitted","slice_quality_tier":"trusted","bucket_label":"60d","bucket_days":60}],"unrealized_pnl_usd":4048.0574817095476,"premium_pnl_usd":4048.0574817095476,"model":"svi"}}},"description":""},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""},"502":{"description":"Bad Gateway - risk engine returned an unexpected error"},"503":{"description":"Service Unavailable - risk engine has no cached surface or is temporarily unavailable"},"504":{"description":"Gateway Timeout - risk request timed out"}},"security":[{"X-API-Key":[]}],"summary":"Vol Surface Risk Decompose","tags":["Vol Surface"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/vol-surface/risk/scenario":{"post":{"description":"Hypothetical repricing under spot, volatility, skew, curvature and calendar-time shocks. Scenario PnL compares shocked and current values, not historical or entry-price PnL; it is not a price forecast.\n\nOn-demand calculation using currently available surfaces and caller-supplied positions. Not a historical risk snapshot or a replay of the surface available at an earlier decision time.\n\nOne calculation per POST request; no historical resolution or cursor.\n\nPOST a portfolio of up to 500 positions. Results depend on the current surface and may change between requests. Inspect returned warnings, slice_quality_tier and quantity_status; a successful calculation is not a quote or a guarantee of execution. Options without entry_price use entry 0 for unrealized PnL; delta-one positions default entry to their supplied mark. This differs from scenario PnL, which compares current and shocked values.\n\nUnits: spot shifts are percent (-20 means -20%). Vol shifts are vol points, exact at ATM. skew_shift is added to the smile correlation parameter (rho) and curvature_shift to the smile curvature parameter (sigma for SVI, nu for SABR); neither is in vol points. time_decay_days is calendar days. Option quantity is a signed contract count, scaled by the contract multiplier into underlying units; perpetual, future and spot quantity is a base-coin amount. Outputs: *_usd in USD; *_coin in coin for inverse positions, 0 otherwise; delta in underlying units; gamma per 1 USD spot move; vega and vanna per vol point; theta and charm per calendar day; volga per vol point squared; IV fields in percent. level_vega, skew_vega and curvature_vega split total_vega by bump size and are not sensitivities to the shock fields. Scenario and ladder PnL is measured from the current value, not from entry_price. For options and linear perpetual, future and spot positions pnl_usd is shocked_value_usd minus base_value_usd; for inverse perpetuals and futures PnL is computed in coin (base coin value minus shocked coin value) and pnl_usd converts it at the shocked price, so it is not shocked_value_usd minus base_value_usd. pnl_pct and pnl_pct_matrix are fractions of base_value_usd (-0.58 means -58%).\n\npnl_pct = pnl_usd / abs(base_value_usd), a signed fraction; zero base value leaves pnl_pct at zero, not a defined investment return.\n\nOnly caller-supplied positions; not a holdings feed or complete exchange instrument universe.\n\nNot a historical dataset; there is no earliest retained date or coverage lookup for an on-demand portfolio calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: vol_surface.risk_scenario. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Vol Surface Risk Scenario","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolSurfaceRiskScenarioRequestDto"},"examples":{"default":{"value":{"exchange":"deribit","currency":"BTC","positions":[{"instrument":"BTC-31JUL26-62000-C","kind":"option","exchange":"deribit","currency":"BTC","margin":"inverse","strike":62000,"expiry":"2026-07-31T08:00:00Z","option_type":"C","quantity":1}],"shock":{"name":"Spot down 10 vol up 5","spot_shift_pct":-10,"level_shift_vol":5,"skew_shift":0,"curvature_shift":0,"time_decay_days":0}}}}}}},"responses":{"200":{"content":{"application/json":{"example":{"shock":{"name":"Spot down 10 vol up 5","spot_shift_pct":-10,"level_shift_vol":5,"skew_shift":0,"curvature_shift":0,"time_decay_days":0},"exchange":"deribit","currency":"BTC","margin":"inverse","position_count":1,"base_value_usd":4048.0574817095476,"base_value_coin":0.06562415469101558,"shocked_value_usd":1689.5573821337857,"shocked_value_coin":0.030433190763023175,"pnl_usd":-2358.500099575762,"pnl_coin":-0.03519096392799241,"pnl_pct":-0.5826251505153371,"total_delta":0.29974008937747426,"total_gamma":0.000035800752388230626,"total_theta":-32.716834317584535,"total_driftless_theta":-32.716834317584535,"total_vega":72.79941739023384,"total_rho":18.824410639288853,"total_vanna":0.005244352743597323,"total_volga":0.576868209820335,"total_charm":-0.00235686803502168,"total_smile_delta":0.32063045230615406,"total_smile_gamma":0.0000434216818884387,"total_smile_vanna":0.005409889593989498,"total_shocked_atm_iv":49.10147150551577,"total_pa_delta":0.26930689861445106,"total_pa_gamma":0.00003094985575340846,"total_pa_vega":0.0013113011610626077,"total_pa_theta":-0.0005893127220644061,"total_pa_vanna":0.003933051582534716,"positions":[{"instrument":"BTC-31JUL26-62000-C","quantity":1,"contract_multiplier":1,"effective_quantity":1,"quantity_status":"metadata","slice_quality_tier":"trusted","base_price_usd":4048.0574817095476,"shocked_price_usd":1689.5573821337857,"shocked_atm_iv":49.10147150551577,"pnl_usd":-2358.500099575762,"delta":0.29974008937747426,"gamma":0.000035800752388230626,"theta":-32.716834317584535,"vega":72.79941739023384,"rho":18.824410639288853,"pa_delta":0.26930689861445106,"smile_delta":0.32063045230615406}]}}},"description":""},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""},"502":{"description":"Bad Gateway - risk engine returned an unexpected error"},"503":{"description":"Service Unavailable - risk engine has no cached surface or is temporarily unavailable"},"504":{"description":"Gateway Timeout - risk request timed out"}},"security":[{"X-API-Key":[]}],"summary":"Vol Surface Risk Scenario","tags":["Vol Surface"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/vol-surface/risk/ladder":{"post":{"description":"Scenario repricing over a spot-by-parallel-volatility grid (maximum 400 cells). Matrix PnL uses the scenario conventions, not percent-valued returns or entry-price performance.\n\nOn-demand calculation using currently available surfaces and caller-supplied positions. Not a historical risk snapshot or a replay of the surface available at an earlier decision time.\n\nOne calculation per POST request; no historical resolution or cursor.\n\nPOST a portfolio of up to 500 positions. Results depend on the current surface and may change between requests. Inspect returned warnings, slice_quality_tier and quantity_status; a successful calculation is not a quote or a guarantee of execution. Options without entry_price use entry 0 for unrealized PnL; delta-one positions default entry to their supplied mark. This differs from scenario PnL, which compares current and shocked values.\n\nUnits: spot shifts are percent (-20 means -20%). Vol shifts are vol points, exact at ATM. skew_shift is added to the smile correlation parameter (rho) and curvature_shift to the smile curvature parameter (sigma for SVI, nu for SABR); neither is in vol points. time_decay_days is calendar days. Option quantity is a signed contract count, scaled by the contract multiplier into underlying units; perpetual, future and spot quantity is a base-coin amount. Outputs: *_usd in USD; *_coin in coin for inverse positions, 0 otherwise; delta in underlying units; gamma per 1 USD spot move; vega and vanna per vol point; theta and charm per calendar day; volga per vol point squared; IV fields in percent. level_vega, skew_vega and curvature_vega split total_vega by bump size and are not sensitivities to the shock fields. Scenario and ladder PnL is measured from the current value, not from entry_price. For options and linear perpetual, future and spot positions pnl_usd is shocked_value_usd minus base_value_usd; for inverse perpetuals and futures PnL is computed in coin (base coin value minus shocked coin value) and pnl_usd converts it at the shocked price, so it is not shocked_value_usd minus base_value_usd. pnl_pct and pnl_pct_matrix are fractions of base_value_usd (-0.58 means -58%).\n\npnl_pct = pnl_usd / abs(base_value_usd), a signed fraction; zero base value leaves pnl_pct at zero, not a defined investment return.\n\nOnly caller-supplied positions; not a holdings feed or complete exchange instrument universe.\n\nNot a historical dataset; there is no earliest retained date or coverage lookup for an on-demand portfolio calculation.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: vol_surface.risk_ladder. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"Vol Surface Risk Ladder","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VolSurfaceRiskLadderRequestDto"},"examples":{"default":{"value":{"exchange":"deribit","currency":"BTC","positions":[{"instrument":"BTC-31JUL26-62000-C","kind":"option","exchange":"deribit","currency":"BTC","margin":"inverse","strike":62000,"expiry":"2026-07-31T08:00:00Z","option_type":"C","quantity":1}],"spot_shifts_pct":[-10,0,10],"vol_shifts":[-5,0,5],"skew_shift":0,"curvature_shift":0,"time_decay_days":0}}}}}},"responses":{"200":{"content":{"application/json":{"example":{"exchange":"deribit","currency":"BTC","margin":"inverse","position_count":1,"spot_shifts_pct":[-10,0,10],"vol_shifts":[-5,0,5],"skew_shift":0,"curvature_shift":0,"time_decay_days":0,"cells":[{"spot_shift_pct":-10,"vol_shift":-5,"pnl_usd":-3100.130704472309,"pnl_coin":-0.04854960206196831,"pnl_pct":-0.7658316905033382,"total_delta":0.23250553927858042,"total_gamma":0.00004098821038404953,"total_theta":-22.077273192877684,"total_vega":63.987977535804085,"total_shocked_atm_iv":39.10147150551575,"slice_quality_tier":"trusted"},{"spot_shift_pct":0,"vol_shift":0,"pnl_usd":0,"pnl_coin":0,"pnl_pct":0,"total_delta":0.5298747339971175,"total_gamma":0.000038802800723917366,"total_theta":-39.54853334689837,"total_vega":92.5870843232772,"total_shocked_atm_iv":44.101471505515754,"slice_quality_tier":"trusted"},{"spot_shift_pct":10,"vol_shift":5,"pnl_usd":4716.611382299721,"pnl_coin":0.06354531574940202,"pnl_pct":1.1651542508007655,"total_delta":0.7165886093416941,"total_gamma":0.00002503491483006675,"total_theta":-44.40447141428705,"total_vega":86.68276911566157,"total_shocked_atm_iv":49.10147150551577,"slice_quality_tier":"trusted"}],"pnl_usd_matrix":[[-3100.130704472309,-2737.6842249998426,-2358.500099575762],[-463.6925637164677,0,463.21552979895205],[3942.1427372296457,4320.936753402966,4716.611382299721]],"pnl_coin_matrix":[[-0.04854960206196831,-0.04202102660912329,-0.03519096392799241],[-0.0075170455626910535,0,0.007509312236833557],[0.05213156968453943,0.057714053544942245,0.06354531574940202]],"pnl_pct_matrix":[[-0.7658316905033382,-0.6762957881328511,-0.5826251505153371],[-0.11454693166082322,0,0.11442908898698001],[0.9738356619295898,1.0674099300532112,1.1651542508007655]]}}},"description":""},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""},"502":{"description":"Bad Gateway - risk engine returned an unexpected error"},"503":{"description":"Service Unavailable - risk engine has no cached surface or is temporarily unavailable"},"504":{"description":"Gateway Timeout - risk request timed out"}},"security":[{"X-API-Key":[]}],"summary":"Vol Surface Risk Ladder","tags":["Vol Surface"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/hyperliquid/node/fills":{"get":{"description":"Returns enriched per-fill Hyperliquid L1 HyperCore data with wallet attribution, fees, closed PnL, position direction, builder/deployer fees, and liquidation flags. Requires wallet. Covers perps, HIP-3 perps, and spot fills.\n\nRequired query parameter: wallet.","operationId":"HyperCore Fills","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by event time. Defaults to DESC for node history endpoints.","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"instrument_name","required":false,"in":"query","description":"Normalized instrument name (e.g. BTC-USD, xyz:NVDA-USD, BASED_USDC).","schema":{"example":"BTC-USD","type":"string"}},{"name":"instrument_name_raw","required":false,"in":"query","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40).","schema":{"example":"BTC","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g. BTC, NVDA, BASED).","schema":{"example":"BTC","type":"string"}},{"name":"market_type","required":false,"in":"query","description":"Hyperliquid node market type.","schema":{"example":"perp","type":"string","enum":["perp","perp_hip3","spot","prediction"]}},{"name":"wallet","required":true,"in":"query","description":"Wallet address. Required for raw Hyperliquid node fills.","schema":{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string"}},{"name":"side","required":false,"in":"query","description":"Aggressor side.","schema":{"type":"string","enum":["buy","sell"]}},{"name":"dir","required":false,"in":"query","description":"Position direction from the node fill (e.g. Open Long, Close Short, Buy, Sell).","schema":{"example":"Open Long","type":"string"}},{"name":"min_notional","required":false,"in":"query","description":"Minimum fill notional in USDC.","schema":{"example":10000,"type":"number"}},{"name":"crossed","required":false,"in":"query","description":"Filter taker fills. 1 = taker, 0 = maker.","schema":{"type":"number","enum":[0,1]}},{"name":"is_liquidation","required":false,"in":"query","description":"Filter liquidation fills. 1 = liquidation, 0 = non-liquidation.","schema":{"type":"number","enum":[0,1]}}],"responses":{"200":{"description":"Paginated node fills","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true,"description":"Opaque pagination cursor. Pass this value as the cursor query parameter for the next page."},"warnings":{"type":"array","description":"Structured response warnings. Omitted when there are no warnings.","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT","UNRESOLVED_INSTRUMENT"]},"message":{"type":"string"}}}}},"required":["next_cursor"]}},"required":["data","meta"]}}}},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"HyperCore Fills","tags":["Hyperliquid - HyperCore"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"DESC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by event time. Defaults to DESC for node history endpoints."},"instrument_name":{"example":"BTC-USD","type":"string","description":"Normalized instrument name (e.g. BTC-USD, xyz:NVDA-USD, BASED_USDC)."},"instrument_name_raw":{"example":"BTC","type":"string","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40)."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, NVDA, BASED)."},"market_type":{"example":"perp","type":"string","enum":["perp","perp_hip3","spot","prediction"],"description":"Hyperliquid node market type."},"wallet":{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string","description":"Wallet address. Required for raw Hyperliquid node fills."},"side":{"type":"string","enum":["buy","sell"],"description":"Aggressor side."},"dir":{"example":"Open Long","type":"string","description":"Position direction from the node fill (e.g. Open Long, Close Short, Buy, Sell)."},"min_notional":{"example":10000,"type":"number","description":"Minimum fill notional in USDC."},"crossed":{"type":"number","enum":[0,1],"description":"Filter taker fills. 1 = taker, 0 = maker."},"is_liquidation":{"type":"number","enum":[0,1],"description":"Filter liquidation fills. 1 = liquidation, 0 = non-liquidation."}},"required":["wallet"]}}}},"x-required-query":["wallet"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/hyperliquid/node/prediction-fills":{"get":{"description":"Returns HIP-4 prediction outcome fills enriched from Hyperliquid L1 HyperCore data, including condition/token identifiers and wallet attribution. Requires at least one of instrument_name, condition_id, or token_id.\n\nAt least one query parameter is required: instrument_name, condition_id, token_id.","operationId":"HyperCore Prediction Fills","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by fill time. Defaults to DESC.","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"instrument_name","required":false,"in":"query","description":"Prediction instrument name.","schema":{"example":"fed-cuts-in-2026-YES","type":"string"}},{"name":"condition_id","required":false,"in":"query","description":"Prediction market condition ID.","schema":{"type":"string"}},{"name":"token_id","required":false,"in":"query","description":"Prediction outcome token ID.","schema":{"type":"string"}},{"name":"outcome","required":false,"in":"query","description":"Outcome side label.","schema":{"example":"YES","type":"string"}},{"name":"category","required":false,"in":"query","description":"Prediction category.","schema":{"example":"crypto","type":"string"}},{"name":"event_slug","required":false,"in":"query","description":"Prediction event slug.","schema":{"type":"string"}},{"name":"wallet","required":false,"in":"query","description":"Wallet address.","schema":{"type":"string"}},{"name":"side","required":false,"in":"query","description":"Aggressor side.","schema":{"type":"string","enum":["buy","sell"]}},{"name":"min_notional","required":false,"in":"query","description":"Minimum fill notional.","schema":{"example":1000,"type":"number"}}],"responses":{"200":{"description":"Paginated HIP-4 prediction fills","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true,"description":"Opaque pagination cursor. Pass this value as the cursor query parameter for the next page."},"warnings":{"type":"array","description":"Structured response warnings. Omitted when there are no warnings.","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT","UNRESOLVED_INSTRUMENT"]},"message":{"type":"string"}}}}},"required":["next_cursor"]}},"required":["data","meta"]}}}},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"HyperCore Prediction Fills","tags":["Hyperliquid - HyperCore"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"DESC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by fill time. Defaults to DESC."},"instrument_name":{"example":"fed-cuts-in-2026-YES","type":"string","description":"Prediction instrument name."},"condition_id":{"type":"string","description":"Prediction market condition ID."},"token_id":{"type":"string","description":"Prediction outcome token ID."},"outcome":{"example":"YES","type":"string","description":"Outcome side label."},"category":{"example":"crypto","type":"string","description":"Prediction category."},"event_slug":{"type":"string","description":"Prediction event slug."},"wallet":{"type":"string","description":"Wallet address."},"side":{"type":"string","enum":["buy","sell"],"description":"Aggressor side."},"min_notional":{"example":1000,"type":"number","description":"Minimum fill notional."}},"anyOf":[{"required":["instrument_name"]},{"required":["condition_id"]},{"required":["token_id"]}]}}}},"x-required-query-anyOf":["instrument_name","condition_id","token_id"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/hyperliquid/node/liquidations":{"get":{"description":"Returns liquidation fills from HyperCore with liquidated user, liquidator wallet, mark price, method, fill price, closed PnL, role, and backstop labels. Raw event mode preserves the two-row liquidated/liquidator structure; dedupe=true returns one canonical row per event.","operationId":"HyperCore Liquidations","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by event time. Defaults to DESC for node history endpoints.","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"instrument_name","required":false,"in":"query","description":"Normalized instrument name (e.g. BTC-USD, xyz:NVDA-USD, BASED_USDC).","schema":{"example":"BTC-USD","type":"string"}},{"name":"instrument_name_raw","required":false,"in":"query","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40).","schema":{"example":"BTC","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g. BTC, NVDA, BASED).","schema":{"example":"BTC","type":"string"}},{"name":"market_type","required":false,"in":"query","description":"Hyperliquid node market type.","schema":{"example":"perp","type":"string","enum":["perp","perp_hip3","spot","prediction"]}},{"name":"wallet","required":false,"in":"query","description":"Wallet address.","schema":{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string"}},{"name":"liquidated_user","required":false,"in":"query","description":"Liquidated wallet address.","schema":{"type":"string"}},{"name":"liquidator","required":false,"in":"query","description":"Liquidator wallet address.","schema":{"type":"string"}},{"name":"min_notional","required":false,"in":"query","description":"Minimum liquidation notional in USDC.","schema":{"example":10000,"type":"number"}},{"name":"dedupe","required":false,"in":"query","description":"When true, returns one canonical liquidation row per event from the liquidated-user perspective. Defaults to false, preserving the raw two-row victim/counterparty structure.","schema":{"default":false,"type":"boolean"}},{"name":"resolution","required":false,"in":"query","description":"Optional aggregation resolution. When set, returns per-instrument liquidation buckets instead of event rows.","schema":{"type":"string","enum":["5m","15m","1h","1d"]}}],"responses":{"200":{"description":"Paginated node liquidations","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true,"description":"Opaque pagination cursor. Pass this value as the cursor query parameter for the next page."},"warnings":{"type":"array","description":"Structured response warnings. Omitted when there are no warnings.","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT","UNRESOLVED_INSTRUMENT"]},"message":{"type":"string"}}}}},"required":["next_cursor"]}},"required":["data","meta"]}}}},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"HyperCore Liquidations","tags":["Hyperliquid - HyperCore"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"DESC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by event time. Defaults to DESC for node history endpoints."},"instrument_name":{"example":"BTC-USD","type":"string","description":"Normalized instrument name (e.g. BTC-USD, xyz:NVDA-USD, BASED_USDC)."},"instrument_name_raw":{"example":"BTC","type":"string","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40)."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, NVDA, BASED)."},"market_type":{"example":"perp","type":"string","enum":["perp","perp_hip3","spot","prediction"],"description":"Hyperliquid node market type."},"wallet":{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string","description":"Wallet address."},"liquidated_user":{"type":"string","description":"Liquidated wallet address."},"liquidator":{"type":"string","description":"Liquidator wallet address."},"min_notional":{"example":10000,"type":"number","description":"Minimum liquidation notional in USDC."},"dedupe":{"default":false,"type":"boolean","description":"When true, returns one canonical liquidation row per event from the liquidated-user perspective. Defaults to false, preserving the raw two-row victim/counterparty structure."},"resolution":{"type":"string","enum":["5m","15m","1h","1d"],"description":"Optional aggregation resolution. When set, returns per-instrument liquidation buckets instead of event rows."}}}}}}}},"/api/v1/hyperliquid/node/wallet-flow":{"get":{"description":"Returns per-wallet HyperCore flow rollups with buy/sell/net volume, buy/sell/net/total notional, trade count, realized PnL, and fees. Requires at least one of wallet, instrument_name, instrument_name_raw, or currency. Negative fees are maker rebates. Aggregated per minute from native fills. Time range caps by resolution: 1m=7d, 5m=14d, 15m=30d, 1h=90d, 4h=180d, 1d=365d.\n\nAt least one query parameter is required: wallet, instrument_name, instrument_name_raw, currency.","operationId":"HyperCore Wallet Flow","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by event time. Defaults to DESC for node history endpoints.","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"instrument_name","required":false,"in":"query","description":"Normalized instrument name (e.g. BTC-USD, xyz:NVDA-USD, BASED_USDC).","schema":{"example":"BTC-USD","type":"string"}},{"name":"instrument_name_raw","required":false,"in":"query","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40).","schema":{"example":"BTC","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g. BTC, NVDA, BASED).","schema":{"example":"BTC","type":"string"}},{"name":"market_type","required":false,"in":"query","description":"Hyperliquid node market type.","schema":{"example":"perp","type":"string","enum":["perp","perp_hip3","spot","prediction"]}},{"name":"wallet","required":false,"in":"query","description":"Wallet address.","schema":{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string"}},{"name":"resolution","required":false,"in":"query","description":"Aggregation resolution. Source table is 1-minute wallet flow. Maximum time range by resolution: 1m=7d, 5m=14d, 15m=30d, 1h=90d, 4h=180d, 1d=365d.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"sort_by","required":false,"in":"query","description":"Sort key for wallet flow rows. time preserves the historical time ordering; notional/PnL/count sorts rank wallets inside the selected window.","schema":{"default":"time","type":"string","enum":["time","total_notional","buy_notional","sell_notional","net_notional","realized_pnl","trade_count"]}},{"name":"min_notional","required":false,"in":"query","description":"Minimum total traded notional in USDC (buy_notional + sell_notional).","schema":{"example":100000,"type":"number"}}],"responses":{"200":{"description":"Paginated wallet flow rows","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true,"description":"Opaque pagination cursor. Pass this value as the cursor query parameter for the next page."},"warnings":{"type":"array","description":"Structured response warnings. Omitted when there are no warnings.","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT","UNRESOLVED_INSTRUMENT"]},"message":{"type":"string"}}}}},"required":["next_cursor"]}},"required":["data","meta"]}}}},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"HyperCore Wallet Flow","tags":["Hyperliquid - HyperCore"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"DESC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by event time. Defaults to DESC for node history endpoints."},"instrument_name":{"example":"BTC-USD","type":"string","description":"Normalized instrument name (e.g. BTC-USD, xyz:NVDA-USD, BASED_USDC)."},"instrument_name_raw":{"example":"BTC","type":"string","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40)."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, NVDA, BASED)."},"market_type":{"example":"perp","type":"string","enum":["perp","perp_hip3","spot","prediction"],"description":"Hyperliquid node market type."},"wallet":{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string","description":"Wallet address."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Aggregation resolution. Source table is 1-minute wallet flow. Maximum time range by resolution: 1m=7d, 5m=14d, 15m=30d, 1h=90d, 4h=180d, 1d=365d."},"sort_by":{"default":"time","type":"string","enum":["time","total_notional","buy_notional","sell_notional","net_notional","realized_pnl","trade_count"],"description":"Sort key for wallet flow rows. time preserves the historical time ordering; notional/PnL/count sorts rank wallets inside the selected window."},"min_notional":{"example":100000,"type":"number","description":"Minimum total traded notional in USDC (buy_notional + sell_notional)."}},"anyOf":[{"required":["wallet"]},{"required":["instrument_name"]},{"required":["instrument_name_raw"]},{"required":["currency"]}]}}}},"x-required-query-anyOf":["wallet","instrument_name","instrument_name_raw","currency"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/hyperliquid/node/wallet-positions":{"get":{"description":"Returns latest per-wallet HyperCore positions by instrument, ranked by absolute position size, with latest mark price, mark-time, position notional, nullable reconstructed entry price, and wallet labels. Requires at least one of wallet, instrument_name, instrument_name_raw, or currency. Response meta uses freshness_basis=ingestion_watermark with watermark_time and staleness_ms; row updated_at and last_fill_time remain wallet activity timestamps and do not drive freshness warnings. Stale ingestion watermarks and unresolved instrument filters are reported in meta.warnings.\n\nAt least one query parameter is required: wallet, instrument_name, instrument_name_raw, currency.","operationId":"HyperCore Wallet Positions","parameters":[{"name":"wallet","required":false,"in":"query","description":"Wallet address.","schema":{"type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Normalized instrument name.","schema":{"example":"BTC-USD","type":"string"}},{"name":"instrument_name_raw","required":false,"in":"query","description":"Raw Hyperliquid node coin.","schema":{"example":"BTC","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency.","schema":{"example":"BTC","type":"string"}},{"name":"market_type","required":false,"in":"query","description":"Market type.","schema":{"type":"string","enum":["perp","perp_hip3","spot","prediction"]}},{"name":"start","required":false,"in":"query","description":"Start date for last fill time filter.","schema":{"format":"date-time","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date for last fill time filter.","schema":{"format":"date-time","type":"string"}},{"name":"include_zero","required":false,"in":"query","description":"Include zero/flat positions.","schema":{"default":false,"type":"boolean"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of positions to return (1-1000).","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}}],"responses":{"200":{"description":"Latest wallet position rows","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true,"description":"Opaque pagination cursor. Pass this value as the cursor query parameter for the next page."},"warnings":{"type":"array","description":"Structured response warnings. Omitted when there are no warnings.","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT","UNRESOLVED_INSTRUMENT"]},"message":{"type":"string"}}}},"freshness_basis":{"type":"string","enum":["ingestion_watermark"],"description":"Basis used to compute staleness_ms."},"staleness_ms":{"type":"number","nullable":true,"description":"Milliseconds since the freshness basis timestamp."},"watermark_time":{"type":"string","nullable":true,"description":"Latest event ingestion watermark timestamp in UTC."},"watermark_time_iso":{"type":"string","nullable":true,"description":"Latest event ingestion watermark timestamp in ISO 8601 UTC."}},"required":["next_cursor"]}},"required":["data","meta"]}}}},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"HyperCore Wallet Positions","tags":["Hyperliquid - HyperCore"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string","description":"Wallet address."},"instrument_name":{"example":"BTC-USD","type":"string","description":"Normalized instrument name."},"instrument_name_raw":{"example":"BTC","type":"string","description":"Raw Hyperliquid node coin."},"currency":{"example":"BTC","type":"string","description":"Base currency."},"market_type":{"type":"string","enum":["perp","perp_hip3","spot","prediction"],"description":"Market type."},"start":{"format":"date-time","type":"string","description":"Start date for last fill time filter."},"end":{"format":"date-time","type":"string","description":"End date for last fill time filter."},"include_zero":{"default":false,"type":"boolean","description":"Include zero/flat positions."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of positions to return (1-1000)."}},"anyOf":[{"required":["wallet"]},{"required":["instrument_name"]},{"required":["instrument_name_raw"]},{"required":["currency"]}]}}}},"x-required-query-anyOf":["wallet","instrument_name","instrument_name_raw","currency"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/hyperliquid/node/funding-payments":{"get":{"description":"Returns per-wallet hourly HyperCore funding payments from native misc events. Requires wallet. This is payment-level data, not just market-level funding rates.\n\nRequired query parameter: wallet.","operationId":"HyperCore Funding Payments","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by event time. Defaults to DESC for node history endpoints.","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"instrument_name","required":false,"in":"query","description":"Normalized instrument name (e.g. BTC-USD, xyz:NVDA-USD, BASED_USDC).","schema":{"example":"BTC-USD","type":"string"}},{"name":"instrument_name_raw","required":false,"in":"query","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40).","schema":{"example":"BTC","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g. BTC, NVDA, BASED).","schema":{"example":"BTC","type":"string"}},{"name":"market_type","required":false,"in":"query","description":"Hyperliquid node market type.","schema":{"example":"perp","type":"string","enum":["perp","perp_hip3","spot","prediction"]}},{"name":"wallet","required":true,"in":"query","description":"Wallet address. Required for Hyperliquid funding payments.","schema":{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string"}},{"name":"min_abs_usdc","required":false,"in":"query","description":"Minimum absolute funding payment in USDC.","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":"Paginated funding payment rows","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true,"description":"Opaque pagination cursor. Pass this value as the cursor query parameter for the next page."},"warnings":{"type":"array","description":"Structured response warnings. Omitted when there are no warnings.","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT","UNRESOLVED_INSTRUMENT"]},"message":{"type":"string"}}}}},"required":["next_cursor"]}},"required":["data","meta"]}}}},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"HyperCore Funding Payments","tags":["Hyperliquid - HyperCore"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"DESC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by event time. Defaults to DESC for node history endpoints."},"instrument_name":{"example":"BTC-USD","type":"string","description":"Normalized instrument name (e.g. BTC-USD, xyz:NVDA-USD, BASED_USDC)."},"instrument_name_raw":{"example":"BTC","type":"string","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40)."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, NVDA, BASED)."},"market_type":{"example":"perp","type":"string","enum":["perp","perp_hip3","spot","prediction"],"description":"Hyperliquid node market type."},"wallet":{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string","description":"Wallet address. Required for Hyperliquid funding payments."},"min_abs_usdc":{"example":10,"type":"number","description":"Minimum absolute funding payment in USDC."}},"required":["wallet"]}}}},"x-required-query":["wallet"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/hyperliquid/node/twap-events":{"get":{"description":"Returns HyperCore TWAP lifecycle events with wallet, status, target size, target notional, executed size/notional, duration, and reduce-only/randomize flags. If wallet/twap_id are omitted, the query defaults to the recent 24h window; use min_target_notional for large TWAP discovery. Broad discovery without wallet/instrument/twap_id is capped to 24h.","operationId":"HyperCore TWAP Events","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by event time. Defaults to DESC for node history endpoints.","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"instrument_name","required":false,"in":"query","description":"Normalized instrument name (e.g. BTC-USD, xyz:NVDA-USD, BASED_USDC).","schema":{"example":"BTC-USD","type":"string"}},{"name":"instrument_name_raw","required":false,"in":"query","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40).","schema":{"example":"BTC","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency (e.g. BTC, NVDA, BASED).","schema":{"example":"BTC","type":"string"}},{"name":"market_type","required":false,"in":"query","description":"Hyperliquid node market type.","schema":{"example":"perp","type":"string","enum":["perp","perp_hip3","spot","prediction"]}},{"name":"wallet","required":false,"in":"query","description":"Wallet address.","schema":{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string"}},{"name":"twap_id","required":false,"in":"query","description":"TWAP ID.","schema":{"type":"number"}},{"name":"status","required":false,"in":"query","description":"TWAP status.","schema":{"example":"activated","type":"string"}},{"name":"side","required":false,"in":"query","description":"Order side.","schema":{"type":"string","enum":["B","A"]}},{"name":"min_target_notional","required":false,"in":"query","description":"Minimum target notional in USDC. For partially executed TWAPs this uses executed VWAP; otherwise it uses the latest available mark price. Broad TWAP discovery without wallet/instrument/twap_id is capped to a 24h window.","schema":{"example":1000000,"type":"number"}}],"responses":{"200":{"description":"Paginated TWAP lifecycle events","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true,"description":"Opaque pagination cursor. Pass this value as the cursor query parameter for the next page."},"warnings":{"type":"array","description":"Structured response warnings. Omitted when there are no warnings.","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT","UNRESOLVED_INSTRUMENT"]},"message":{"type":"string"}}}}},"required":["next_cursor"]}},"required":["data","meta"]}}}},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"HyperCore TWAP Events","tags":["Hyperliquid - HyperCore"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"DESC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by event time. Defaults to DESC for node history endpoints."},"instrument_name":{"example":"BTC-USD","type":"string","description":"Normalized instrument name (e.g. BTC-USD, xyz:NVDA-USD, BASED_USDC)."},"instrument_name_raw":{"example":"BTC","type":"string","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40)."},"currency":{"example":"BTC","type":"string","description":"Base currency (e.g. BTC, NVDA, BASED)."},"market_type":{"example":"perp","type":"string","enum":["perp","perp_hip3","spot","prediction"],"description":"Hyperliquid node market type."},"wallet":{"example":"0x1234567890abcdef1234567890abcdef12345678","type":"string","description":"Wallet address."},"twap_id":{"type":"number","description":"TWAP ID."},"status":{"example":"activated","type":"string","description":"TWAP status."},"side":{"type":"string","enum":["B","A"],"description":"Order side."},"min_target_notional":{"example":1000000,"type":"number","description":"Minimum target notional in USDC. For partially executed TWAPs this uses executed VWAP; otherwise it uses the latest available mark price. Broad TWAP discovery without wallet/instrument/twap_id is capped to a 24h window."}}}}}}}},"/api/v1/hyperliquid/node/resting-orders":{"get":{"description":"Returns the latest per-wallet resting order snapshot from HyperCore-derived L4 state, ranked by notional, including mark price, distance_from_mark_pct, machine-readable snapshot freshness metadata, and wallet labels. Requires at least one of wallet, instrument_name, instrument_name_raw, or currency. Snapshots are emitted every 60 seconds; latest requests without start/end are pruned to the most recent 15 minutes. Response meta uses freshness_basis=snapshot with snapshot_time, snapshot_interval_ms, and staleness_ms. Stale snapshots and unresolved instrument filters are reported in meta.warnings.\n\nAt least one query parameter is required: wallet, instrument_name, instrument_name_raw, currency.","operationId":"HyperCore Resting Orders","parameters":[{"name":"wallet","required":false,"in":"query","description":"Wallet address.","schema":{"type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Normalized instrument name.","schema":{"example":"BTC-USD","type":"string"}},{"name":"instrument_name_raw","required":false,"in":"query","description":"Raw Hyperliquid node coin.","schema":{"example":"BTC","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency.","schema":{"example":"BTC","type":"string"}},{"name":"market_type","required":false,"in":"query","description":"Market type.","schema":{"type":"string","enum":["perp","perp_hip3","spot","prediction"]}},{"name":"side","required":false,"in":"query","description":"Order side.","schema":{"type":"string","enum":["B","A"]}},{"name":"min_notional","required":false,"in":"query","description":"Minimum resting order notional.","schema":{"example":100000,"type":"number"}},{"name":"max_distance_from_mark","required":false,"in":"query","description":"Maximum absolute distance from mark price in percent. Use this to exclude deep crash bids/asks from near-mark liquidity views.","schema":{"example":10,"type":"number"}},{"name":"start","required":false,"in":"query","description":"Restrict latest snapshot search to this start date.","schema":{"format":"date-time","type":"string"}},{"name":"end","required":false,"in":"query","description":"Restrict latest snapshot search to this end date.","schema":{"format":"date-time","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of resting orders to return (1-1000).","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}}],"responses":{"200":{"description":"Latest resting order snapshot rows","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true,"description":"Opaque pagination cursor. Pass this value as the cursor query parameter for the next page."},"warnings":{"type":"array","description":"Structured response warnings. Omitted when there are no warnings.","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT","UNRESOLVED_INSTRUMENT"]},"message":{"type":"string"}}}},"freshness_basis":{"type":"string","enum":["snapshot"],"description":"Basis used to compute staleness_ms."},"staleness_ms":{"type":"number","nullable":true,"description":"Milliseconds since the freshness basis timestamp."},"snapshot_time":{"type":"string","nullable":true,"description":"Latest snapshot timestamp in UTC."},"snapshot_time_iso":{"type":"string","nullable":true,"description":"Latest snapshot timestamp in ISO 8601 UTC."},"snapshot_interval_ms":{"type":"number","description":"Expected snapshot emission interval in milliseconds."}},"required":["next_cursor"]}},"required":["data","meta"]}}}},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"HyperCore Resting Orders","tags":["Hyperliquid - HyperCore"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"wallet":{"type":"string","description":"Wallet address."},"instrument_name":{"example":"BTC-USD","type":"string","description":"Normalized instrument name."},"instrument_name_raw":{"example":"BTC","type":"string","description":"Raw Hyperliquid node coin."},"currency":{"example":"BTC","type":"string","description":"Base currency."},"market_type":{"type":"string","enum":["perp","perp_hip3","spot","prediction"],"description":"Market type."},"side":{"type":"string","enum":["B","A"],"description":"Order side."},"min_notional":{"example":100000,"type":"number","description":"Minimum resting order notional."},"max_distance_from_mark":{"example":10,"type":"number","description":"Maximum absolute distance from mark price in percent. Use this to exclude deep crash bids/asks from near-mark liquidity views."},"start":{"format":"date-time","type":"string","description":"Restrict latest snapshot search to this start date."},"end":{"format":"date-time","type":"string","description":"Restrict latest snapshot search to this end date."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of resting orders to return (1-1000)."}},"anyOf":[{"required":["wallet"]},{"required":["instrument_name"]},{"required":["instrument_name_raw"]},{"required":["currency"]}]}}}},"x-required-query-anyOf":["wallet","instrument_name","instrument_name_raw","currency"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/hyperliquid/node/instruments":{"get":{"description":"Maps raw Hyperliquid node coins such as BTC, xyz:NVDA, @305, and #40 to normalized instrument names, market type, base currency, tick/lot sizing, HIP-3 display names, deployer, status, and last-seen time.","operationId":"HyperCore Instruments","parameters":[{"name":"instrument_name_raw","required":false,"in":"query","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40).","schema":{"example":"@305","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Normalized instrument name.","schema":{"example":"BTC-USD","type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base currency.","schema":{"example":"BTC","type":"string"}},{"name":"market_type","required":false,"in":"query","description":"Market type.","schema":{"type":"string","enum":["perp","perp_hip3","spot","prediction"]}},{"name":"start","required":false,"in":"query","description":"Only include raw coins observed at or after this UTC datetime. Defaults to 24 hours ago for observed aliases; active perp/HIP-3 mappings also come from Hyperliquid metadata.","schema":{"format":"date-time","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of mappings to return (1-1000).","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}}],"responses":{"200":{"description":"Raw Hyperliquid coin mapping rows","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true,"description":"Opaque pagination cursor. Pass this value as the cursor query parameter for the next page."},"warnings":{"type":"array","description":"Structured response warnings. Omitted when there are no warnings.","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT","UNRESOLVED_INSTRUMENT"]},"message":{"type":"string"}}}}},"required":["next_cursor"]}},"required":["data","meta"]}}}},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"HyperCore Instruments","tags":["Hyperliquid - HyperCore"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"instrument_name_raw":{"example":"@305","type":"string","description":"Raw Hyperliquid node coin (e.g. BTC, xyz:NVDA, @305, #40)."},"instrument_name":{"example":"BTC-USD","type":"string","description":"Normalized instrument name."},"currency":{"example":"BTC","type":"string","description":"Base currency."},"market_type":{"type":"string","enum":["perp","perp_hip3","spot","prediction"],"description":"Market type."},"start":{"format":"date-time","type":"string","description":"Only include raw coins observed at or after this UTC datetime. Defaults to 24 hours ago for observed aliases; active perp/HIP-3 mappings also come from Hyperliquid metadata."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of mappings to return (1-1000)."}}}}}}}},"/api/v1/hyperliquid/node/l2-orderbook":{"get":{"description":"Returns the latest HyperCore-derived L2 orderbook snapshot for an instrument. Unambiguous inputs such as BTC resolve to canonical names such as BTC-USD when possible; ambiguous or unknown values return an UNRESOLVED_INSTRUMENT warning with an empty data array. Depth can reach 100 levels, compared with the standard WS-derived 20-level Hyperliquid book.","operationId":"HyperCore L2 Orderbook","parameters":[{"name":"instrument_name","required":true,"in":"query","description":"Normalized instrument name.","schema":{"example":"BTC-USD","type":"string"}},{"name":"date","required":false,"in":"query","description":"Snapshot time in ISO 8601 format. If omitted, returns latest available snapshot.","schema":{"format":"date-time","type":"string"}}],"responses":{"200":{"description":"Latest node-derived L2 snapshot","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"string","nullable":true,"description":"Opaque pagination cursor. Pass this value as the cursor query parameter for the next page."},"warnings":{"type":"array","description":"Structured response warnings. Omitted when there are no warnings.","items":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["STALE_SNAPSHOT","UNRESOLVED_INSTRUMENT"]},"message":{"type":"string"}}}}},"required":["next_cursor"]}},"required":["data","meta"]}}}},"400":{"content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}},"description":""},"401":{"content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}},"description":""},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}},"description":""}},"security":[{"X-API-Key":[]}],"summary":"HyperCore L2 Orderbook","tags":["Hyperliquid - HyperCore"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"instrument_name":{"example":"BTC-USD","type":"string","description":"Normalized instrument name."},"date":{"format":"date-time","type":"string","description":"Snapshot time in ISO 8601 format. If omitted, returns latest available snapshot."}},"required":["instrument_name"]}}}}}},"/api/v1/predictions/catalog":{"get":{"description":"Returns a list of available prediction market instruments. Supports filtering by exchange, category, event_slug, and keyword search.","operationId":"Predictions Catalog","parameters":[{"name":"exchange","required":false,"in":"query","description":"Filter by exchange (polymarket or hyperliquid)","schema":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"]}},{"name":"category","required":false,"in":"query","description":"Filter by market category (e.g., crypto, politics, sports)","schema":{"example":"crypto","type":"string"}},{"name":"event_slug","required":false,"in":"query","description":"Filter by event slug (parent event grouping)","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string"}},{"name":"keyword","required":false,"in":"query","description":"Keyword search to filter instruments by name (case-insensitive partial match)","schema":{"example":"bitcoin","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of instruments to return (1-1000)","schema":{"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor from a previous response","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"success":true,"data":[{"instrument_name":"will-bitcoin-reach-250000-by-december-31-2026-YES","exchange":"polymarket"},{"instrument_name":"will-bitcoin-reach-250000-by-december-31-2026-NO","exchange":"polymarket"},{"instrument_name":"btc-above-79980-20260505-0600","exchange":"hyperliquid"}]}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Predictions Catalog","tags":["Predictions"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"],"description":"Filter by exchange (polymarket or hyperliquid)"},"category":{"example":"crypto","type":"string","description":"Filter by market category (e.g., crypto, politics, sports)"},"event_slug":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string","description":"Filter by event slug (parent event grouping)"},"keyword":{"example":"bitcoin","type":"string","description":"Keyword search to filter instruments by name (case-insensitive partial match)"},"limit":{"default":100,"example":100,"type":"number","description":"Maximum number of instruments to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor from a previous response"}}}}}}}},"/api/v1/predictions/categories":{"get":{"description":"Returns a list of all prediction market categories with instrument counts.","operationId":"Predictions Categories","parameters":[{"name":"exchange","required":false,"in":"query","description":"Filter by exchange (polymarket or hyperliquid)","schema":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"]}}],"responses":{"200":{"content":{"application/json":{"example":[{"category":"crypto","count":45},{"category":"politics","count":32},{"category":"sports","count":18}]}},"description":""},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Predictions Categories","tags":["Predictions"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"],"description":"Filter by exchange (polymarket or hyperliquid)"}}}}}}}},"/api/v1/predictions/metadata":{"get":{"description":"Returns metadata for a specific prediction instrument including data availability, total record count, and pagination information.","operationId":"Predictions Metadata","parameters":[{"name":"exchange","required":false,"in":"query","description":"Exchange name (polymarket or hyperliquid)","schema":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"]}},{"name":"limit","required":false,"in":"query","description":"Number of records per page for pagination calculation","schema":{"minimum":1,"maximum":100,"default":100,"example":100,"type":"number"}},{"name":"instrument_name","required":true,"in":"query","description":"Instrument name","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string"}}],"responses":{"200":{"description":"Metadata successfully retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetadataResponseEntity"}}}},"400":{"description":"Bad Request - Invalid parameters or no data found","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Predictions Metadata","tags":["Predictions"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"],"description":"Exchange name (polymarket or hyperliquid)"},"limit":{"minimum":1,"maximum":100,"default":100,"example":100,"type":"number","description":"Number of records per page for pagination calculation"},"instrument_name":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string","description":"Instrument name"}},"required":["instrument_name"]}}}}}},"/api/v1/predictions/ohlcvt":{"get":{"description":"Retrieves Open, High, Low, Close, Volume, Trades data for prediction market instruments. Prices represent probabilities (0.0-1.0).\n\n**Key Features:**\n- Historical probability-based OHLC candlestick data\n- Buy/sell volume breakdown\n- Trade count statistics\n- Support for multiple resolutions (1m, 5m, 15m, 1h, 4h, 1d)","operationId":"Predictions OHLCVT Market Data","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (polymarket or hyperliquid)","schema":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"]}},{"name":"instrument_name","required":false,"in":"query","description":"Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string"}},{"name":"category","required":false,"in":"query","description":"Filter by market category (e.g., crypto, politics, sports)","schema":{"example":"crypto","type":"string"}},{"name":"event_slug","required":false,"in":"query","description":"Filter by event slug (parent event grouping)","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string"}},{"name":"outcome","required":false,"in":"query","description":"Filter by outcome side","schema":{"type":"string","enum":["YES","NO"]}}],"responses":{"200":{"description":"OHLCVT data successfully retrieved","content":{"application/json":{"example":{"success":true,"data":[{"date":"2026-02-20 12:00:00","exchange":"polymarket","instrument_name":"will-bitcoin-reach-250000-by-december-31-2026-YES","condition_id":"0xabc...","token_id":"12345","category":"crypto","event_slug":"will-bitcoin-reach-250000-by-december-31-2026","open":0.35,"high":0.38,"low":0.33,"close":0.37,"vwap":0.355,"volume":1250.5,"buy_volume":750.3,"sell_volume":500.2,"trades_count":85,"buy_trades_count":50,"sell_trades_count":35,"last_probability":0.37}],"meta":{"next_cursor":null}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Predictions OHLCVT Market Data","tags":["Predictions"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"],"description":"Exchange name (polymarket or hyperliquid)"},"instrument_name":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string","description":"Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)"},"category":{"example":"crypto","type":"string","description":"Filter by market category (e.g., crypto, politics, sports)"},"event_slug":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string","description":"Filter by event slug (parent event grouping)"},"outcome":{"type":"string","enum":["YES","NO"],"description":"Filter by outcome side"}}}}}}}},"/api/v1/predictions/ticker-history":{"get":{"description":"Returns historical ticker data for prediction instruments including probability OHLC, bid/ask spread, and liquidity metrics.","operationId":"Predictions Ticker History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (polymarket or hyperliquid)","schema":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"]}},{"name":"instrument_name","required":false,"in":"query","description":"Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string"}},{"name":"category","required":false,"in":"query","description":"Filter by market category (e.g., crypto, politics, sports)","schema":{"example":"crypto","type":"string"}},{"name":"event_slug","required":false,"in":"query","description":"Filter by event slug (parent event grouping)","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string"}},{"name":"outcome","required":false,"in":"query","description":"Filter by outcome side","schema":{"type":"string","enum":["YES","NO"]}}],"responses":{"200":{"content":{"application/json":{"example":{"success":true,"data":[{"date":"2026-02-20 12:00:00","exchange":"polymarket","instrument_name":"will-bitcoin-reach-250000-by-december-31-2026-YES","probability":0.37,"probability_open":0.35,"probability_high":0.38,"probability_low":0.33,"complement_probability":0.63,"bid_price":0.36,"ask_price":0.38,"bid_ask_spread":0.02,"total_liquidity":5000}],"meta":{"next_cursor":null}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Predictions Ticker History","tags":["Predictions"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"],"description":"Exchange name (polymarket or hyperliquid)"},"instrument_name":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string","description":"Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)"},"category":{"example":"crypto","type":"string","description":"Filter by market category (e.g., crypto, politics, sports)"},"event_slug":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string","description":"Filter by event slug (parent event grouping)"},"outcome":{"type":"string","enum":["YES","NO"],"description":"Filter by outcome side"}}}}}}}},"/api/v1/predictions/trades":{"get":{"description":"Returns individual prediction market trades with price (probability), size, side, and outcome information. Supports cursor-based pagination.","operationId":"Predictions Trade History","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (polymarket or hyperliquid)","schema":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"]}},{"name":"instrument_name","required":false,"in":"query","description":"Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string"}},{"name":"category","required":false,"in":"query","description":"Filter by market category (e.g., crypto, politics, sports)","schema":{"example":"crypto","type":"string"}},{"name":"event_slug","required":false,"in":"query","description":"Filter by event slug (parent event grouping)","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string"}},{"name":"outcome","required":false,"in":"query","description":"Filter by outcome side","schema":{"type":"string","enum":["YES","NO"]}}],"responses":{"200":{"content":{"application/json":{"example":{"success":true,"data":[{"timestamp":1771523261437,"date":"2026-02-20T12:34:21.437Z","exchange":"polymarket","instrument_name":"will-bitcoin-reach-250000-by-december-31-2026-YES","outcome":"YES","category":"crypto","price":0.37,"size":100,"side":"buy","fee_rate_bps":0,"trade_hash":"abc123def456"}],"meta":{"next_cursor":null}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Predictions Trade History","tags":["Predictions"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"exchange":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"],"description":"Exchange name (polymarket or hyperliquid)"},"instrument_name":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string","description":"Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)"},"category":{"example":"crypto","type":"string","description":"Filter by market category (e.g., crypto, politics, sports)"},"event_slug":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string","description":"Filter by event slug (parent event grouping)"},"outcome":{"type":"string","enum":["YES","NO"],"description":"Filter by outcome side"}}}}}}}},"/api/v1/predictions/orderbook-raw":{"get":{"description":"Returns raw L2 orderbook snapshots for prediction instruments with full bid/ask arrays.\n\n**Key Features:**\n- Full bid/ask price levels\n- Pre-computed liquidity at 3 depth levels (10, 20, 50)\n- Order book imbalance per depth\n- Microprice (liquidity-weighted mid-price)","operationId":"Predictions L2 Orderbook Raw","parameters":[{"name":"start","required":false,"in":"query","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows.","schema":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string"}},{"name":"end","required":false,"in":"query","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data).","schema":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of records to return (1-1000)","schema":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number"}},{"name":"cursor","required":false,"in":"query","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.","schema":{"type":"string"}},{"name":"sort_dir","required":false,"in":"query","description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan.","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"exchange","required":false,"in":"query","description":"Exchange name (polymarket or hyperliquid)","schema":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"]}},{"name":"instrument_name","required":false,"in":"query","description":"Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string"}},{"name":"category","required":false,"in":"query","description":"Filter by market category (e.g., crypto, politics, sports)","schema":{"example":"crypto","type":"string"}},{"name":"event_slug","required":false,"in":"query","description":"Filter by event slug (parent event grouping)","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string"}},{"name":"outcome","required":false,"in":"query","description":"Filter by outcome side","schema":{"type":"string","enum":["YES","NO"]}}],"responses":{"200":{"description":"Raw L2 orderbook snapshots successfully retrieved","content":{"application/json":{"example":{"success":true,"data":[{"timestamp":1771523261437,"date":"2026-02-20T12:34:21.437Z","exchange":"polymarket","instrument_name":"will-bitcoin-reach-250000-by-december-31-2026-YES","bids":[{"price":0.36,"size":500},{"price":0.35,"size":300}],"asks":[{"price":0.38,"size":400},{"price":0.39,"size":250}],"depth":20,"bid_liquidity_10":2500,"ask_liquidity_10":2000,"microprice":0.371}],"meta":{"next_cursor":null}}}}},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Predictions L2 Orderbook Raw Snapshots","tags":["Predictions"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"start":{"format":"date-time","example":"2026-10-02T10:00:00.000Z","type":"string","description":"Start date in ISO 8601 format (UTC). When omitted, options, spot, perpetual and futures routes use the 24 hours before end (or before now without end). Pass start explicitly for historical windows."},"end":{"format":"date-time","example":"2026-10-09T10:00:00.000Z","type":"string","description":"End date in ISO 8601 format (UTC). Omitted means no upper bound (through the latest data)."},"limit":{"minimum":1,"maximum":1000,"default":100,"example":100,"type":"number","description":"Maximum number of records to return (1-1000)"},"cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response."},"sort_dir":{"default":"ASC","type":"string","enum":["ASC","DESC"],"description":"Sort direction by time bucket. ASC = oldest first (default, suited for backfills/charts). DESC = newest first (suited for \"latest N\" queries). Cursor pagination works in both directions; keep sort_dir constant within a paginated scan."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for bucketing results. The 1m grain is a persisted aggregate of finer source events; higher resolutions roll up those 1m records."},"exchange":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"],"description":"Exchange name (polymarket or hyperliquid)"},"instrument_name":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string","description":"Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)"},"category":{"example":"crypto","type":"string","description":"Filter by market category (e.g., crypto, politics, sports)"},"event_slug":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string","description":"Filter by event slug (parent event grouping)"},"outcome":{"type":"string","enum":["YES","NO"],"description":"Filter by outcome side"}}}}}}}},"/api/v1/predictions/snapshot":{"get":{"description":"Returns a snapshot of all prediction instruments for a given exchange at a single minute. If no date is provided, returns the latest available snapshot. Category and event_slug are optional filters.","operationId":"Predictions Snapshot","parameters":[{"name":"exchange","required":false,"in":"query","description":"Exchange name (polymarket or hyperliquid)","schema":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"]}},{"name":"date","required":false,"in":"query","description":"Exact date/time for the snapshot in ISO 8601 format (UTC). If omitted, returns the latest available snapshot.","schema":{"format":"date-time","example":"2026-01-20T10:00:00Z","type":"string"}},{"name":"resolution","required":false,"in":"query","description":"Time resolution for the snapshot. The 1m default is a persisted aggregate of finer source events, not a raw exchange-event feed. Higher resolutions roll up those 1m records.","schema":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"category","required":false,"in":"query","description":"Filter by market category (e.g., crypto, politics, sports)","schema":{"example":"crypto","type":"string"}},{"name":"event_slug","required":false,"in":"query","description":"Filter by event slug","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string"}},{"name":"keyword","required":false,"in":"query","description":"Keyword search to filter instruments by name (case-insensitive partial match)","schema":{"example":"bitcoin","type":"string"}},{"name":"instrument_name","required":false,"in":"query","description":"Filter to a specific instrument name (case-insensitive exact match)","schema":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"success":true,"data":[{"date":"2026-02-20 12:00:00","exchange":"polymarket","instrument_name":"will-bitcoin-reach-250000-by-december-31-2026-YES","probability":0.37,"bid_price":0.36,"ask_price":0.38,"total_liquidity":5000}],"meta":{"date":"2026-02-20T12:00:00.000Z","next_date":"2026-02-20T12:01:00.000Z"}}}},"description":""},"400":{"description":"Bad Request - Invalid parameters","content":{"application/json":{"example":{"statusCode":400,"message":["exchange must be a string","instrument_name must be a string","resolution must be one of: 1m, 5m, 1h","start must be a valid ISO 8601 date string"],"error":"Bad Request"}}}},"401":{"description":"Unauthorized - Invalid or missing API key","content":{"application/json":{"example":{"error":"unauthorized","message":"Missing or invalid API key"}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}},"429":{"description":"Too Many Requests - Rate limit exceeded","content":{"application/json":{"example":{"statusCode":429,"message":"Rate limit exceeded. Please retry after 60 seconds","error":"Too Many Requests"}}}}},"security":[{"X-API-Key":[]}],"summary":"Predictions Snapshot","tags":["Predictions"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"default":"polymarket","example":"polymarket","type":"string","enum":["polymarket","hyperliquid"],"description":"Exchange name (polymarket or hyperliquid)"},"date":{"format":"date-time","example":"2026-01-20T10:00:00Z","type":"string","description":"Exact date/time for the snapshot in ISO 8601 format (UTC). If omitted, returns the latest available snapshot."},"resolution":{"default":"1m","example":"1m","type":"string","enum":["1m","5m","15m","1h","4h","1d"],"description":"Time resolution for the snapshot. The 1m default is a persisted aggregate of finer source events, not a raw exchange-event feed. Higher resolutions roll up those 1m records."},"category":{"example":"crypto","type":"string","description":"Filter by market category (e.g., crypto, politics, sports)"},"event_slug":{"example":"will-bitcoin-reach-250000-by-december-31-2026","type":"string","description":"Filter by event slug"},"keyword":{"example":"bitcoin","type":"string","description":"Keyword search to filter instruments by name (case-insensitive partial match)"},"instrument_name":{"example":"will-bitcoin-reach-250000-by-december-31-2026-YES","type":"string","description":"Filter to a specific instrument name (case-insensitive exact match)"}}}}}}}},"/api/v1/mcp":{"post":{"description":"Model Context Protocol (MCP) Streamable HTTP transport. Accepts JSON-RPC 2.0 requests for methods: initialize, tools/list, tools/call. In Claude, use this URL with Sign in now and Register automatically, no custom headers or manual client credentials, then authorize with your Laevitas API key. See /mcp for setup and the McpOAuth section for registration and PKCE S256.","operationId":"MCP Streamable HTTP","parameters":[],"requestBody":{"required":true,"description":"JSON-RPC 2.0 request","content":{"application/json":{"schema":{"type":"object","required":["jsonrpc","id","method"],"properties":{"jsonrpc":{"type":"string","enum":["2.0"],"example":"2.0"},"id":{"type":"integer","example":1},"method":{"type":"string","enum":["initialize","tools/list","tools/call"],"example":"tools/list"},"params":{"type":"object","description":"Method-specific parameters. For tools/call: { name: \"<tool>\", arguments: { ... } }"}}}}}},"responses":{"200":{"description":"JSON-RPC 2.0 response or SSE stream"}},"summary":"MCP JSON-RPC endpoint","tags":["MCP"]},"get":{"description":"Server-Sent Events stream for MCP notifications.","operationId":"MCP SSE Stream","parameters":[],"responses":{"200":{"description":"SSE event stream"}},"summary":"MCP SSE stream endpoint","tags":["MCP"]},"delete":{"description":"Terminates an MCP session.","operationId":"MCP Session Delete","parameters":[],"responses":{"200":{"description":"Session terminated"}},"summary":"MCP session cleanup","tags":["MCP"]}},"/api/v1/changelog":{"get":{"description":"Returns the customer-facing release changelog without private deployment or infrastructure metadata.","operationId":"Full Changelog","parameters":[],"responses":{"200":{"description":"Returns the complete changelog content","content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string","description":"Markdown content of changelog"},"lastUpdated":{"type":"string","format":"date-time"}}}}}}},"summary":"Get full changelog","tags":["Changelog"]}},"/api/v1/changelog/latest":{"get":{"description":"Returns the newest release entry including version string, release date, and headline notes for quick upgrade checks.","operationId":"Latest Version","parameters":[],"responses":{"200":{"description":"Returns the latest version details from changelog","content":{"application/json":{"schema":{"type":"object","properties":{"version":{"type":"string","example":"0.8.0"},"date":{"type":"string","example":"2024-01-15"},"changes":{"type":"array","items":{"type":"string"}}}}}}}},"summary":"Get latest version information","tags":["Changelog"]}},"/api/v1/changelog/data-corrections":{"get":{"description":"Returns machine-readable correction records including affected endpoints, fields and windows, deployment identity, closed-window behavior, validation, and recommended re-collection scope.","operationId":"Historical Data Corrections","parameters":[],"responses":{"200":{"description":"Returns the historical data correction feed","content":{"application/json":{"schema":{"type":"object","properties":{"schemaVersion":{"type":"number","example":3},"feedRevision":{"type":"number","example":4},"lastUpdated":{"type":"string","format":"date-time"},"semantics":{"type":"object"},"corrections":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"status":{"type":"string","enum":["deployed","backfill_in_progress","superseded"]},"publishedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"summary":{"type":"string"},"cause":{"type":"string"},"deployment":{"type":"object","properties":{"deployedAt":{"type":"string","format":"date-time"},"releaseId":{"type":"string"}},"required":["deployedAt","releaseId"]},"affected":{"type":"array","items":{"type":"object"}},"changesClosedWindowResponsesWithoutBackfill":{"type":"boolean"},"recommendedRecollection":{"type":"string"},"validation":{"type":"array","items":{"type":"string"}}}}}}}}}}},"summary":"Get historical data correction records","tags":["Changelog"]}},"/api/v1/changelog/data-status":{"get":{"description":"Returns stable machine-readable records for live data incidents, planned maintenance, intentional series termination, and coverage-universe changes.","operationId":"Data Status and Coverage","parameters":[],"responses":{"200":{"description":"Returns the data status and coverage feed","content":{"application/json":{"schema":{"type":"object","properties":{"schemaVersion":{"type":"number","example":1},"lastUpdated":{"type":"string","format":"date-time"},"channels":{"type":"object"},"events":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["incident","coverage_change","planned_maintenance"]},"status":{"type":"string","enum":["investigating","identified","monitoring","resolved","scheduled","completed","cancelled"]},"publishedAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"startedAt":{"type":"string","format":"date-time"},"resolvedAt":{"type":"string","format":"date-time","nullable":true},"summary":{"type":"string"},"impact":{"type":"string"},"scope":{"type":"object"},"customerAction":{"type":"string"},"nextUpdate":{"type":"string"},"updates":{"type":"array","items":{"type":"object"}}}}}}}}}}},"summary":"Get data incidents and coverage changes","tags":["Changelog"]}},"/api/v1/changelog/data-definitions":{"get":{"description":"Static, versioned definitions shared with Swagger and MCP: audited instrument products, retained-history counterparts, options flow and dealer GEX, volatility surfaces, portfolio risk and realized volatility. Declares formulas, units, time selection, coverage limits and transport differences. Not the full endpoint inventory; does not certify completeness or change retention.","operationId":"Data Product Definitions","parameters":[{"name":"id","required":false,"in":"query","schema":{"enum":["options.ohlcvt","options.ticker_history","options.volatility","options.open_interest","options.volume","options.level1","options.reference_price","options.snapshot","options.trades","options.catalog","options.instrument_history","options.history_discovery","perpetuals.history_discovery","futures.history_discovery","spot.ohlcvt","spot.ticker","spot.level1","spot.volume","spot.snapshot","spot.trades","spot.l2_orderbook","spot.l2_orderbook_raw","spot.catalog","spot.metadata","perpetuals.ohlcvt","perpetuals.ticker_history","perpetuals.open_interest","perpetuals.volume","perpetuals.level1","perpetuals.reference_price","perpetuals.carry","perpetuals.orderbook","perpetuals.orderbook_raw","perpetuals.trades","perpetuals.trades_summary","perpetuals.flow","perpetuals.liquidations","perpetuals.snapshot","perpetuals.catalog","futures.ohlcvt","futures.ticker_history","futures.open_interest","futures.volume","futures.level1","futures.reference_price","futures.carry","futures.orderbook","futures.orderbook_raw","futures.trades","futures.trades_summary","futures.flow","futures.liquidations","futures.snapshot","futures.catalog","perpetuals.instrument_history","futures.instrument_history","derivatives.funding_history","market.snapshot_history","spot.retained_candles","options.flow","options.trades_summary","options.gex_catalog","options.gex_latest","options.gex_history","options.gex_regime_changes","options.gex_strikes","options.gex_term_structure","options.gex_profile","options.vol_surface_by_expiry","options.vol_surface_by_tenor","options.vol_surface_by_time","vol_surface.catalog","vol_surface.snapshots","vol_surface.slices","vol_surface.term_structure","vol_surface.strikes","vol_surface.risk_decompose","vol_surface.risk_scenario","vol_surface.risk_ladder","analytics.realized_volatility"],"type":"string"}}],"responses":{"200":{"description":"Definition catalogue; omit id to list the documented products.","content":{"application/json":{"schema":{"type":"object","properties":{"schema_version":{"type":"integer","example":1},"definition_revision":{"type":"string","example":"2026-10-01"},"guide":{"type":"string"},"historical_inventory":{"type":"object","properties":{"endpoint":{"type":"string"},"guide":{"type":"string"},"json":{"type":"string"},"reviewed_on":{"type":"string","format":"date"},"evidence_as_of":{"type":"string","format":"date"}}},"scope":{"type":"string"},"semantics":{"type":"object","additionalProperties":{"type":"string"}},"definitions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"path":{"type":"string"},"mcp_tool":{"type":"string"},"kind":{"type":"string","enum":["state","candle","chain","trades","events","aggregate","catalog","mixed_metrics"]},"description":{"type":"string"},"timestamp":{"type":"object","properties":{"field":{"type":"string"},"format":{"type":"string"},"meaning":{"type":"string"}}},"granularity":{"type":"string"},"units":{"type":"object","additionalProperties":{"type":"string"}},"coverage_endpoint_id":{"type":"string","nullable":true},"coverage_note":{"type":"string"},"request_semantics":{"type":"string"},"universe":{"type":"string"},"mcp_notes":{"type":"string"}}}}}}}}},"400":{"description":"Unknown dataset id."}},"summary":"Discover dataset meaning, units and timestamp conventions","tags":["Changelog"]}},"/api/v1/changelog/data-inventory":{"get":{"description":"Reviewed historical inventory: first dates, date precision, sampled cadence, known gaps and retrieval routes for selected API products and tick-data files. Includes older instrument and spot history. Dated evidence, not live selector coverage, continuous completeness or a delivery guarantee. API v2 uses the /api/v1 URL namespace.","operationId":"Historical Data Inventory","parameters":[{"name":"id","required":false,"in":"query","schema":{"enum":["options.instrument_history","perpetuals.instrument_history","futures.instrument_history","spot.retained_candles","options.ohlcvt","options.ticker_history","futures.ohlcvt","perpetuals.ohlcvt","spot.ohlcvt","market.snapshot_history","tick.files"],"type":"string"}},{"name":"exchange","required":false,"in":"query","description":"Optional exchange filter. A valid filter with no reviewed entries returns an empty products list, not proof of no data.","schema":{"example":"deribit","type":"string"}}],"responses":{"200":{"description":"Dated inventory shared by REST, MCP and the downloadable guide.","content":{"application/json":{"schema":{"type":"object","required":["schema_version","inventory_revision","reviewed_on","evidence_as_of","semantics","selector","products","limitations"],"properties":{"schema_version":{"type":"integer","example":1},"inventory_revision":{"type":"integer","example":1},"endpoint":{"type":"string"},"guide":{"type":"string"},"json":{"type":"string"},"description":{"type":"string"},"reviewed_on":{"type":"string","format":"date"},"evidence_as_of":{"type":"string","format":"date"},"semantics":{"type":"object","additionalProperties":{"type":"string"}},"selector":{"type":"object","properties":{"id":{"type":"string","nullable":true},"exchange":{"type":"string","nullable":true}}},"products":{"type":"array","items":{"type":"object","required":["id","title","access","path","definition_ids","coverage_endpoint_id","cadence","retrieval","entries"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"access":{"type":"string","enum":["api","download"]},"path":{"type":"string"},"definition_ids":{"type":"array","items":{"type":"string"}},"coverage_endpoint_id":{"type":"string","nullable":true},"cadence":{"type":"string"},"retrieval":{"type":"string"},"entries":{"type":"array","items":{"type":"object","required":["selector","first_date","date_precision","evidence","last_date","note"],"properties":{"selector":{"type":"object","required":["exchange"],"properties":{"exchange":{"type":"string","nullable":true},"currency":{"type":"string"},"instrument_name":{"type":"string"},"resolution":{"type":"string"},"series":{"type":"string"},"data_type":{"type":"string"}}},"first_date":{"type":"string","description":"UTC minute, day or approximate month according to date_precision and evidence; not always an exact first timestamp."},"date_precision":{"type":"string","enum":["minute","day","month"]},"evidence":{"type":"string","enum":["exact_selector_minimum","sampled_instruments","approximate_month","file_listing"]},"last_date":{"type":"string","nullable":true,"description":"Last reviewed date when supplied. null does not mean live or unlimited."},"note":{"type":"string"}}}}}}},"limitations":{"type":"array","items":{"type":"object","required":["id","products","description"],"properties":{"id":{"type":"string"},"products":{"type":"array","items":{"type":"string"}},"description":{"type":"string"}}}}}}}}},"400":{"description":"Unknown inventory id or exchange."}},"summary":"Discover reviewed history dates, cadence and gaps","tags":["Changelog"]}},"/api/v1/changelog/data-coverage":{"get":{"description":"Without endpoint_id, lists the stable endpoint identifiers that support coverage discovery and links to the reviewed historical inventory, including older products. With endpoint_id, returns earliest/latest stored rows observed for the supplied optional exchange, currency, and instrument selector, plus any certified source-completeness watermark. Observed boundaries are not completeness or availability-lag guarantees. The dated inventory is separate from live selector coverage.","operationId":"Observed Data Coverage","parameters":[{"name":"endpoint_id","required":false,"in":"query","schema":{"example":"options.vol_surface_by_expiry","type":"string"}},{"name":"exchange","required":false,"in":"query","schema":{"example":"deribit","type":"string"}},{"name":"currency","required":false,"in":"query","schema":{"example":"BTC","type":"string"}},{"name":"instrument_name","required":false,"in":"query","schema":{"example":"BTC-PERPETUAL","type":"string"}}],"responses":{"200":{"description":"Returns supported endpoint identifiers or scoped observed coverage and completeness metadata"}},"summary":"Discover selector-scoped observed data boundaries","tags":["Changelog"]}},"/api/v1/changelog/status":{"get":{"description":"Compares the public API release version with the latest customer-facing changelog entry.","operationId":"Version Status","parameters":[],"responses":{"200":{"description":"Returns version consistency status between app and changelog","content":{"application/json":{"schema":{"type":"object","properties":{"current":{"type":"object","properties":{"version":{"type":"string"},"apiVersion":{"type":"string"},"releaseId":{"type":"string"}}},"changelog":{"type":"object","properties":{"version":{"type":"string"},"date":{"type":"string"},"changes":{"type":"number"}}},"status":{"type":"string","enum":["in_sync","app_ahead","changelog_ahead"]},"message":{"type":"string"}}}}}}},"summary":"Get version synchronization status","tags":["Changelog"]}},"/api/v1/changelog/versions":{"get":{"description":"Lists every version captured in the changelog along with release dates so clients can build release timelines.","operationId":"All Versions","parameters":[],"responses":{"200":{"description":"Returns list of all versions in the changelog","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"version":{"type":"string","example":"0.8.0"},"date":{"type":"string","example":"2024-01-15"},"current":{"type":"boolean","description":"Whether this is the current app version"}}}}}}}},"summary":"Get all versions from changelog","tags":["Changelog"]}},"/api/v1/changelog/history-migration":{"get":{"description":"Public rollout status only. Subscription eligibility and history rights are checked on each historical request. Existing v1 integrations remain available; no sunset date is announced.","operationId":"History Migration Availability","parameters":[],"responses":{"200":{"description":"Current rollout status, migration links and coexistence policy"}},"summary":"Check retained-history migration availability and download the migration kit","tags":["Changelog"]}},"/api/v1/options/backtests/strategies":{"get":{"operationId":"BacktestsController_strategies","parameters":[],"responses":{"200":{"description":"Scope, schedules, execution assumptions, limits, templates and request schema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestStrategies"}}}},"401":{"description":"Invalid or expired authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"402":{"description":"An active API key or supported payment authentication is required."},"403":{"description":"Account identity or subscription history entitlement is insufficient.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"404":{"description":"Unknown, expired or inaccessible job, or backtesting is disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"429":{"description":"Request-rate limit or capacity exceeded. One outstanding job per account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"503":{"description":"Temporarily unavailable. Retry uncertain submission with the same Idempotency-Key and body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}}},"security":[{"X-API-Key":[]}],"summary":"Backtester capabilities and built-in option leg templates","tags":["Options Backtests"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/options/backtests":{"post":{"description":"Queues an account-owned research simulation. Deribit BTC/ETH inverse and BTC, ETH, SOL, XRP, AVAX, TRX and HYPE USDC options; choose one product and collateral per job (see strategies discovery). Shared capital/margin; up to 365 days, 8 components and 24 legs. Start/end and entries are UTC whole hours; expiry_days targets 08:00 UTC on an offset calendar date. Optional expiry_selection=nearest_listed chooses the closest expiry observed at entry; default exact is unchanged. End must be at least one hour in the past. Minute simulation and hourly chart reporting are defaults. L1 prices and displayed size constrain all-or-none entries. Research margin is not historical exchange margin. Responses are unwrapped JSON, without data/meta. Download results promptly: retention is at most 24 hours and recent-result storage is bounded.","operationId":"BacktestsController_submit","parameters":[{"name":"idempotency-key","required":true,"in":"header","schema":{"type":"string"}},{"name":"Idempotency-Key","in":"header","description":"Stable client-generated request key, 8–128 URL-safe characters. Reuse on an uncertain submission.","required":false,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestRequest"},"examples":{"weekly_short_daily_long":{"summary":"Shared capital, weekly short/daily long straddle. Fee rates are illustrative.","value":{"exchange":"deribit","currency":"BTC","start":"2026-09-04T08:00:00Z","end":"2026-09-05T09:00:00Z","initial_capital":2,"capital_model":"shared","margin_model":"research_stress_v1","resolution":"1m","equity_interval":"1h","execution_model":"bid_ask","fees":{"trade_rate":0.0003,"trade_premium_cap":0.125,"settlement_rate":0.00015,"settlement_premium_cap":0.125},"slippage_bps":0,"missing_entry_policy":"fail","components":[{"id":"weekly_short","first_entry_at":"2026-09-04T08:00:00Z","roll_every_days":7,"expiry_days":7,"legs":[{"id":"call","option_type":"C","side":"sell","quantity":0.1,"strike_rank":1,"selection":{"kind":"atm"}},{"id":"put","option_type":"P","side":"sell","quantity":0.1,"strike_rank":1,"selection":{"kind":"atm"}}]},{"id":"daily_long","first_entry_at":"2026-09-04T08:00:00Z","roll_every_days":1,"expiry_days":1,"legs":[{"id":"call","option_type":"C","side":"buy","quantity":0.1,"strike_rank":1,"selection":{"kind":"atm"}},{"id":"put","option_type":"P","side":"buy","quantity":0.1,"strike_rank":1,"selection":{"kind":"atm"}}]}]}}}}}},"responses":{"202":{"description":"Accepted job; poll status before retrieving the result. Idempotent retries return the existing state.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestJob"},"example":{"job_id":"bt_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","status":"queued","progress":0,"engine_version":"shared-options-v1.9","build_sha":null,"submitted_at":"2026-09-16T08:00:00.000Z","expires_at":"2026-09-17T08:00:00.000Z"}}}},"400":{"description":"Invalid body, schedule, date range or idempotency key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"401":{"description":"Invalid or expired authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"402":{"description":"An active API key or supported payment authentication is required."},"403":{"description":"Account identity or subscription history entitlement is insufficient.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"404":{"description":"Unknown, expired or inaccessible job, or backtesting is disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"409":{"description":"Idempotency key already used with different settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"429":{"description":"Request-rate limit or capacity exceeded. One outstanding job per account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"503":{"description":"Temporarily unavailable. Retry uncertain submission with the same Idempotency-Key and body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}}},"security":[{"X-API-Key":[]}],"summary":"Queue a historical options portfolio backtest","tags":["Options Backtests"]}},"/api/v1/options/backtests/{id}":{"get":{"operationId":"BacktestsController_status","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","pattern":"^bt_[a-f0-9]{64}$"},"description":"Account-owned job_id returned by submission."}],"responses":{"200":{"description":"Current state; failed/cancelled jobs carry a structured error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestJob"}}}},"401":{"description":"Invalid or expired authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"402":{"description":"An active API key or supported payment authentication is required."},"403":{"description":"Account identity or subscription history entitlement is insufficient.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"404":{"description":"Unknown, expired or inaccessible job, or backtesting is disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"429":{"description":"Request-rate limit or capacity exceeded. One outstanding job per account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"503":{"description":"Temporarily unavailable. Retry uncertain submission with the same Idempotency-Key and body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}}},"security":[{"X-API-Key":[]}],"summary":"Backtest job state and progress","tags":["Options Backtests"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/options/backtests/{id}/result":{"get":{"operationId":"BacktestsController_result","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","pattern":"^bt_[a-f0-9]{64}$"}},{"name":"offsets","required":false,"in":"query","description":"URL-encoded JSON object of compact section offsets. Each section returns its own next_offset.","schema":{"example":"{\"executions\":20}","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Compact section page size, 1–50 (default 20). The byte budget can reduce returned counts; follow next_offset.","schema":{"type":"number"}},{"name":"equity_interval","required":false,"in":"query","description":"Read-time downsampling only; does not rerun or synthesize points.","schema":{"enum":["1m","1h","4h","1d"],"type":"string"}},{"name":"format","required":false,"in":"query","description":"Default full. Compact paginates arrays; inspect result.view.","schema":{"enum":["full","compact"],"type":"string"}}],"responses":{"200":{"description":"Unwrapped job_id and result. Amounts are in collateral currency. Inspect termination, completed_through and data_quality.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestResultResponse"}}}},"401":{"description":"Invalid or expired authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"402":{"description":"An active API key or supported payment authentication is required."},"403":{"description":"Account identity or subscription history entitlement is insufficient.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"404":{"description":"Unknown, expired or inaccessible job, or backtesting is disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"409":{"description":"No successful result; inspect job status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"429":{"description":"Request-rate limit or capacity exceeded. One outstanding job per account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"503":{"description":"Temporarily unavailable. Retry uncertain submission with the same Idempotency-Key and body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}}},"security":[{"X-API-Key":[]}],"summary":"Combined performance, full equity curve and individual executions","tags":["Options Backtests"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"offsets":{"example":"{\"executions\":20}","type":"string","description":"URL-encoded JSON object of compact section offsets. Each section returns its own next_offset."},"limit":{"type":"number","description":"Compact section page size, 1–50 (default 20). The byte budget can reduce returned counts; follow next_offset."},"equity_interval":{"enum":["1m","1h","4h","1d"],"type":"string","description":"Read-time downsampling only; does not rerun or synthesize points."},"format":{"enum":["full","compact"],"type":"string","description":"Default full. Compact paginates arrays; inspect result.view."}}}}}}}},"/api/v1/options/backtests/{id}/cancel":{"post":{"operationId":"BacktestsController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string","pattern":"^bt_[a-f0-9]{64}$"}}],"responses":{"202":{"description":"Cooperative cancellation requested. Poll until terminal; completed jobs remain completed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestJob"}}}},"401":{"description":"Invalid or expired authentication.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"402":{"description":"An active API key or supported payment authentication is required."},"403":{"description":"Account identity or subscription history entitlement is insufficient.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"404":{"description":"Unknown, expired or inaccessible job, or backtesting is disabled.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"429":{"description":"Request-rate limit or capacity exceeded. One outstanding job per account.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}},"503":{"description":"Temporarily unavailable. Retry uncertain submission with the same Idempotency-Key and body.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BacktestHttpError"}}}}},"security":[{"X-API-Key":[]}],"summary":"Request cancellation of an account-owned backtest","tags":["Options Backtests"]}},"/oauth/login":{"get":{"operationId":"OAuthLoginController_showLoginPage","parameters":[],"responses":{"200":{"description":""}},"tags":["OAuthLogin"]},"post":{"operationId":"OAuthLoginController_handleLogin","parameters":[],"responses":{"201":{"description":""}},"tags":["OAuthLogin"]}},"/oauth/revoke":{"post":{"operationId":"OAuthRevocationController_revoke","parameters":[],"responses":{"200":{"description":""}},"tags":["OAuthRevocation"]}},"/.well-known/oauth-protected-resource":{"get":{"operationId":"McpOAuthController_getProtectedResourceMetadata","parameters":[],"responses":{"200":{"description":""}},"tags":["McpOAuth"]}},"/.well-known/oauth-authorization-server":{"get":{"operationId":"McpOAuthController_getAuthorizationServerMetadata","parameters":[],"responses":{"200":{"description":""}},"tags":["McpOAuth"]}},"/oauth/register":{"post":{"operationId":"McpOAuthController_registerClient","parameters":[],"responses":{"201":{"description":"RFC 7591 registration metadata. Confidential clients receive a generated secret; public clients do not.","headers":{"Cache-Control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"type":"object","required":["client_id","client_id_issued_at","redirect_uris","grant_types","response_types","token_endpoint_auth_method"],"properties":{"client_name":{"type":"string"},"redirect_uris":{"type":"array","items":{"type":"string"},"description":"Approved callbacks; exact matches required.","minItems":1},"grant_types":{"type":"array","items":{"type":"string"},"description":"Anonymous clients: authorization_code and/or refresh_token; both are the default."},"response_types":{"type":"array","items":{"type":"string"},"description":"Anonymous clients: code only (the default)."},"token_endpoint_auth_method":{"type":"string","enum":["none","client_secret_post","client_secret_basic"],"default":"none","description":"client_secret_basic requires authenticated registration. Omission defaults to none."},"scope":{"type":"string","description":"Optional space-separated mcp:tools and offline_access scopes."},"client_id":{"type":"string","description":"Generated automatically; no shared ID needs provisioning."},"client_id_issued_at":{"type":"integer","description":"Unix seconds."},"client_secret":{"type":"string","description":"Confidential clients only. Store securely; send at token exchange and refresh."},"client_secret_expires_at":{"type":"integer","enum":[0],"description":"Confidential clients only; 0 means no scheduled expiry."}}}}}},"400":{"description":"invalid_redirect_uri or invalid_client_metadata"},"401":{"description":"invalid_token: a supplied registration credential was invalid"},"429":{"description":"Registration limit reached; wait for Retry-After.","headers":{"Retry-After":{"schema":{"type":"integer"}}}},"500":{"description":"Registration could not be persisted. No successful registration is returned."},"503":{"description":"Registration temporarily unavailable."}},"tags":["McpOAuth"],"security":[],"summary":"Register an MCP OAuth client","description":"Registration is separate from user authorization. No API key is required for none or client_secret_post clients. All redirect URIs must be approved: exact configured HTTPS callbacks or HTTP localhost/127.0.0.1 without userinfo. Anonymous grants are authorization_code/refresh_token and response type code. Optional supplied registration credentials must validate; authenticated clients may also use client_secret_basic. Every authorization requires PKCE S256 and the user signs in with their Laevitas API key. Claude users should select Sign in now and Register automatically, with no custom headers or manually entered credentials. Keep confidential registration responses private; do not log client_secret.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["redirect_uris"],"properties":{"client_name":{"type":"string"},"redirect_uris":{"type":"array","items":{"type":"string"},"description":"Approved callbacks; exact matches required.","minItems":1},"grant_types":{"type":"array","items":{"type":"string"},"description":"Anonymous clients: authorization_code and/or refresh_token; both are the default."},"response_types":{"type":"array","items":{"type":"string"},"description":"Anonymous clients: code only (the default)."},"token_endpoint_auth_method":{"type":"string","enum":["none","client_secret_post","client_secret_basic"],"default":"none","description":"client_secret_basic requires authenticated registration. Omission defaults to none."},"scope":{"type":"string","description":"Optional space-separated mcp:tools and offline_access scopes."}}},"examples":{"claude":{"summary":"Hosted connector automatic registration (no API key)","value":{"client_name":"Claude","redirect_uris":["https://claude.ai/api/mcp/auth_callback"],"grant_types":["authorization_code","refresh_token"],"response_types":["code"],"token_endpoint_auth_method":"client_secret_post","scope":"mcp:tools offline_access"}},"public":{"summary":"Public client (no secret)","value":{"redirect_uris":["http://127.0.0.1:3000/callback"],"token_endpoint_auth_method":"none"}}}}}}}},"/oauth/authorize":{"get":{"operationId":"McpOAuthController_authorize","parameters":[{"name":"client_id","in":"query","required":true,"description":"Registered client ID.","schema":{"type":"string"}},{"name":"redirect_uri","in":"query","required":true,"description":"Exact registered callback URI.","schema":{"type":"string"}},{"name":"response_type","in":"query","required":true,"description":"code","schema":{"type":"string"}},{"name":"code_challenge","in":"query","required":true,"description":"Unpadded base64url SHA-256 of the verifier (43 characters).","schema":{"type":"string"}},{"name":"code_challenge_method","in":"query","required":true,"description":"S256","schema":{"type":"string"}},{"name":"scope","in":"query","required":false,"description":"Space-separated registered scopes.","schema":{"type":"string"}},{"name":"state","in":"query","required":false,"description":"Client-generated value used to correlate the callback; strongly recommended.","schema":{"type":"string"}},{"name":"resource","in":"query","required":false,"description":"https://apiv2.laevitas.ch/api/v1/mcp","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["McpOAuth"],"description":"Start user authorization. Every client (public or confidential) must use PKCE S256. The callback must exactly match one registered for the client."}},"/oauth/callback":{"get":{"operationId":"McpOAuthController_handleProviderCallback","parameters":[],"responses":{"200":{"description":""}},"tags":["McpOAuth"]}},"/oauth/token":{"post":{"operationId":"McpOAuthController_exchangeToken","parameters":[],"responses":{"200":{"description":""}},"tags":["McpOAuth"],"description":"Exchange an authorization code or refresh a token using form encoding. client_secret_post clients include their generated client_secret for both grants. The original PKCE verifier is required for authorization-code exchange.","requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["grant_type"],"properties":{"grant_type":{"type":"string","enum":["authorization_code","refresh_token"]},"client_id":{"type":"string","description":"Required in the form for none/client_secret_post; supplied in HTTP Basic credentials for client_secret_basic."},"client_secret":{"type":"string","description":"Required for client_secret_post; omit for public clients."},"code":{"type":"string","description":"Required for authorization_code."},"code_verifier":{"type":"string","description":"Original PKCE verifier; required for authorization_code."},"redirect_uri":{"type":"string","description":"Original callback for authorization_code."},"refresh_token":{"type":"string","description":"Required for refresh_token."}}}}}}}},"/api/v1/playground/top-pairs":{"get":{"description":"Powers the WebSocket playground pair picker. Returns the N most active instruments per exchange for the chosen market, computed from `v2_{market}_ohlcvt` over the last 24h. Requires an API key like any other endpoint — protected by the global `ApiKeyGuard` + rate limiter so the playground page can't be scraped anonymously. Server-side cached 1h (rankings barely shift hour-to-hour).","operationId":"PlaygroundController_getTopPairs","parameters":[{"name":"market","required":true,"in":"query","schema":{"enum":["futures","perpetuals","options","spot","predictions"],"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":20,"default":5}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"market":{"type":"string","enum":["futures","perpetuals","options","spot","predictions"]},"limit":{"type":"integer"},"exchanges":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"instrument_name":{"type":"string"},"volume_24h":{"type":"number"},"last_price":{"type":"number"}}}}}}}}}}},"summary":"Top instruments by 24h volume per exchange","tags":["Playground"]}},"/api/v1/perpetuals/instrument-history/discovery":{"get":{"description":"Discover contracts in perpetuals/instrument-history and futures/instrument-history, including contracts now expired. Both modes require exchange and the exact historical currency label. instruments additionally requires a UTC calendar day and reports observation bounds within that day. coverage additionally requires the exact case-sensitive instrument name and reports its earliest/latest observations for the selected currency. Different currency labels and letter-case variants are not combined. This is not the active catalog, modern ticker coverage or a historical trading-status record. Bounds do not certify uninterrupted history or original publication time. Follow meta.next_cursor for instruments. Retrieval parameters request only the first observed UTC day within the returned bounds, not an entire multi-year history. Bounds may describe dates outside your subscription; reading values still requires the applicable access. Both modes require an active subscription and share the history request allowance. No x402 access.\n\nObservation labels for the exact currency and contract, within the requested UTC day or over all retained dates for that selector as stated by meta.bounds_scope. Not listing, expiry or original availability times.\n\nOne entry per exact case-sensitive contract name. Resolutions in meta.sampling apply to the linked observations, not this result. No fixed native cadence is certified.\n\nBoth modes require exchange and currency. Currency labels are uppercased; instrument_name is case-sensitive. mode=instruments additionally requires date (YYYY-MM-DD); limit defaults to 100, maximum 500. Follow meta.next_cursor with identical product, exchange, currency, date and limit. mode=coverage additionally requires instrument_name and does not accept date, limit or cursor. Retrieval uses native resolution and explicit inclusive bounds limited to the first observed UTC day; it is a sample request, not the full coverage range. Follow the history response pagination separately and choose explicit small windows to retrieve more history. The history route selects the exact contract over those dates without a currency filter.\n\nUTC observation bounds; no market prices, quantities or analytics are returned.\n\nPerpetual contracts observed under the selected currency. Supported venues are the same as perpetuals/instrument-history. Accepted venues can have empty retained history. Current catalog membership is not required; no historical trading-status claim.\n\nBounds apply only to perpetuals.instrument_history with the exact historical currency label. They do not combine currency aliases or describe modern ticker or candle coverage. Empty data means no matching observations were found, not that a contract never existed. A failed read returns an error, not empty coverage.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.history_discovery. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"DerivativesHistoryDiscoveryController_perpetuals","parameters":[{"name":"mode","required":true,"in":"query","schema":{"type":"string","enum":["instruments","coverage"],"description":"instruments finds contract names observed on a UTC day. coverage reports retained observation bounds for one exact currency and contract."}},{"name":"exchange","required":true,"in":"query","schema":{"type":"string","enum":["binance","bitmex","deribit","okx","dydx","huobi","kraken","bybit","bitget","aevo","blitz","coinbase","bitfinex","hyperliquid","paradex","vertex"],"description":"Venue supported by the corresponding instrument-history route. Acceptance does not establish that matching history exists."}},{"name":"currency","required":true,"in":"query","schema":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[A-Za-z0-9_]+$","description":"Required in both modes. Exact historical currency label, for example BTC. Currency aliases are not expanded. Contracts with different quote currencies or multipliers may share this label; their names stay separate."}},{"name":"date","required":false,"in":"query","schema":{"description":"Required only for instruments: YYYY-MM-DD UTC day to search, not an expiry or a trading-status date.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"instrument_name","required":false,"in":"query","schema":{"description":"Required only for coverage. Exact, case-sensitive contract name copied from instruments; letter-case variants stay separate.","type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_.:/-]+$"}},{"name":"limit","required":false,"in":"query","schema":{"description":"instruments page size, default 100, maximum 500. Not accepted for coverage.","type":"integer","minimum":1,"maximum":500}},{"name":"cursor","required":false,"in":"query","schema":{"description":"instruments continuation from meta.next_cursor; keep the same product, exchange, currency, date and limit.","type":"string","minLength":1,"maxLength":1024}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"instrument_name":{"type":"string"},"first_observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"First observed timestamp for the declared currency and bounds_scope; not listing or publication time."},"last_observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Last observed timestamp for the declared currency and bounds_scope; not expiry or delisting time."},"retrieval":{"type":"object","properties":{"path":{"type":"string","enum":["/api/v1/perpetuals/instrument-history","/api/v1/futures/instrument-history"]},"parameters":{"type":"object","properties":{"exchange":{"type":"string","enum":["binance","bitmex","deribit","okx","dydx","huobi","kraken","bybit","bitget","aevo","blitz","coinbase","bitfinex","hyperliquid","paradex","vertex"]},"instrument_name":{"type":"string"},"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"resolution":{"type":"string","enum":["native"]},"projection":{"type":"string","enum":["full"]},"page":{"type":"number","enum":[1]},"limit":{"type":"number","enum":[100]}},"required":["exchange","instrument_name","start","end","resolution","projection","page","limit"],"additionalProperties":false}},"required":["path","parameters"],"additionalProperties":false}},"required":["instrument_name","first_observed_at","last_observed_at","retrieval"],"additionalProperties":false}},"meta":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["perpetuals.instrument_observations","futures.instrument_observations"],"description":"Matches dataset_id in the corresponding history response."},"definition_id":{"type":"string","enum":["perpetuals.instrument_history","futures.instrument_history"]},"instrument_type":{"type":"string","enum":["perpetual","future"]},"mode":{"type":"string","enum":["instruments","coverage"]},"exchange":{"type":"string","enum":["binance","bitmex","deribit","okx","dydx","huobi","kraken","bybit","bitget","aevo","blitz","coinbase","bitfinex","hyperliquid","paradex","vertex"]},"currency":{"type":"string"},"date":{"nullable":true,"type":"string"},"bounds_scope":{"type":"string","enum":["requested_utc_day","currency_instrument"],"description":"Both scopes require the exact historical currency label. currency_instrument covers all retained dates under that label only; other currency labels are not included."},"next_cursor":{"nullable":true,"type":"string"},"completeness":{"type":"string","enum":["not_certified"]},"sampling":{"type":"object","properties":{"kind":{"type":"string","enum":["point_in_time_observations"]},"native_interval_seconds":{"type":"string","nullable":true,"enum":[null],"description":"No single native interval is certified over these bounds."},"supported_resolutions":{"type":"array","items":{"type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}},"meaning":{"type":"string"}},"required":["kind","native_interval_seconds","supported_resolutions","meaning"],"additionalProperties":false}},"required":["dataset_id","definition_id","instrument_type","mode","exchange","currency","date","bounds_scope","next_cursor","completeness","sampling"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"Find historical perpetual contracts and observation bounds","tags":["Derivative Instrument History"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["instruments","coverage"],"description":"instruments finds contract names observed on a UTC day. coverage reports retained observation bounds for one exact currency and contract."},"exchange":{"type":"string","enum":["binance","bitmex","deribit","okx","dydx","huobi","kraken","bybit","bitget","aevo","blitz","coinbase","bitfinex","hyperliquid","paradex","vertex"],"description":"Venue supported by the corresponding instrument-history route. Acceptance does not establish that matching history exists."},"currency":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[A-Za-z0-9_]+$","description":"Required in both modes. Exact historical currency label, for example BTC. Currency aliases are not expanded. Contracts with different quote currencies or multipliers may share this label; their names stay separate."},"date":{"description":"Required only for instruments: YYYY-MM-DD UTC day to search, not an expiry or a trading-status date.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"instrument_name":{"description":"Required only for coverage. Exact, case-sensitive contract name copied from instruments; letter-case variants stay separate.","type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_.:/-]+$"},"limit":{"description":"instruments page size, default 100, maximum 500. Not accepted for coverage.","type":"integer","minimum":1,"maximum":500},"cursor":{"description":"instruments continuation from meta.next_cursor; keep the same product, exchange, currency, date and limit.","type":"string","minLength":1,"maxLength":1024}},"required":["mode","exchange","currency"]}}}}}},"/api/v1/futures/instrument-history/discovery":{"get":{"description":"Discover contracts in perpetuals/instrument-history and futures/instrument-history, including contracts now expired. Both modes require exchange and the exact historical currency label. instruments additionally requires a UTC calendar day and reports observation bounds within that day. coverage additionally requires the exact case-sensitive instrument name and reports its earliest/latest observations for the selected currency. Different currency labels and letter-case variants are not combined. This is not the active catalog, modern ticker coverage or a historical trading-status record. Bounds do not certify uninterrupted history or original publication time. Follow meta.next_cursor for instruments. Retrieval parameters request only the first observed UTC day within the returned bounds, not an entire multi-year history. Bounds may describe dates outside your subscription; reading values still requires the applicable access. Both modes require an active subscription and share the history request allowance. No x402 access.\n\nObservation labels for the exact currency and contract, within the requested UTC day or over all retained dates for that selector as stated by meta.bounds_scope. Not listing, expiry or original availability times.\n\nOne entry per exact case-sensitive contract name. Resolutions in meta.sampling apply to the linked observations, not this result. No fixed native cadence is certified.\n\nBoth modes require exchange and currency. Currency labels are uppercased; instrument_name is case-sensitive. mode=instruments additionally requires date (YYYY-MM-DD); limit defaults to 100, maximum 500. Follow meta.next_cursor with identical product, exchange, currency, date and limit. mode=coverage additionally requires instrument_name and does not accept date, limit or cursor. Retrieval uses native resolution and explicit inclusive bounds limited to the first observed UTC day; it is a sample request, not the full coverage range. Follow the history response pagination separately and choose explicit small windows to retrieve more history. The history route selects the exact contract over those dates without a currency filter.\n\nUTC observation bounds; no market prices, quantities or analytics are returned.\n\nDated futures observed under the selected currency, including contracts now expired. Supported venues: kraken, deribit, okx, bybit, binance, bitget, bitmex, huobi. Current catalog membership is not required; no historical trading-status claim.\n\nBounds apply only to futures.instrument_history with the exact historical currency label. They do not combine currency aliases or describe modern ticker or candle coverage. Empty data means no matching observations were found, not that a contract never existed. A failed read returns an error, not empty coverage.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.history_discovery. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"DerivativesHistoryDiscoveryController_futures","parameters":[{"name":"mode","required":true,"in":"query","schema":{"type":"string","enum":["instruments","coverage"],"description":"instruments finds contract names observed on a UTC day. coverage reports retained observation bounds for one exact currency and contract."}},{"name":"exchange","required":true,"in":"query","schema":{"type":"string","enum":["kraken","deribit","okx","bybit","binance","bitget","bitmex","huobi"]}},{"name":"currency","required":true,"in":"query","schema":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[A-Za-z0-9_]+$","description":"Required in both modes. Exact historical currency label, for example BTC. Currency aliases are not expanded. Contracts with different quote currencies or multipliers may share this label; their names stay separate."}},{"name":"date","required":false,"in":"query","schema":{"description":"Required only for instruments: YYYY-MM-DD UTC day to search, not an expiry or a trading-status date.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"instrument_name","required":false,"in":"query","schema":{"description":"Required only for coverage. Exact, case-sensitive contract name copied from instruments; letter-case variants stay separate.","type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_.:/-]+$"}},{"name":"limit","required":false,"in":"query","schema":{"description":"instruments page size, default 100, maximum 500. Not accepted for coverage.","type":"integer","minimum":1,"maximum":500}},{"name":"cursor","required":false,"in":"query","schema":{"description":"instruments continuation from meta.next_cursor; keep the same product, exchange, currency, date and limit.","type":"string","minLength":1,"maxLength":1024}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"instrument_name":{"type":"string"},"first_observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"First observed timestamp for the declared currency and bounds_scope; not listing or publication time."},"last_observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Last observed timestamp for the declared currency and bounds_scope; not expiry or delisting time."},"retrieval":{"type":"object","properties":{"path":{"type":"string","enum":["/api/v1/perpetuals/instrument-history","/api/v1/futures/instrument-history"]},"parameters":{"type":"object","properties":{"exchange":{"type":"string","enum":["binance","bitmex","deribit","okx","dydx","huobi","kraken","bybit","bitget","aevo","blitz","coinbase","bitfinex","hyperliquid","paradex","vertex"]},"instrument_name":{"type":"string"},"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"resolution":{"type":"string","enum":["native"]},"projection":{"type":"string","enum":["full"]},"page":{"type":"number","enum":[1]},"limit":{"type":"number","enum":[100]}},"required":["exchange","instrument_name","start","end","resolution","projection","page","limit"],"additionalProperties":false}},"required":["path","parameters"],"additionalProperties":false}},"required":["instrument_name","first_observed_at","last_observed_at","retrieval"],"additionalProperties":false}},"meta":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["perpetuals.instrument_observations","futures.instrument_observations"],"description":"Matches dataset_id in the corresponding history response."},"definition_id":{"type":"string","enum":["perpetuals.instrument_history","futures.instrument_history"]},"instrument_type":{"type":"string","enum":["perpetual","future"]},"mode":{"type":"string","enum":["instruments","coverage"]},"exchange":{"type":"string","enum":["binance","bitmex","deribit","okx","dydx","huobi","kraken","bybit","bitget","aevo","blitz","coinbase","bitfinex","hyperliquid","paradex","vertex"]},"currency":{"type":"string"},"date":{"nullable":true,"type":"string"},"bounds_scope":{"type":"string","enum":["requested_utc_day","currency_instrument"],"description":"Both scopes require the exact historical currency label. currency_instrument covers all retained dates under that label only; other currency labels are not included."},"next_cursor":{"nullable":true,"type":"string"},"completeness":{"type":"string","enum":["not_certified"]},"sampling":{"type":"object","properties":{"kind":{"type":"string","enum":["point_in_time_observations"]},"native_interval_seconds":{"type":"string","nullable":true,"enum":[null],"description":"No single native interval is certified over these bounds."},"supported_resolutions":{"type":"array","items":{"type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}},"meaning":{"type":"string"}},"required":["kind","native_interval_seconds","supported_resolutions","meaning"],"additionalProperties":false}},"required":["dataset_id","definition_id","instrument_type","mode","exchange","currency","date","bounds_scope","next_cursor","completeness","sampling"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"Find historical dated futures and observation bounds","tags":["Derivative Instrument History"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["instruments","coverage"],"description":"instruments finds contract names observed on a UTC day. coverage reports retained observation bounds for one exact currency and contract."},"exchange":{"type":"string","enum":["kraken","deribit","okx","bybit","binance","bitget","bitmex","huobi"]},"currency":{"type":"string","minLength":1,"maxLength":32,"pattern":"^[A-Za-z0-9_]+$","description":"Required in both modes. Exact historical currency label, for example BTC. Currency aliases are not expanded. Contracts with different quote currencies or multipliers may share this label; their names stay separate."},"date":{"description":"Required only for instruments: YYYY-MM-DD UTC day to search, not an expiry or a trading-status date.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"instrument_name":{"description":"Required only for coverage. Exact, case-sensitive contract name copied from instruments; letter-case variants stay separate.","type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_.:/-]+$"},"limit":{"description":"instruments page size, default 100, maximum 500. Not accepted for coverage.","type":"integer","minimum":1,"maximum":500},"cursor":{"description":"instruments continuation from meta.next_cursor; keep the same product, exchange, currency, date and limit.","type":"string","minLength":1,"maxLength":1024}},"required":["mode","exchange","currency"]}}}}}},"/api/v1/options/instrument-history/discovery":{"get":{"description":"Discover contracts in options/instrument-history, including contracts now expired. instruments requires a venue, currency and UTC calendar day and reports observation bounds within that day. coverage requires a venue and exact instrument and reports its earliest/latest retained observations. This is not the active options catalog, ticker-history coverage, or a record of when a contract was tradable. Bounds do not certify uninterrupted history or original publication time. Native observation spacing varies; supported granularities filter UTC times and do not create missing observations or candles. Follow meta.next_cursor for instruments and use each result’s retrieval parameters for the corresponding history. Coverage can describe dates outside your subscription; reading values still requires the applicable access. Both modes require an active subscription and share the history request allowance. No x402 access.\n\nObservation labels for the exact returned contract, within the requested UTC day or over its whole retained history as stated by meta.bounds_scope. Not listing, expiry or original availability times.\n\nOne entry per exact contract. Resolutions listed in meta.sampling apply to the linked observations, not to this discovery result. No fixed native cadence is certified.\n\nmode=instruments requires exchange, currency and date (YYYY-MM-DD); currency is the exact contract-family prefix before the first hyphen (BTC, BTC_USDC and BTC_USD stay separate), not a base-asset union across settlement currencies. limit defaults to 100 and is at most 500. Continue with meta.next_cursor and identical selectors/page size. mode=coverage requires exchange and instrument_name only. Retrieval parameters use explicit inclusive bounds and native resolution; follow the history response pagination separately.\n\nUTC observation bounds; no market prices, quantities or analytics are returned.\n\nDeribit, OKX, Binance, Bybit and Paradex contracts observed in retained options history, including contracts now expired. Current active-catalog membership is not required. No historical trading-status claim.\n\nBounds apply only to options.instrument_history. An empty data array means no matching retained observations were found, not that a contract never existed. Failed reads return an error, not empty coverage.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.history_discovery. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"OptionsHistoryDiscoveryController_read","parameters":[{"name":"mode","required":true,"in":"query","schema":{"type":"string","enum":["instruments","coverage"],"description":"instruments finds contracts observed on a UTC day, including contracts now expired. coverage inspects all retained dates for one exact contract."}},{"name":"exchange","required":true,"in":"query","schema":{"type":"string","enum":["deribit","okx","binance","bybit","paradex"],"description":"Venue supported by options/instrument-history. This lookup does not describe ticker-history or trade candles."}},{"name":"currency","required":false,"in":"query","schema":{"description":"Required only for instruments. Exact contract-family prefix before the first hyphen, for example BTC, BTC_USDC or BTC_USD. Distinct prefixes are not combined.","type":"string","minLength":1,"maxLength":32,"pattern":"^[A-Za-z0-9_]+$"}},{"name":"date","required":false,"in":"query","schema":{"description":"Required only for instruments: YYYY-MM-DD, the UTC day to search. Not an expiry date or proof of tradability.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"}},{"name":"instrument_name","required":false,"in":"query","schema":{"description":"Required only for coverage. Exact contract name, case-insensitive. Copy it from the instruments result.","type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_.:/-]+$"}},{"name":"limit","required":false,"in":"query","schema":{"description":"instruments page size, default 100, maximum 500. Not accepted for coverage.","type":"integer","minimum":1,"maximum":500}},{"name":"cursor","required":false,"in":"query","schema":{"description":"instruments continuation from meta.next_cursor; keep the same exchange, currency, date and limit.","type":"string","minLength":1,"maxLength":1024}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"instrument_name":{"type":"string"},"first_observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"First observed timestamp in the declared bounds_scope; not a listing or publication time."},"last_observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Last observed timestamp in the declared bounds_scope; not an expiry or delisting time."},"retrieval":{"type":"object","properties":{"path":{"type":"string","enum":["/api/v1/options/instrument-history"]},"parameters":{"type":"object","properties":{"exchange":{"type":"string","enum":["deribit","okx","binance","bybit","paradex"]},"instrument_name":{"type":"string"},"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"resolution":{"type":"string","enum":["native"]},"projection":{"type":"string","enum":["full"]},"page":{"type":"number","enum":[1]},"limit":{"type":"number","enum":[100]}},"required":["exchange","instrument_name","start","end","resolution","projection","page","limit"],"additionalProperties":false}},"required":["path","parameters"],"additionalProperties":false}},"required":["instrument_name","first_observed_at","last_observed_at","retrieval"],"additionalProperties":false}},"meta":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["options.instrument_observations"],"description":"Matches dataset_id in the linked history response."},"definition_id":{"type":"string","enum":["options.instrument_history"],"description":"Product ID for the dataset definitions and historical inventory."},"mode":{"type":"string","enum":["instruments","coverage"]},"exchange":{"type":"string","enum":["deribit","okx","binance","bybit","paradex"]},"currency":{"nullable":true,"type":"string"},"date":{"nullable":true,"type":"string"},"bounds_scope":{"type":"string","enum":["requested_utc_day","whole_instrument"]},"next_cursor":{"nullable":true,"type":"string"},"completeness":{"type":"string","enum":["not_certified"]},"sampling":{"type":"object","properties":{"kind":{"type":"string","enum":["point_in_time_observations"]},"native_interval_seconds":{"type":"string","nullable":true,"enum":[null],"description":"No single native interval is certified for this contract over these bounds."},"supported_resolutions":{"type":"array","items":{"type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}},"meaning":{"type":"string"}},"required":["kind","native_interval_seconds","supported_resolutions","meaning"],"additionalProperties":false}},"required":["dataset_id","definition_id","mode","exchange","currency","date","bounds_scope","next_cursor","completeness","sampling"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"Find historical option contracts and their observation bounds","tags":["Options Instrument History"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"mode":{"type":"string","enum":["instruments","coverage"],"description":"instruments finds contracts observed on a UTC day, including contracts now expired. coverage inspects all retained dates for one exact contract."},"exchange":{"type":"string","enum":["deribit","okx","binance","bybit","paradex"],"description":"Venue supported by options/instrument-history. This lookup does not describe ticker-history or trade candles."},"currency":{"description":"Required only for instruments. Exact contract-family prefix before the first hyphen, for example BTC, BTC_USDC or BTC_USD. Distinct prefixes are not combined.","type":"string","minLength":1,"maxLength":32,"pattern":"^[A-Za-z0-9_]+$"},"date":{"description":"Required only for instruments: YYYY-MM-DD, the UTC day to search. Not an expiry date or proof of tradability.","type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},"instrument_name":{"description":"Required only for coverage. Exact contract name, case-insensitive. Copy it from the instruments result.","type":"string","minLength":1,"maxLength":256,"pattern":"^[A-Za-z0-9_.:/-]+$"},"limit":{"description":"instruments page size, default 100, maximum 500. Not accepted for coverage.","type":"integer","minimum":1,"maximum":500},"cursor":{"description":"instruments continuation from meta.next_cursor; keep the same exchange, currency, date and limit.","type":"string","minLength":1,"maxLength":1024}},"required":["mode","exchange"]}}}}}},"/api/v1/market/summary-history":{"get":{"description":"Two legacy summary variants sharing one retained calculation. Samples observations rather than aggregating requested intervals. OI-weighted prices/funding/yield, source 24h volume, rolling 24h liquidations and hourly market-cap enrichment. Derivatives summary also adds aggregate spot realized volatility and truncates only the OI/volume ratio. Retained duplicates, revisions and missing observations are not completeness or original point-in-time certified. Eligible subscribers share the same history rights and limits across REST and MCP; x402 is not enabled.","operationId":"SummaryHistoryController_read","parameters":[{"name":"series","required":true,"in":"query","schema":{"type":"string","enum":["derivatives_summary","futures_alt_summary"],"description":"Both series summarize perpetual contracts. derivatives_summary adds aggregate spot realized volatility and the legacy truncated OI/volume ratio."}},{"name":"currency","required":true,"in":"query","schema":{"type":"string","pattern":"^[A-Z0-9][A-Z0-9_-]{0,31}$","description":"Normalized legacy underlying currency, e.g. BTC. Monetary totals are USD; this is not a reporting-currency selector."}},{"name":"start","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive ISO-8601 timestamp with timezone, truncated to seconds."}},{"name":"end","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive ISO-8601 timestamp, not an exclusive bound."}},{"name":"resolution","required":false,"in":"query","schema":{"default":"native","description":"UTC sample grid, not interval aggregation. Volume is the source 24h value; liquidations use a rolling 24h window.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"default":10,"description":"Rows per page; retained market-cap duplicates may produce more than one row per timestamp.","type":"integer","minimum":1,"maximum":1440}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["market.derivative_summary_observations"]},"series":{"type":"string","enum":["derivatives_summary","futures_alt_summary"]},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"availability":{"type":"object","properties":{"empty_reason":{"nullable":true,"type":"string","enum":["classification_unavailable"]},"coverage":{"type":"object","properties":{"source_id":{"type":"string","enum":["market.derivative_summary_observations"]},"exchange_supported":{"type":"string","nullable":true,"enum":[null]},"instrument_eligible":{"type":"string","nullable":true,"enum":[null]},"earliest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"latest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["source_id","exchange_supported","instrument_eligible","earliest_observed_at","latest_observed_at"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","enum":["unavailable"]},"certification":{"type":"string","nullable":true,"enum":[null]},"complete_from":{"type":"string","nullable":true,"enum":[null]},"complete_through":{"type":"string","nullable":true,"enum":[null]},"complete_from_inclusive":{"type":"boolean","enum":[true]},"complete_through_inclusive":{"type":"boolean","enum":[false]},"monotonic":{"type":"boolean","enum":[false]},"monotonic_boundary":{"type":"string","enum":["complete_through"]},"revisions_possible":{"type":"boolean","enum":[true]},"certified_at":{"type":"string","nullable":true,"enum":[null]},"updated_at":{"type":"string","nullable":true,"enum":[null]},"unavailable_reason":{"type":"string","enum":["not_supported"]},"scope":{"type":"object","properties":{"endpoint_id":{"type":"string","enum":["market.derivative_summary_observations"]},"source_ids":{"type":"array","items":{"type":"string"}},"exchange":{"nullable":true,"type":"string"},"instrument_name":{"nullable":true,"type":"string"},"currency":{"type":"string"}},"required":["endpoint_id","source_ids","exchange","instrument_name","currency"],"additionalProperties":false}},"required":["status","certification","complete_from","complete_through","complete_from_inclusive","complete_through_inclusive","monotonic","monotonic_boundary","revisions_possible","certified_at","updated_at","unavailable_reason","scope"],"additionalProperties":false}},"required":["empty_reason","coverage","completeness"],"additionalProperties":false},"count_basis":{"type":"string","enum":["rows"]}},"required":["total","items","page","total_pages","limit","availability","count_basis"],"additionalProperties":false},"items":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation timestamp, Unix milliseconds UTC."},"price":{"nullable":true,"description":"OI-weighted source price; legacy sum-of-prices fallback when total OI is non-positive. Source price convention is retained, not a new spot-index calculation.","type":"number"},"yield":{"nullable":true,"description":"OI-weighted source yield/APR, preserving the legacy source units.","type":"number"},"next_fr":{"nullable":true,"description":"OI-weighted announced next funding rate, preserving source units and null handling.","type":"number"},"open_interest":{"nullable":true,"description":"Sum of retained perpetual open interest, USD notional.","type":"number"},"volume":{"nullable":true,"description":"Sum of source rolling-24h perpetual volume, USD. Not turnover within the requested sample period.","type":"number"},"funding":{"nullable":true,"description":"OI-weighted current funding field; not a funding payment or a newly annualized rate.","type":"number"},"liquidations_long":{"nullable":true,"description":"Rolling 24h USD long liquidations, rounded to whole dollars from retained minute aggregate states.","type":"number"},"liquidations_short":{"nullable":true,"description":"Rolling 24h USD short liquidations, rounded to whole dollars from retained minute aggregate states.","type":"number"},"oi_volume24h":{"nullable":true,"description":"Dimensionless open-interest / rolling-24h-volume ratio. Derivatives summary truncates this ratio to three decimals; alt summary returns the legacy untruncated ratio, or zero for non-positive volume.","type":"number"},"market_cap":{"nullable":true,"description":"Hourly source market capitalization, USD; source join behavior is retained.","type":"number"},"rv":{"type":"object","properties":{"3":{"nullable":true,"type":"number"},"7":{"nullable":true,"type":"number"},"30":{"nullable":true,"type":"number"},"60":{"nullable":true,"type":"number"},"90":{"nullable":true,"type":"number"},"180":{"nullable":true,"type":"number"},"270":{"nullable":true,"type":"number"},"365":{"nullable":true,"type":"number"}},"additionalProperties":false,"description":"Aggregate spot realized volatility in percentage points, keyed by lookback days. Empty object if the page-bounded source has no matching UTC hour; unavailable properties are omitted."}},"required":["date","price","yield","next_fr","open_interest","volume","funding","liquidations_long","liquidations_short","oi_volume24h","market_cap","rv"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation timestamp, Unix milliseconds UTC."},"price":{"nullable":true,"description":"OI-weighted source price; legacy sum-of-prices fallback when total OI is non-positive. Source price convention is retained, not a new spot-index calculation.","type":"number"},"yield":{"nullable":true,"description":"OI-weighted source yield/APR, preserving the legacy source units.","type":"number"},"next_fr":{"nullable":true,"description":"OI-weighted announced next funding rate, preserving source units and null handling.","type":"number"},"open_interest":{"nullable":true,"description":"Sum of retained perpetual open interest, USD notional.","type":"number"},"volume":{"nullable":true,"description":"Sum of source rolling-24h perpetual volume, USD. Not turnover within the requested sample period.","type":"number"},"funding":{"nullable":true,"description":"OI-weighted current funding field; not a funding payment or a newly annualized rate.","type":"number"},"liquidations_long":{"nullable":true,"description":"Rolling 24h USD long liquidations, rounded to whole dollars from retained minute aggregate states.","type":"number"},"liquidations_short":{"nullable":true,"description":"Rolling 24h USD short liquidations, rounded to whole dollars from retained minute aggregate states.","type":"number"},"oi_volume24h":{"nullable":true,"description":"Dimensionless open-interest / rolling-24h-volume ratio. Derivatives summary truncates this ratio to three decimals; alt summary returns the legacy untruncated ratio, or zero for non-positive volume.","type":"number"},"market_cap":{"nullable":true,"description":"Hourly source market capitalization, USD; source join behavior is retained.","type":"number"}},"required":["date","price","yield","next_fr","open_interest","volume","funding","liquidations_long","liquidations_short","oi_volume24h","market_cap"],"additionalProperties":false}]}}},"required":["dataset_id","series","meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"Retained aggregate perpetual summary history","tags":["Market Summary History"]}},"/api/v1/historical/derivs/summary/{currency}":{"get":{"operationId":"LegacySummaryHistoryController_derivatives","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes that whole UTC day; omitted end includes tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not candle aggregation. Omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"One-based query page; omitted metadata retains the legacy route-specific default.","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Rows per page, default 10; maximum 1440.","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","minimum":0,"maximum":9007199254740991},"total_pages":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation timestamp, Unix milliseconds UTC."},"price":{"nullable":true,"description":"OI-weighted source price; legacy sum-of-prices fallback when total OI is non-positive. Source price convention is retained, not a new spot-index calculation.","type":"number"},"yield":{"nullable":true,"description":"OI-weighted source yield/APR, preserving the legacy source units.","type":"number"},"next_fr":{"nullable":true,"description":"OI-weighted announced next funding rate, preserving source units and null handling.","type":"number"},"open_interest":{"nullable":true,"description":"Sum of retained perpetual open interest, USD notional.","type":"number"},"volume":{"nullable":true,"description":"Sum of source rolling-24h perpetual volume, USD. Not turnover within the requested sample period.","type":"number"},"funding":{"nullable":true,"description":"OI-weighted current funding field; not a funding payment or a newly annualized rate.","type":"number"},"liquidations_long":{"nullable":true,"description":"Rolling 24h USD long liquidations, rounded to whole dollars from retained minute aggregate states.","type":"number"},"liquidations_short":{"nullable":true,"description":"Rolling 24h USD short liquidations, rounded to whole dollars from retained minute aggregate states.","type":"number"},"oi_volume24h":{"nullable":true,"description":"Dimensionless open-interest / rolling-24h-volume ratio. Derivatives summary truncates this ratio to three decimals; alt summary returns the legacy untruncated ratio, or zero for non-positive volume.","type":"number"},"market_cap":{"nullable":true,"description":"Hourly source market capitalization, USD; source join behavior is retained.","type":"number"},"rv":{"type":"object","properties":{"3":{"nullable":true,"type":"number"},"7":{"nullable":true,"type":"number"},"30":{"nullable":true,"type":"number"},"60":{"nullable":true,"type":"number"},"90":{"nullable":true,"type":"number"},"180":{"nullable":true,"type":"number"},"270":{"nullable":true,"type":"number"},"365":{"nullable":true,"type":"number"}},"additionalProperties":false,"description":"Aggregate spot realized volatility in percentage points, keyed by lookback days. Empty object if the page-bounded source has no matching UTC hour; unavailable properties are omitted."}},"required":["date","price","yield","next_fr","open_interest","volume","funding","liquidations_long","liquidations_short","oi_volume24h","market_cap","rv"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible derivatives summary with realized volatility","tags":["Legacy Market Summary History"]}},"/api/v1/historical/futures/alt_summary/{currency}":{"get":{"operationId":"LegacySummaryHistoryController_alt","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes that whole UTC day; omitted end includes tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not candle aggregation. Omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"One-based query page; omitted metadata retains the legacy route-specific default.","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Rows per page, default 10; maximum 1440.","schema":{"type":"number"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","minimum":0,"maximum":9007199254740991},"total_pages":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation timestamp, Unix milliseconds UTC."},"price":{"nullable":true,"description":"OI-weighted source price; legacy sum-of-prices fallback when total OI is non-positive. Source price convention is retained, not a new spot-index calculation.","type":"number"},"yield":{"nullable":true,"description":"OI-weighted source yield/APR, preserving the legacy source units.","type":"number"},"next_fr":{"nullable":true,"description":"OI-weighted announced next funding rate, preserving source units and null handling.","type":"number"},"open_interest":{"nullable":true,"description":"Sum of retained perpetual open interest, USD notional.","type":"number"},"volume":{"nullable":true,"description":"Sum of source rolling-24h perpetual volume, USD. Not turnover within the requested sample period.","type":"number"},"funding":{"nullable":true,"description":"OI-weighted current funding field; not a funding payment or a newly annualized rate.","type":"number"},"liquidations_long":{"nullable":true,"description":"Rolling 24h USD long liquidations, rounded to whole dollars from retained minute aggregate states.","type":"number"},"liquidations_short":{"nullable":true,"description":"Rolling 24h USD short liquidations, rounded to whole dollars from retained minute aggregate states.","type":"number"},"oi_volume24h":{"nullable":true,"description":"Dimensionless open-interest / rolling-24h-volume ratio. Derivatives summary truncates this ratio to three decimals; alt summary returns the legacy untruncated ratio, or zero for non-positive volume.","type":"number"},"market_cap":{"nullable":true,"description":"Hourly source market capitalization, USD; source join behavior is retained.","type":"number"}},"required":["date","price","yield","next_fr","open_interest","volume","funding","liquidations_long","liquidations_short","oi_volume24h","market_cap"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible futures alt summary","tags":["Legacy Market Summary History"]}},"/api/v1/options/trade-history":{"get":{"description":"V1-compatible trade observations with row pagination and source-native quantities, premiums, nulls and opaque IDs. Ordinary venues use retained trade history; Paradex uses its explicit exchange-native trade source. Not strategy-grouped trades, candle aggregation or order-book replay. Ordinary rows have date-only ordering with no same-second tie guarantee; Paradex uses source timestamp then trade ID. Current corrected view, not certified originally-published or complete trade coverage. API key/OAuth share subscriber history rights and account quotas. x402 inactive.","operationId":"OptionTradeHistoryController_read","parameters":[{"name":"exchange","required":true,"in":"query","schema":{"type":"string","enum":["deribit","okx","binance","bybit","paradex"],"description":"Retained options venue; does not certify that a trade exists for the requested day."}},{"name":"currency","required":true,"in":"query","schema":{"type":"string","maxLength":32,"pattern":"^[A-Z0-9]+(?:_[A-Z0-9]+)?$","description":"Exact source currency/product selector, uppercase. No inverse/linear product folding."}},{"name":"date","required":true,"in":"query","schema":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"UTC calendar day, YYYY-MM-DD. Individual retained trades, not candles or strategy-grouped trades."}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"default":10,"description":"Number of trade rows per page, at most 1440. Default 10.","type":"integer","minimum":1,"maximum":1440}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["options.trade_history"]},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991},"count_basis":{"type":"string","enum":["trade_rows"]},"availability":{"type":"object","properties":{"empty_reason":{"nullable":true,"type":"string","enum":["classification_unavailable"]},"coverage":{"type":"object","properties":{"source_id":{"type":"string","enum":["options.trade_history"]},"exchange_supported":{"nullable":true,"type":"boolean","enum":[true]},"instrument_eligible":{"type":"string","nullable":true,"enum":[null]},"earliest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"latest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["source_id","exchange_supported","instrument_eligible","earliest_observed_at","latest_observed_at"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","enum":["unavailable"]},"certification":{"type":"string","nullable":true,"enum":[null]},"complete_from":{"type":"string","nullable":true,"enum":[null]},"complete_through":{"type":"string","nullable":true,"enum":[null]},"complete_from_inclusive":{"type":"boolean","enum":[true]},"complete_through_inclusive":{"type":"boolean","enum":[false]},"monotonic":{"type":"boolean","enum":[false]},"monotonic_boundary":{"type":"string","enum":["complete_through"]},"revisions_possible":{"type":"boolean","enum":[true]},"certified_at":{"type":"string","nullable":true,"enum":[null]},"updated_at":{"type":"string","nullable":true,"enum":[null]},"unavailable_reason":{"type":"string","enum":["not_supported"]},"scope":{"type":"object","properties":{"endpoint_id":{"type":"string","enum":["options.trade_history"]},"source_ids":{"type":"array","items":{"type":"string"}},"exchange":{"nullable":true,"type":"string"},"instrument_name":{"nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"}},"required":["endpoint_id","source_ids","exchange","instrument_name","currency"],"additionalProperties":false}},"required":["status","certification","complete_from","complete_through","complete_from_inclusive","complete_through_inclusive","monotonic","monotonic_boundary","revisions_possible","certified_at","updated_at","unavailable_reason","scope"],"additionalProperties":false}},"required":["empty_reason","coverage","completeness"],"additionalProperties":false}},"required":["total","page","limit","items","total_pages","count_basis","availability"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$","description":"Retained source trade time, UTC YYYY-MM-DD HH:mm:ss. Not ingestion/publication time. Paradex subsecond ordering is retained but the legacy date renders whole seconds."},"market":{"type":"string","description":"Lowercase legacy venue name. Native Paradex exchange is mapped explicitly, not through its unrelated numeric enricher market ID."},"currency":{"type":"string","description":"Source currency/product selector; preserved without product merging."},"maturity":{"type":"string","description":"Source expiry label DMMMYY, uppercase; not a time-to-expiry bucket."},"strike":{"type":"number","description":"Source contract strike in the venue pricing convention."},"option_type":{"type":"string","description":"Source option type, normally C (call) or P (put)."},"direction":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Legacy aggressor side: 0 buy, 1 sell. Paradex native buy/sell is explicitly mapped to this convention."},"amount":{"type":"number","description":"Retained trade quantity in the source venue/product units. No new contract multiplier or USD conversion is applied."},"price":{"type":"number","description":"Executed option premium per source unit: inverse coin premium and linear USD/stablecoin premium remain venue-specific. Not underlying notional."},"index_price":{"type":"number","description":"Stored underlying/index reference attached to the trade. No reconstruction or substitution."},"mark_price":{"nullable":true,"description":"Stored option mark premium in the same source price convention; null means unavailable, not zero.","type":"number"},"implied_vol":{"nullable":true,"description":"Trade implied volatility in percentage points as stored by the source; null remains unavailable.","type":"number"},"block_trade_id":{"nullable":true,"description":"Opaque source block identifier. Empty string and null are distinct and are preserved.","type":"string"},"trade_id":{"anyOf":[{"type":"string"},{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"string","nullable":true,"enum":[null]}],"description":"Opaque source trade identifier. Preserve string/numeric/null representation; do not interpret Paradex IDs as numbers."},"tick_direction":{"nullable":true,"description":"Source tick-direction code; venue-specific. Null is retained.","type":"number"},"liquidation":{"nullable":true,"description":"Source liquidation indication, not a standardized boolean. Native Paradex does not supply this legacy field, so it is null.","type":"string"},"trade_seq":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}],"description":"Source sequence if retained. Paradex is null. Not a public revision sequence or ingestion-order guarantee."}},"required":["date","market","currency","maturity","strike","option_type","direction","amount","price","index_price","mark_price","implied_vol","block_trade_id","trade_id","tick_direction","liquidation","trade_seq"],"additionalProperties":false}}},"required":["dataset_id","meta","items"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"Retained individual option trades for one UTC day","tags":["Option Trade History"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"type":"string","enum":["deribit","okx","binance","bybit","paradex"],"description":"Retained options venue; does not certify that a trade exists for the requested day."},"currency":{"type":"string","maxLength":32,"pattern":"^[A-Z0-9]+(?:_[A-Z0-9]+)?$","description":"Exact source currency/product selector, uppercase. No inverse/linear product folding."},"date":{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$","description":"UTC calendar day, YYYY-MM-DD. Individual retained trades, not candles or strategy-grouped trades."},"page":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991},"limit":{"default":10,"description":"Number of trade rows per page, at most 1440. Default 10.","type":"integer","minimum":1,"maximum":1440}},"required":["exchange","currency","date"]}}}}}},"/api/v1/historical/options/trades/{market}/{currency}":{"get":{"description":"Preserves the date selector, source string timestamps, source units and {meta:{total,page,items},items} envelope. No total_pages field on this compatibility route.","operationId":"LegacyOptionTradeHistoryController_read","parameters":[{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Trade rows per page, default 10."},{"name":"page","required":false,"in":"query","description":"Trade-row page, default 1.","schema":{"type":"number"}},{"name":"date","required":true,"in":"query","description":"Legacy date-only, ISO instant or 10/13-digit epoch. Its UTC calendar day is selected.","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","description":"Case-insensitive source currency/product selector.","schema":{"type":"string"}},{"name":"market","required":true,"in":"path","description":"Case-insensitive retained venue: DERIBIT, BINANCE, OKX, BYBIT or PARADEX.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","page","items"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}$","description":"Retained source trade time, UTC YYYY-MM-DD HH:mm:ss. Not ingestion/publication time. Paradex subsecond ordering is retained but the legacy date renders whole seconds."},"market":{"type":"string","description":"Lowercase legacy venue name. Native Paradex exchange is mapped explicitly, not through its unrelated numeric enricher market ID."},"currency":{"type":"string","description":"Source currency/product selector; preserved without product merging."},"maturity":{"type":"string","description":"Source expiry label DMMMYY, uppercase; not a time-to-expiry bucket."},"strike":{"type":"number","description":"Source contract strike in the venue pricing convention."},"option_type":{"type":"string","description":"Source option type, normally C (call) or P (put)."},"direction":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Legacy aggressor side: 0 buy, 1 sell. Paradex native buy/sell is explicitly mapped to this convention."},"amount":{"type":"number","description":"Retained trade quantity in the source venue/product units. No new contract multiplier or USD conversion is applied."},"price":{"type":"number","description":"Executed option premium per source unit: inverse coin premium and linear USD/stablecoin premium remain venue-specific. Not underlying notional."},"index_price":{"type":"number","description":"Stored underlying/index reference attached to the trade. No reconstruction or substitution."},"mark_price":{"nullable":true,"description":"Stored option mark premium in the same source price convention; null means unavailable, not zero.","type":"number"},"implied_vol":{"nullable":true,"description":"Trade implied volatility in percentage points as stored by the source; null remains unavailable.","type":"number"},"block_trade_id":{"nullable":true,"description":"Opaque source block identifier. Empty string and null are distinct and are preserved.","type":"string"},"trade_id":{"anyOf":[{"type":"string"},{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"string","nullable":true,"enum":[null]}],"description":"Opaque source trade identifier. Preserve string/numeric/null representation; do not interpret Paradex IDs as numbers."},"tick_direction":{"nullable":true,"description":"Source tick-direction code; venue-specific. Null is retained.","type":"number"},"liquidation":{"nullable":true,"description":"Source liquidation indication, not a standardized boolean. Native Paradex does not supply this legacy field, so it is null.","type":"string"},"trade_seq":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}],"description":"Source sequence if retained. Paradex is null. Not a public revision sequence or ingestion-order guarantee."}},"required":["date","market","currency","maturity","strike","option_type","direction","amount","price","index_price","mark_price","implied_vol","block_trade_id","trade_id","tick_direction","liquidation","trade_seq"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible individual option trade history","tags":["Legacy Option Trade History"]}},"/api/v1/options/current-analytics":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_native","parameters":[{"name":"series","required":true,"in":"query","schema":{"type":"string","enum":["atm_term_structure","gamma_by_strike","oi_by_expiry","oi_by_strike","oi_by_type","instrument_oi_change","volume_buy_sell","iv_by_strike","iv_table","snapshot","market_breakdown","currency_breakdown","skew_by_strike"]}},{"name":"exchange","required":false,"in":"query","schema":{"description":"Legacy source venue, or aggregate where supported by the family. Omit for market/currency breakdowns.","type":"string","minLength":1,"maxLength":32,"pattern":"^[A-Za-z0-9][A-Za-z0-9_]*$"}},{"name":"currency","required":false,"in":"query","schema":{"description":"Underlying selector; BTC_USDC and BTC are distinct retained source products. Required except for breakdowns.","type":"string","minLength":1,"maxLength":32,"pattern":"^[A-Za-z0-9][A-Za-z0-9_]*$"}},{"name":"maturity","required":false,"in":"query","schema":{"description":"Listed expiry. Omit to select all for gamma; use one expiry or all for strike IV/OI and buy/sell volume. Not a fixed-tenor day count.","type":"string","maxLength":450}},{"name":"option_type","required":false,"in":"query","schema":{"description":"Required only for iv_by_strike. Call/put, not trade direction.","type":"string","enum":["C","P"]}},{"name":"hours","required":false,"in":"query","schema":{"description":"Required only for instrument_oi_change. Legacy 720 uses one calendar month, not exactly 720 clock hours.","type":"string","enum":["1","2","4","8","12","18","24","48","168","336","504","720"]}},{"name":"metric","required":false,"in":"query","schema":{"description":"Required only for market_breakdown/currency_breakdown; outstanding quantity or source rolling volume.","type":"string","enum":["open_interest","volume"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"dataset":{"type":"string","enum":["options.current_analytics"]},"series":{"type":"string","enum":["atm_term_structure","gamma_by_strike","oi_by_expiry","oi_by_strike","oi_by_type","instrument_oi_change","volume_buy_sell","iv_by_strike","iv_table","snapshot","market_breakdown","currency_breakdown","skew_by_strike"]},"generated_at":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."}},"required":["dataset","series","generated_at"],"additionalProperties":false},"data":{"anyOf":[{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"maturity":{"type":"string"},"iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"}},"required":["maturity","iv"],"additionalProperties":false}}},{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"option_type":{"type":"string","enum":["C","P"]},"gex":{"nullable":true,"description":"Signed sum of source gamma × OI: calls positive, puts negative. Not USD GEX per 1% move; no spot-price-squared conversion.","type":"number"}},"required":["strike","option_type","gex"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"maturity":{"type":"string"},"c":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"p":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"notional_c":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"notional_p":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"premium_c":{"nullable":true,"description":"USD call premium value, not underlying notional.","type":"number"},"premium_p":{"nullable":true,"description":"USD put premium value, not underlying notional.","type":"number"}},"required":["maturity","c","p","notional_c","notional_p","premium_c","premium_p"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"c":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"p":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"notional_c":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"notional_p":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"premium_c":{"nullable":true,"description":"USD call premium value, not underlying notional.","type":"number"},"premium_p":{"nullable":true,"description":"USD put premium value, not underlying notional.","type":"number"},"intrinsic":{"description":"Aggregate exercise payout at this candidate strike; only the single-expiry branch.","nullable":true,"type":"number"}},"required":["strike","c","p","notional_c","notional_p","premium_c","premium_p"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"optionType":{"type":"string","enum":["C","P"]},"open_interest":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"required":["optionType","open_interest","notional","premium"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string"},"instrument":{"type":"string"},"volume":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"open_interest":{"nullable":true,"description":"Change in source option quantity versus the selected earlier snapshot, not current OI.","type":"number"},"oi_change_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"required":["currency","instrument","volume","notional","open_interest","oi_change_notional"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"c_buy":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"c_buy_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"c_buy_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"c_sell":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"c_sell_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"c_sell_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_buy":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"p_buy_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_buy_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_sell":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"p_sell_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_sell_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"required":["strike","c_buy","c_buy_notional","c_buy_premium","c_sell","c_sell_notional","c_sell_premium","p_buy","p_buy_notional","p_buy_premium","p_sell","p_sell_notional","p_sell_premium"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"mark_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"delta":{"nullable":true,"description":"Legacy instrument delta after the source’s two rounding/transform steps; not absolute put delta.","type":"number"}},"required":["strike","mark_iv","bid_iv","ask_iv","delta"],"additionalProperties":false}},{"type":"array","items":{"type":"object","properties":{"maturity":{"type":"string"},"mark_ATM":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_ATM":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_ATM":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_ATM":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_10DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_10DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_10DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_10DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_10DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_10DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_10DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_10DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_15DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_15DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_15DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_15DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_15DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_15DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_15DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_15DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_25DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_25DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_25DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_25DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_25DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_25DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_25DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_25DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_35DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_35DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_35DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_35DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_35DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_35DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_35DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_35DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"10D_Mark_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Bid_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Ask_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Spread_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Mark_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Bid_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Ask_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Spread_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Mark_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Bid_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Ask_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Spread_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Mark_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Bid_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Ask_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Spread_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Mark_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Bid_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Ask_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Spread_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Mark_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Bid_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Ask_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Spread_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Mark_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Bid_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Ask_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Spread_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Mark_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Bid_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Ask_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Spread_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"}},"required":["maturity","mark_ATM","ask_ATM","bid_ATM","spread_ATM","mark_10DC","ask_10DC","bid_10DC","spread_10DC","mark_10DP","ask_10DP","bid_10DP","spread_10DP","mark_15DC","ask_15DC","bid_15DC","spread_15DC","mark_15DP","ask_15DP","bid_15DP","spread_15DP","mark_25DC","ask_25DC","bid_25DC","spread_25DC","mark_25DP","ask_25DP","bid_25DP","spread_25DP","mark_35DC","ask_35DC","bid_35DC","spread_35DC","mark_35DP","ask_35DP","bid_35DP","spread_35DP","10D_Mark_RR","10D_Bid_RR","10D_Ask_RR","10D_Spread_RR","10D_Mark_BF","10D_Bid_BF","10D_Ask_BF","10D_Spread_BF","15D_Mark_RR","15D_Bid_RR","15D_Ask_RR","15D_Spread_RR","15D_Mark_BF","15D_Bid_BF","15D_Ask_BF","15D_Spread_BF","25D_Mark_RR","25D_Bid_RR","25D_Ask_RR","25D_Spread_RR","25D_Mark_BF","25D_Bid_BF","25D_Ask_BF","25D_Spread_BF","35D_Mark_RR","35D_Bid_RR","35D_Ask_RR","35D_Spread_RR","35D_Mark_BF","35D_Bid_BF","35D_Ask_BF","35D_Spread_BF"],"additionalProperties":false}},{"anyOf":[{"type":"object","additionalProperties":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"expiration_date":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Legacy expiry date at 08:00 UTC; not an exchange-native expiry-time certificate."},"claim_type":{"type":"string","enum":["call","put"]},"open_interest":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"volume":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"underlyer":{"type":"string"},"underlyer_spot":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"forward_price":{"nullable":true,"description":"Stored underlying/forward reference; not necessarily spot.","type":"number"},"mark_price":{"nullable":true,"type":"number"},"mark_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"best_bid_price":{"nullable":true,"type":"number"},"best_bid_amount":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"best_ask_price":{"nullable":true,"type":"number"},"best_ask_amount":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"ask_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"exercise":{"type":"string","enum":["European"]},"settlement":{"type":"string","enum":["cash"]}},"required":["strike","expiration_date","claim_type","open_interest","volume","underlyer","underlyer_spot","forward_price","mark_price","mark_iv","bid_iv","best_bid_price","best_bid_amount","best_ask_price","best_ask_amount","ask_iv","exercise","settlement"],"additionalProperties":false}},{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"expiration_date":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Legacy expiry date at 08:00 UTC; not an exchange-native expiry-time certificate."},"claim_type":{"type":"string","enum":["call","put"]},"open_interest":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"volume":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"underlyer":{"type":"string"},"underlyer_spot":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"forward_price":{"nullable":true,"description":"Stored underlying/forward reference; not necessarily spot.","type":"number"},"mark_price":{"nullable":true,"type":"number"},"mark_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"best_bid_price":{"nullable":true,"type":"number"},"best_bid_amount":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"best_ask_price":{"nullable":true,"type":"number"},"best_ask_amount":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"ask_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"exercise":{"type":"string","enum":["European"]},"settlement":{"type":"string","enum":["cash"]}},"required":["strike","expiration_date","claim_type","open_interest","volume","underlyer","underlyer_spot","forward_price","mark_price","mark_iv","bid_iv","best_bid_price","best_bid_amount","best_ask_price","best_ask_amount","ask_iv","exercise","settlement"],"additionalProperties":false}}},{"type":"object","properties":{"error":{"type":"string","enum":["No data found"]}},"required":["error"],"additionalProperties":false}]},{"anyOf":[{"type":"object","properties":{"notional":{"type":"object","additionalProperties":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"open_value":{"type":"object","additionalProperties":{"nullable":true,"description":"USD premium value. Missing constituent valuation can make the total null.","type":"number"}}},"required":["notional","open_value"],"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false}]},{"type":"array","items":{"type":"object","properties":{"notional":{"type":"object","additionalProperties":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"open_value":{"type":"object","additionalProperties":{"nullable":true,"description":"USD premium value. Missing constituent valuation can make the total null.","type":"number"}}},"required":["notional","open_value"],"additionalProperties":false}},{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"market":{"type":"string"},"currency":{"type":"string"},"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"delta":{"nullable":true,"description":"Legacy call coordinate 1 − delta; not a normalized risk reversal.","type":"number"},"iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"}},"required":["market","currency","strike","delta","iv"],"additionalProperties":false}}}]}},"required":["meta","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"Current options analytics","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"series":{"type":"string","enum":["atm_term_structure","gamma_by_strike","oi_by_expiry","oi_by_strike","oi_by_type","instrument_oi_change","volume_buy_sell","iv_by_strike","iv_table","snapshot","market_breakdown","currency_breakdown","skew_by_strike"]},"exchange":{"description":"Legacy source venue, or aggregate where supported by the family. Omit for market/currency breakdowns.","type":"string","minLength":1,"maxLength":32,"pattern":"^[A-Za-z0-9][A-Za-z0-9_]*$"},"currency":{"description":"Underlying selector; BTC_USDC and BTC are distinct retained source products. Required except for breakdowns.","type":"string","minLength":1,"maxLength":32,"pattern":"^[A-Za-z0-9][A-Za-z0-9_]*$"},"maturity":{"description":"Listed expiry. Omit to select all for gamma; use one expiry or all for strike IV/OI and buy/sell volume. Not a fixed-tenor day count.","type":"string","maxLength":450},"option_type":{"description":"Required only for iv_by_strike. Call/put, not trade direction.","type":"string","enum":["C","P"]},"hours":{"description":"Required only for instrument_oi_change. Legacy 720 uses one calendar month, not exactly 720 clock hours.","type":"string","enum":["1","2","4","8","12","18","24","48","168","336","504","720"]},"metric":{"description":"Required only for market_breakdown/currency_breakdown; outstanding quantity or source rolling volume.","type":"string","enum":["open_interest","volume"]}},"required":["series"]}}}}}},"/api/v1/analytics/options/atm_iv_ts/{market}/{currency}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_atm","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"maturity":{"type":"string"},"iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"}},"required":["maturity","iv"],"additionalProperties":false}}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible atm_term_structure","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/gex_date_all/{market}/{currency}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_gammaAll","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"option_type":{"type":"string","enum":["C","P"]},"gex":{"nullable":true,"description":"Signed sum of source gamma × OI: calls positive, puts negative. Not USD GEX per 1% move; no spot-price-squared conversion.","type":"number"}},"required":["strike","option_type","gex"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible gamma_by_strike","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/gex_date/{market}/{currency}/{maturity}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_gamma","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"maturity","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"option_type":{"type":"string","enum":["C","P"]},"gex":{"nullable":true,"description":"Signed sum of source gamma × OI: calls positive, puts negative. Not USD GEX per 1% move; no spot-price-squared conversion.","type":"number"}},"required":["strike","option_type","gex"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible gamma_by_strike","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/iv_all/{market}/{currency}/{maturity}/{type}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_ivStrike","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"maturity","required":true,"in":"path","schema":{"type":"string"}},{"name":"type","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"mark_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"delta":{"nullable":true,"description":"Legacy instrument delta after the source’s two rounding/transform steps; not absolute put delta.","type":"number"}},"required":["strike","mark_iv","bid_iv","ask_iv","delta"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible iv_by_strike","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/iv_table/{market}/{currency}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_ivTable","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"maturity":{"type":"string"},"mark_ATM":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_ATM":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_ATM":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_ATM":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_10DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_10DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_10DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_10DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_10DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_10DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_10DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_10DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_15DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_15DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_15DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_15DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_15DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_15DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_15DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_15DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_25DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_25DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_25DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_25DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_25DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_25DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_25DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_25DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_35DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_35DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_35DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_35DC":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"mark_35DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"ask_35DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_35DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"spread_35DP":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"10D_Mark_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Bid_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Ask_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Spread_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Mark_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Bid_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Ask_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"10D_Spread_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Mark_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Bid_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Ask_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Spread_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Mark_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Bid_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Ask_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"15D_Spread_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Mark_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Bid_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Ask_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Spread_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Mark_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Bid_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Ask_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"25D_Spread_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Mark_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Bid_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Ask_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Spread_RR":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Mark_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Bid_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Ask_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"},"35D_Spread_BF":{"nullable":true,"description":"Legacy risk reversal (call minus put) or butterfly (wing mean minus ATM), in volatility percentage points.","type":"number"}},"required":["maturity","mark_ATM","ask_ATM","bid_ATM","spread_ATM","mark_10DC","ask_10DC","bid_10DC","spread_10DC","mark_10DP","ask_10DP","bid_10DP","spread_10DP","mark_15DC","ask_15DC","bid_15DC","spread_15DC","mark_15DP","ask_15DP","bid_15DP","spread_15DP","mark_25DC","ask_25DC","bid_25DC","spread_25DC","mark_25DP","ask_25DP","bid_25DP","spread_25DP","mark_35DC","ask_35DC","bid_35DC","spread_35DC","mark_35DP","ask_35DP","bid_35DP","spread_35DP","10D_Mark_RR","10D_Bid_RR","10D_Ask_RR","10D_Spread_RR","10D_Mark_BF","10D_Bid_BF","10D_Ask_BF","10D_Spread_BF","15D_Mark_RR","15D_Bid_RR","15D_Ask_RR","15D_Spread_RR","15D_Mark_BF","15D_Bid_BF","15D_Ask_BF","15D_Spread_BF","25D_Mark_RR","25D_Bid_RR","25D_Ask_RR","25D_Spread_RR","25D_Mark_BF","25D_Bid_BF","25D_Ask_BF","25D_Spread_BF","35D_Mark_RR","35D_Bid_RR","35D_Ask_RR","35D_Spread_RR","35D_Mark_BF","35D_Bid_BF","35D_Ask_BF","35D_Spread_BF"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible iv_table","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/oi_expiry/{market}/{currency}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_oiExpiry","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"maturity":{"type":"string"},"c":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"p":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"notional_c":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"notional_p":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"premium_c":{"nullable":true,"description":"USD call premium value, not underlying notional.","type":"number"},"premium_p":{"nullable":true,"description":"USD put premium value, not underlying notional.","type":"number"}},"required":["maturity","c","p","notional_c","notional_p","premium_c","premium_p"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible oi_by_expiry","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/oi_strike_all/{market}/{currency}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_oiStrikeAll","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"c":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"p":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"notional_c":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"notional_p":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"premium_c":{"nullable":true,"description":"USD call premium value, not underlying notional.","type":"number"},"premium_p":{"nullable":true,"description":"USD put premium value, not underlying notional.","type":"number"},"intrinsic":{"description":"Aggregate exercise payout at this candidate strike; only the single-expiry branch.","nullable":true,"type":"number"}},"required":["strike","c","p","notional_c","notional_p","premium_c","premium_p"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible oi_by_strike","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/oi_strike/{market}/{currency}/{maturity}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_oiStrike","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"maturity","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"c":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"p":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"notional_c":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"notional_p":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"premium_c":{"nullable":true,"description":"USD call premium value, not underlying notional.","type":"number"},"premium_p":{"nullable":true,"description":"USD put premium value, not underlying notional.","type":"number"},"intrinsic":{"description":"Aggregate exercise payout at this candidate strike; only the single-expiry branch.","nullable":true,"type":"number"}},"required":["strike","c","p","notional_c","notional_p","premium_c","premium_p"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible oi_by_strike","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/oi_type/{market}/{currency}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_oiType","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"optionType":{"type":"string","enum":["C","P"]},"open_interest":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"required":["optionType","open_interest","notional","premium"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible oi_by_type","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/skew/{market}/{currency}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_skew","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"market":{"type":"string"},"currency":{"type":"string"},"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"delta":{"nullable":true,"description":"Legacy call coordinate 1 − delta; not a normalized risk reversal.","type":"number"},"iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"}},"required":["market","currency","strike","delta","iv"],"additionalProperties":false}}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible skew_by_strike","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/snapshot/{market}/{currency}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_snapshot","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"anyOf":[{"type":"object","additionalProperties":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"expiration_date":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Legacy expiry date at 08:00 UTC; not an exchange-native expiry-time certificate."},"claim_type":{"type":"string","enum":["call","put"]},"open_interest":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"volume":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"underlyer":{"type":"string"},"underlyer_spot":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"forward_price":{"nullable":true,"description":"Stored underlying/forward reference; not necessarily spot.","type":"number"},"mark_price":{"nullable":true,"type":"number"},"mark_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"best_bid_price":{"nullable":true,"type":"number"},"best_bid_amount":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"best_ask_price":{"nullable":true,"type":"number"},"best_ask_amount":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"ask_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"exercise":{"type":"string","enum":["European"]},"settlement":{"type":"string","enum":["cash"]}},"required":["strike","expiration_date","claim_type","open_interest","volume","underlyer","underlyer_spot","forward_price","mark_price","mark_iv","bid_iv","best_bid_price","best_bid_amount","best_ask_price","best_ask_amount","ask_iv","exercise","settlement"],"additionalProperties":false}},{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"expiration_date":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Legacy expiry date at 08:00 UTC; not an exchange-native expiry-time certificate."},"claim_type":{"type":"string","enum":["call","put"]},"open_interest":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"volume":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"underlyer":{"type":"string"},"underlyer_spot":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"forward_price":{"nullable":true,"description":"Stored underlying/forward reference; not necessarily spot.","type":"number"},"mark_price":{"nullable":true,"type":"number"},"mark_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"bid_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"best_bid_price":{"nullable":true,"type":"number"},"best_bid_amount":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"best_ask_price":{"nullable":true,"type":"number"},"best_ask_amount":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"ask_iv":{"nullable":true,"description":"Implied volatility in percentage points (50 means 50%), not a fraction.","type":"number"},"exercise":{"type":"string","enum":["European"]},"settlement":{"type":"string","enum":["cash"]}},"required":["strike","expiration_date","claim_type","open_interest","volume","underlyer","underlyer_spot","forward_price","mark_price","mark_iv","bid_iv","best_bid_price","best_bid_amount","best_ask_price","best_ask_amount","ask_iv","exercise","settlement"],"additionalProperties":false}}},{"type":"object","properties":{"error":{"type":"string","enum":["No data found"]}},"required":["error"],"additionalProperties":false}]}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible snapshot","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/top_instrument_oi_change/{market}/{currency}/{hours}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_oiChange","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"hours","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string"},"instrument":{"type":"string"},"volume":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"open_interest":{"nullable":true,"description":"Change in source option quantity versus the selected earlier snapshot, not current OI.","type":"number"},"oi_change_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"required":["currency","instrument","volume","notional","open_interest","oi_change_notional"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible instrument_oi_change","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/volume_buy_sell_all/{market}/{currency}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_buySellAll","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"c_buy":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"c_buy_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"c_buy_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"c_sell":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"c_sell_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"c_sell_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_buy":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"p_buy_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_buy_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_sell":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"p_sell_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_sell_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"required":["strike","c_buy","c_buy_notional","c_buy_premium","c_sell","c_sell_notional","c_sell_premium","p_buy","p_buy_notional","p_buy_premium","p_sell","p_sell_notional","p_sell_premium"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible volume_buy_sell","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/volume_buy_sell/{market}/{currency}/{maturity}":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_buySell","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"maturity","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Exercise price in the underlying quote convention.","type":"number"},"c_buy":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"c_buy_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"c_buy_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"c_sell":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"c_sell_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"c_sell_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_buy":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"p_buy_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_buy_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_sell":{"nullable":true,"description":"Retained source option quantity, not USD. Binance OI is underlying quantity; Binance volume is contract count. Quantity fields are not rescaled by valuation.","type":"number"},"p_sell_notional":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"},"p_sell_premium":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"required":["strike","c_buy","c_buy_notional","c_buy_premium","c_sell","c_sell_notional","c_sell_premium","p_buy","p_buy_notional","p_buy_premium","p_sell","p_sell_notional","p_sell_premium"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible volume_buy_sell","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/oi_breakdown":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_marketOi","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"anyOf":[{"type":"object","properties":{"notional":{"type":"object","additionalProperties":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"open_value":{"type":"object","additionalProperties":{"nullable":true,"description":"USD premium value. Missing constituent valuation can make the total null.","type":"number"}}},"required":["notional","open_value"],"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false}]}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible market_breakdown","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/oi_breakdown_by_currency":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_currencyOi","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"notional":{"type":"object","additionalProperties":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"open_value":{"type":"object","additionalProperties":{"nullable":true,"description":"USD premium value. Missing constituent valuation can make the total null.","type":"number"}}},"required":["notional","open_value"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible currency_breakdown","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/volume_breakdown":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_marketVolume","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"anyOf":[{"type":"object","properties":{"notional":{"type":"object","additionalProperties":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"open_value":{"type":"object","additionalProperties":{"nullable":true,"description":"USD premium value. Missing constituent valuation can make the total null.","type":"number"}}},"required":["notional","open_value"],"additionalProperties":false},{"type":"object","properties":{},"additionalProperties":false}]}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible market_breakdown","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/volume_breakdown_by_currency":{"get":{"description":"Current legacy options analytics, not retained time-series history or the modern fitted surface. Preserves family-specific source snapshot selection, rounding, source quantities, USD premium/notional conventions and missing values. Generation date is UTC Unix seconds, not first-publication time. No start/end, resolution or pagination. OI changes compare exact source snapshots; ATM term structure includes selected earlier snapshots. Buy/sell volume covers the previous 24 hours. gamma_by_strike gex is gamma × open interest with calls positive and puts negative, not USD and not dealer GEX. Subscriber rights and shared quota apply. x402 is not enabled. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows.","operationId":"OptionsAnalyticsController_currencyVolume","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds rounded to the response-generation minute, not the first-publication time of every observation."},"data":{"type":"array","items":{"type":"object","properties":{"notional":{"type":"object","additionalProperties":{"nullable":true,"description":"USD value under this family’s retained reference-price convention.","type":"number"}},"open_value":{"type":"object","additionalProperties":{"nullable":true,"description":"USD premium value. Missing constituent valuation can make the total null.","type":"number"}}},"required":["notional","open_value"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible currency_breakdown","tags":["Current Options Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/market/legacy-discovery":{"get":{"description":"V1-compatible market discovery. Current option maturities/instruments and derivative listings use their original snapshot selection, not an all-history catalogue. Option settlements and spot pairs use source document update times, not response time. Refreshed Deribit settlement rows distinguish exchange delivery events from contractual payout reconstructed using the official delivery index; reconstructed position quantity is unavailable (null). Native settlement metadata separates publication/check time from latest retained expiry and reports known unavailable delivery prices without certifying exchange-wide completeness. Older rows/documents may lack provenance/metadata. Legacy aliases retain exactly the seven original settlement fields. Expired futures returns each symbol’s latest retained observation within the requested window, for expiries before today UTC. It is not a settlement-price certificate. Parameters, units and missing values retain the legacy source contract. Existing subscriber rights/quota apply; x402 is not enabled. Scope option settlements by maturity to avoid a large all-expiry response.","operationId":"MarketDiscoveryController_native","parameters":[{"name":"series","required":true,"in":"query","schema":{"type":"string","enum":["option_maturities","option_instruments","derivative_instruments","option_settlements","spot_pairs","expired_futures"]}},{"name":"exchange","required":false,"in":"query","schema":{"description":"Required except for derivative_instruments. option_settlements supports Deribit and Bybit.","type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_.-]+$"}},{"name":"currency","required":false,"in":"query","schema":{"description":"Underlying selector. BTC and BTC_USDC remain distinct on Deribit options.","type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_.-]+$"}},{"name":"maturity","required":false,"in":"query","schema":{"description":"Exact expiry DMMMYY, or all; only option_instruments/option_settlements.","type":"string"}},{"name":"option_type","required":false,"in":"query","schema":{"description":"Call or put, only option_instruments.","type":"string","enum":["C","P"]}},{"name":"start","required":false,"in":"query","schema":{"description":"Required for expired_futures. Inclusive source observation bound, not expiry date.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},{"name":"end","required":false,"in":"query","schema":{"description":"Required for expired_futures. Inclusive source observation bound.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440}},{"name":"fields","required":false,"in":"query","schema":{"description":"Optional expired_futures projection. Source observation date is always present.","minItems":1,"maxItems":5,"type":"array","items":{"type":"string","enum":["symbol","price","index","volume","open_interest"]}}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"series":{"type":"string","enum":["option_maturities","option_instruments","derivative_instruments","option_settlements","spot_pairs","expired_futures"]},"items":{"type":"array","items":{"anyOf":[{"type":"string","description":"Source listed expiry label; current snapshot only, not all retained expiries."},{"type":"object","properties":{"market":{"type":"string"},"currency":{"type":"string"},"maturity":{"type":"string"},"strike":{"nullable":true,"type":"number"},"option_type":{"type":"string","enum":["C","P"]},"instrument":{"type":"string"}},"required":["market","currency","maturity","strike","option_type","instrument"],"additionalProperties":false},{"type":"object","properties":{"market":{"type":"string"},"type":{"type":"string","enum":["future","perpetual","option"]},"currency":{"type":"string"},"instrument":{"type":"string"},"expiry":{"nullable":true,"type":"string"}},"required":["market","type","currency","instrument","expiry"],"additionalProperties":false},{"type":"object","properties":{"Date":{"type":"string","description":"Listed expiry date, DMMMYY; not collection time."},"Strike":{"nullable":true,"description":"Exercise price in the option underlying quote convention.","type":"number"},"OptionType":{"type":"string","description":"Source call/put label, preserved without recoding."},"mark_price":{"nullable":true,"description":"Source expiry option price per underlying unit, in the instrument settlement currency.","type":"number"},"mark_price_usd":{"nullable":true,"description":"Source USD value of that option price.","type":"number"},"position":{"nullable":true,"description":"Source retained position quantity; not trade count or USD notional. Null when unavailable, including delivery-price reconstructions.","type":"number"},"index_price":{"nullable":true,"description":"Source expiry index reference; quote units per underlying unit.","type":"number"},"provenance":{"oneOf":[{"type":"object","properties":{"source":{"type":"string","enum":["exchange_delivery_event"]},"instrument_name":{"type":"string","maxLength":160,"pattern":"^[A-Z0-9]+(?:_USDC)?-\\d{1,2}[A-Z]{3}\\d{2}-\\d+(?:d\\d+)?-[CP]$"},"position_status":{"type":"string","enum":["observed","unavailable"]},"event_timestamp_ms":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"Exchange delivery-event timestamp in Unix milliseconds UTC; not the API cache publication time."}},"required":["source","instrument_name","position_status","event_timestamp_ms"],"additionalProperties":false},{"type":"object","properties":{"source":{"type":"string","enum":["delivery_price_reconstruction"]},"instrument_name":{"type":"string","maxLength":160,"pattern":"^[A-Z0-9]+(?:_USDC)?-\\d{1,2}[A-Z]{3}\\d{2}-\\d+(?:d\\d+)?-[CP]$"},"position_status":{"type":"string","enum":["unavailable"]},"delivery_index":{"type":"string","maxLength":80,"pattern":"^[a-z0-9]+_(usd|usdc)$"},"delivery_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"price_basis":{"type":"string","enum":["contractual_intrinsic_per_base_unit"]}},"required":["source","instrument_name","position_status","delivery_index","delivery_date","price_basis"],"additionalProperties":false}],"description":"Available on refreshed Deribit rows. Exchange-reported delivery versus contractual payout reconstructed from the official delivery index. Reconstruction does not recover position quantity. Missing provenance means older retained data, not certified exchange-event provenance."}},"required":["Date","Strike","OptionType","mark_price","mark_price_usd","position","index_price"],"additionalProperties":false},{"type":"string","description":"Exact pair key from the current source document; casing and punctuation are preserved."},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix milliseconds of the latest retained observation in the requested source window. Not the contract expiry or publication time."},"symbol":{"type":"string"},"price":{"nullable":true,"type":"number"},"index":{"nullable":true,"type":"number"},"volume":{"nullable":true,"type":"number"},"open_interest":{"nullable":true,"type":"number"}},"required":["date"],"additionalProperties":false}]}},"meta":{"type":"object","properties":{"generated_at":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds. Source last update for live series; response-generation minute for current discovery."},"date_basis":{"type":"string","enum":["response_generation","source_last_update"]},"historical_catalogue":{"type":"boolean","description":"Only expired_futures reads the requested retained source window. Other series do not certify complete historical instrument coverage."},"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991},"settlement_catalogue":{"description":"Optional source-check metadata for refreshed Deribit settlements. Absent on older catalogue documents; absence does not certify completeness.","type":"object","properties":{"version":{"type":"number","enum":[2]},"source_checked_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Time the source catalogue refresh checked its inputs. Distinct from latest_expiry; not a guarantee of completeness."},"inventory_scope":{"type":"string","enum":["retained_deribit_option_metadata"],"description":"Recovery inventory is retained Deribit option metadata, not a complete exchange-history inventory."},"latest_expiry":{"nullable":true,"description":"Latest expiry date with a retained settlement row for the selected currency, before any maturity filter. Not the cache publication date or a completeness boundary.","type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"status":{"type":"string","enum":["source_checked","missing_delivery_prices"],"description":"Known official delivery-price availability in this selected currency inventory. source_checked does not certify complete exchange coverage."},"missing_delivery_price_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Known inventory instruments in the selected currency lacking an official delivery price; no synthetic zero row is created for them."},"completeness_certified":{"type":"boolean","enum":[false]},"returned_rows_by_source":{"type":"object","properties":{"exchange_delivery_event":{"type":"integer","minimum":0,"maximum":9007199254740991},"delivery_price_reconstruction":{"type":"integer","minimum":0,"maximum":9007199254740991},"unclassified_retained":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["exchange_delivery_event","delivery_price_reconstruction","unclassified_retained"],"additionalProperties":false,"description":"Counts for returned rows after the optional maturity filter, not global catalogue counts."}},"required":["version","source_checked_at","inventory_scope","latest_expiry","status","missing_delivery_price_count","completeness_certified","returned_rows_by_source"],"additionalProperties":false}},"required":["generated_at","date_basis","historical_catalogue","total"],"additionalProperties":false}},"required":["series","items","meta"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"Legacy market discovery","tags":["Legacy Market Discovery"]}},"/api/v1/analytics/options/maturities/{market}/{currency}":{"get":{"description":"V1-compatible market discovery. Current option maturities/instruments and derivative listings use their original snapshot selection, not an all-history catalogue. Option settlements and spot pairs use source document update times, not response time. Refreshed Deribit settlement rows distinguish exchange delivery events from contractual payout reconstructed using the official delivery index; reconstructed position quantity is unavailable (null). Native settlement metadata separates publication/check time from latest retained expiry and reports known unavailable delivery prices without certifying exchange-wide completeness. Older rows/documents may lack provenance/metadata. Legacy aliases retain exactly the seven original settlement fields. Expired futures returns each symbol’s latest retained observation within the requested window, for expiries before today UTC. It is not a settlement-price certificate. Parameters, units and missing values retain the legacy source contract. Existing subscriber rights/quota apply; x402 is not enabled. Scope option settlements by maturity to avoid a large all-expiry response.","operationId":"MarketDiscoveryController_maturities","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds. Source last update for live series; response-generation minute for current discovery."},"data":{"type":"array","items":{"type":"string","description":"Source listed expiry label; current snapshot only, not all retained expiries."}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible option_maturities","tags":["Legacy Market Discovery"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/Instruments":{"get":{"description":"V1-compatible market discovery. Current option maturities/instruments and derivative listings use their original snapshot selection, not an all-history catalogue. Option settlements and spot pairs use source document update times, not response time. Refreshed Deribit settlement rows distinguish exchange delivery events from contractual payout reconstructed using the official delivery index; reconstructed position quantity is unavailable (null). Native settlement metadata separates publication/check time from latest retained expiry and reports known unavailable delivery prices without certifying exchange-wide completeness. Older rows/documents may lack provenance/metadata. Legacy aliases retain exactly the seven original settlement fields. Expired futures returns each symbol’s latest retained observation within the requested window, for expiries before today UTC. It is not a settlement-price certificate. Parameters, units and missing values retain the legacy source contract. Existing subscriber rights/quota apply; x402 is not enabled. Scope option settlements by maturity to avoid a large all-expiry response.","operationId":"MarketDiscoveryController_options","parameters":[{"name":"market","required":true,"in":"query","schema":{"type":"string"}},{"name":"currency","required":false,"in":"query","schema":{"type":"string"}},{"name":"maturity","required":false,"in":"query","schema":{"type":"string"}},{"name":"option_type","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds. Source last update for live series; response-generation minute for current discovery."},"data":{"type":"array","items":{"type":"object","properties":{"market":{"type":"string"},"currency":{"type":"string"},"maturity":{"type":"string"},"strike":{"nullable":true,"type":"number"},"option_type":{"type":"string","enum":["C","P"]},"instrument":{"type":"string"}},"required":["market","currency","maturity","strike","option_type","instrument"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible option_instruments","tags":["Legacy Market Discovery"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"market":{"type":"string"},"currency":{"type":"string"},"maturity":{"type":"string"},"option_type":{"type":"string"}},"required":["market"]}}}}}},"/api/v1/analytics/futures/instruments":{"get":{"description":"V1-compatible market discovery. Current option maturities/instruments and derivative listings use their original snapshot selection, not an all-history catalogue. Option settlements and spot pairs use source document update times, not response time. Refreshed Deribit settlement rows distinguish exchange delivery events from contractual payout reconstructed using the official delivery index; reconstructed position quantity is unavailable (null). Native settlement metadata separates publication/check time from latest retained expiry and reports known unavailable delivery prices without certifying exchange-wide completeness. Older rows/documents may lack provenance/metadata. Legacy aliases retain exactly the seven original settlement fields. Expired futures returns each symbol’s latest retained observation within the requested window, for expiries before today UTC. It is not a settlement-price certificate. Parameters, units and missing values retain the legacy source contract. Existing subscriber rights/quota apply; x402 is not enabled. Scope option settlements by maturity to avoid a large all-expiry response.","operationId":"MarketDiscoveryController_derivatives","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds. Source last update for live series; response-generation minute for current discovery."},"data":{"type":"array","items":{"type":"object","properties":{"market":{"type":"string"},"type":{"type":"string","enum":["future","perpetual","option"]},"currency":{"type":"string"},"instrument":{"type":"string"},"expiry":{"nullable":true,"type":"string"}},"required":["market","type","currency","instrument","expiry"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible derivative_instruments","tags":["Legacy Market Discovery"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/options/expired_expiries/{market}/{currency}":{"get":{"description":"V1-compatible market discovery. Current option maturities/instruments and derivative listings use their original snapshot selection, not an all-history catalogue. Option settlements and spot pairs use source document update times, not response time. Refreshed Deribit settlement rows distinguish exchange delivery events from contractual payout reconstructed using the official delivery index; reconstructed position quantity is unavailable (null). Native settlement metadata separates publication/check time from latest retained expiry and reports known unavailable delivery prices without certifying exchange-wide completeness. Older rows/documents may lack provenance/metadata. Legacy aliases retain exactly the seven original settlement fields. Expired futures returns each symbol’s latest retained observation within the requested window, for expiries before today UTC. It is not a settlement-price certificate. Parameters, units and missing values retain the legacy source contract. Existing subscriber rights/quota apply; x402 is not enabled. Scope option settlements by maturity to avoid a large all-expiry response.","operationId":"MarketDiscoveryController_settlements","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"maturity","required":false,"in":"query","description":"Exact expiry filter. Omit for all retained settlement rows.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds. Source last update for live series; response-generation minute for current discovery."},"data":{"type":"array","items":{"type":"object","properties":{"Date":{"type":"string","description":"Listed expiry date, DMMMYY; not collection time."},"Strike":{"nullable":true,"description":"Exercise price in the option underlying quote convention.","type":"number"},"OptionType":{"type":"string","description":"Source call/put label, preserved without recoding."},"mark_price":{"nullable":true,"description":"Source expiry option price per underlying unit, in the instrument settlement currency.","type":"number"},"mark_price_usd":{"nullable":true,"description":"Source USD value of that option price.","type":"number"},"position":{"nullable":true,"description":"Source retained position quantity; not trade count or USD notional. Null when unavailable, including delivery-price reconstructions.","type":"number"},"index_price":{"nullable":true,"description":"Source expiry index reference; quote units per underlying unit.","type":"number"}},"required":["Date","Strike","OptionType","mark_price","mark_price_usd","position","index_price"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible option_settlements","tags":["Legacy Market Discovery"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"maturity":{"type":"string","description":"Exact expiry filter. Omit for all retained settlement rows."}}}}}}}},"/api/v1/analytics/spot/spot_pairs/{market}":{"get":{"description":"V1-compatible market discovery. Current option maturities/instruments and derivative listings use their original snapshot selection, not an all-history catalogue. Option settlements and spot pairs use source document update times, not response time. Refreshed Deribit settlement rows distinguish exchange delivery events from contractual payout reconstructed using the official delivery index; reconstructed position quantity is unavailable (null). Native settlement metadata separates publication/check time from latest retained expiry and reports known unavailable delivery prices without certifying exchange-wide completeness. Older rows/documents may lack provenance/metadata. Legacy aliases retain exactly the seven original settlement fields. Expired futures returns each symbol’s latest retained observation within the requested window, for expiries before today UTC. It is not a settlement-price certificate. Parameters, units and missing values retain the legacy source contract. Existing subscriber rights/quota apply; x402 is not enabled. Scope option settlements by maturity to avoid a large all-expiry response.","operationId":"MarketDiscoveryController_spots","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix seconds. Source last update for live series; response-generation minute for current discovery."},"data":{"type":"array","items":{"type":"string","description":"Exact pair key from the current source document; casing and punctuation are preserved."}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible spot_pairs","tags":["Legacy Market Discovery"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/V2/historical/futures/expired_expiries/{market}/{currency}":{"get":{"description":"V1-compatible market discovery. Current option maturities/instruments and derivative listings use their original snapshot selection, not an all-history catalogue. Option settlements and spot pairs use source document update times, not response time. Refreshed Deribit settlement rows distinguish exchange delivery events from contractual payout reconstructed using the official delivery index; reconstructed position quantity is unavailable (null). Native settlement metadata separates publication/check time from latest retained expiry and reports known unavailable delivery prices without certifying exchange-wide completeness. Older rows/documents may lack provenance/metadata. Legacy aliases retain exactly the seven original settlement fields. Expired futures returns each symbol’s latest retained observation within the requested window, for expiries before today UTC. It is not a settlement-price certificate. Parameters, units and missing values retain the legacy source contract. Existing subscriber rights/quota apply; x402 is not enabled. Scope option settlements by maturity to avoid a large all-expiry response.","operationId":"MarketDiscoveryController_expiredFutures","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"type":"string"}},{"name":"select","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"UTC Unix milliseconds of the latest retained observation in the requested source window. Not the contract expiry or publication time."},"symbol":{"type":"string"},"price":{"nullable":true,"type":"number"},"index":{"nullable":true,"type":"number"},"volume":{"nullable":true,"type":"number"},"open_interest":{"nullable":true,"type":"number"}},"required":["date"],"additionalProperties":false}},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false}},"required":["items","meta"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible expired_futures","tags":["Legacy Market Discovery"]}},"/api/v1/derivatives/current-analytics":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_native","parameters":[{"name":"series","required":true,"in":"query","schema":{"enum":["perpetual_markets","futures_markets","currency_summary","perpetual_funding","futures_yield","market_oi_changes"],"type":"string"}},{"name":"exchange","required":false,"in":"query","description":"Required for perpetual_markets and futures_markets. Recent source venue identifier.","schema":{"type":"string"}},{"name":"currency","required":false,"in":"query","description":"Base asset. Required for perpetual_funding, futures_yield and market_oi_changes; optional for the other series.","schema":{"type":"string"}},{"name":"maturity","required":false,"in":"query","description":"futures_markets only: exact listed expiry DMMMYY, e.g. 25SEP26.","schema":{"type":"string"}},{"name":"venue_type","required":false,"in":"query","description":"Funding/OI changes only: centralized or decentralized legacy venue group.","schema":{"enum":["c","d"],"type":"string"}},{"name":"instrument_type","required":false,"in":"query","description":"Required for market_oi_changes only.","schema":{"enum":["all","future","perpetual"],"type":"string"}},{"name":"hours","required":false,"in":"query","description":"Required for market_oi_changes only; lookback hours, not days.","schema":{"enum":["1","2","4","8","12","18","24","48","168","336","504","720"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"dataset":{"type":"string","enum":["derivatives.current_analytics"]},"series":{"type":"string","enum":["perpetual_markets","futures_markets","currency_summary","perpetual_funding","futures_yield","market_oi_changes"]},"generated_at":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."}},"required":["dataset","series","generated_at"],"additionalProperties":false},"data":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"symbol":{"type":"string","description":"Exact exchange instrument identifier."},"base_currency":{"type":"string","description":"Legacy normalized base asset code."},"margin":{"type":"string","description":"Legacy margin category: coin or usd; not option call/put."},"index_price":{"nullable":true,"description":"Stored index reference, quote/USD units per underlying base unit according to source contract. Null means unavailable; zero remains zero.","type":"number"},"price":{"nullable":true,"description":"Legacy normalized derivative price; not an option premium or a historical candle. Null means unavailable; zero remains zero.","type":"number"},"basis":{"nullable":true,"description":"Stored futures/perpetual basis in the legacy source convention; not funding. Null means unavailable; zero remains zero.","type":"number"},"apy":{"nullable":true,"description":"Stored annualized yield in percent. For perpetuals this is funding yield; for futures it is annualized carry. Not compounded APY despite the legacy name. Null means unavailable; zero remains zero.","type":"number"},"open_interest":{"nullable":true,"description":"Open interest in USD. Null means unavailable; zero remains zero.","type":"number"},"open_interest_coin":{"nullable":true,"description":"Open interest in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"oi_volume24h":{"nullable":true,"description":"USD open interest divided by rolling 24-hour USD volume; dimensionless, not percent. Null means unavailable; zero remains zero.","type":"number"},"volume24h":{"nullable":true,"description":"Stored rolling 24-hour USD volume. Not volume since midnight. Null means unavailable; zero remains zero.","type":"number"},"volume24h_coin":{"nullable":true,"description":"Stored rolling 24-hour volume in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"bid":{"nullable":true,"description":"Best bid price at the selected snapshot, not a 24-hour high. Null means unavailable; zero remains zero.","type":"number"},"ask":{"nullable":true,"description":"Best ask price at the selected snapshot, not a 24-hour low. Null means unavailable; zero remains zero.","type":"number"},"bid_amount":{"nullable":true,"description":"Displayed best-bid size in the legacy source quantity convention; not 24-hour bid volume. Null means unavailable; zero remains zero.","type":"number"},"ask_amount":{"nullable":true,"description":"Displayed best-ask size in the legacy source quantity convention; not 24-hour ask volume. Null means unavailable; zero remains zero.","type":"number"},"liquidations":{"type":"object","properties":{"long":{"nullable":true,"description":"Rolling 24-hour USD amount of long positions liquidated, not buy volume. Null means unavailable; zero remains zero.","type":"number"},"short":{"nullable":true,"description":"Rolling 24-hour USD amount of short positions liquidated, not sell volume. Null means unavailable; zero remains zero.","type":"number"}},"required":["long","short"],"additionalProperties":false},"funding":{"nullable":true,"description":"Stored funding rate in percent for the source funding interval; not an annualized rate or universally eight-hour. Null means unavailable; zero remains zero.","type":"number"},"next_funding":{"nullable":true,"description":"Next announced funding rate in percent for the source interval. Null means unavailable; zero remains zero.","type":"number"},"long_short_ratio":{"nullable":true,"description":"Stored venue long/short ratio; not a cross-venue standardized metric. Null means unavailable; zero remains zero.","type":"number"},"avg_apr":{"nullable":true,"description":"Stored average annualized funding yield by lookback days, in percent.","type":"object","additionalProperties":{"nullable":true,"type":"number"}},"market_cap":{"nullable":true,"description":"Current market-cap enrichment in USD; omitted when no key exists. Null means unavailable; zero remains zero.","type":"number"},"realized_vol":{"description":"Current source realised-volatility map keyed by lookback days; omitted when unavailable.","nullable":true,"type":"object","additionalProperties":{"nullable":true,"type":"number"}}},"required":["symbol","base_currency","margin","index_price","price","basis","apy","open_interest","open_interest_coin","oi_volume24h","volume24h","volume24h_coin","bid","ask","bid_amount","ask_amount","liquidations","funding","next_funding","long_short_ratio","avg_apr"],"additionalProperties":false},{"type":"object","properties":{"symbol":{"type":"string","description":"Exact exchange instrument identifier."},"base_currency":{"type":"string","description":"Legacy normalized base asset code."},"margin":{"type":"string","description":"Legacy margin category: coin or usd; not option call/put."},"index_price":{"nullable":true,"description":"Stored index reference, quote/USD units per underlying base unit according to source contract. Null means unavailable; zero remains zero.","type":"number"},"price":{"nullable":true,"description":"Legacy normalized derivative price; not an option premium or a historical candle. Null means unavailable; zero remains zero.","type":"number"},"basis":{"nullable":true,"description":"Stored futures/perpetual basis in the legacy source convention; not funding. Null means unavailable; zero remains zero.","type":"number"},"apy":{"nullable":true,"description":"Stored annualized yield in percent. For perpetuals this is funding yield; for futures it is annualized carry. Not compounded APY despite the legacy name. Null means unavailable; zero remains zero.","type":"number"},"open_interest":{"nullable":true,"description":"Open interest in USD. Null means unavailable; zero remains zero.","type":"number"},"open_interest_coin":{"nullable":true,"description":"Open interest in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"oi_volume24h":{"nullable":true,"description":"USD open interest divided by rolling 24-hour USD volume; dimensionless, not percent. Null means unavailable; zero remains zero.","type":"number"},"volume24h":{"nullable":true,"description":"Stored rolling 24-hour USD volume. Not volume since midnight. Null means unavailable; zero remains zero.","type":"number"},"volume24h_coin":{"nullable":true,"description":"Stored rolling 24-hour volume in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"bid":{"nullable":true,"description":"Best bid price at the selected snapshot, not a 24-hour high. Null means unavailable; zero remains zero.","type":"number"},"ask":{"nullable":true,"description":"Best ask price at the selected snapshot, not a 24-hour low. Null means unavailable; zero remains zero.","type":"number"},"bid_amount":{"nullable":true,"description":"Displayed best-bid size in the legacy source quantity convention; not 24-hour bid volume. Null means unavailable; zero remains zero.","type":"number"},"ask_amount":{"nullable":true,"description":"Displayed best-ask size in the legacy source quantity convention; not 24-hour ask volume. Null means unavailable; zero remains zero.","type":"number"},"liquidations":{"type":"object","properties":{"long":{"nullable":true,"description":"Rolling 24-hour USD amount of long positions liquidated, not buy volume. Null means unavailable; zero remains zero.","type":"number"},"short":{"nullable":true,"description":"Rolling 24-hour USD amount of short positions liquidated, not sell volume. Null means unavailable; zero remains zero.","type":"number"}},"required":["long","short"],"additionalProperties":false}},"required":["symbol","base_currency","margin","index_price","price","basis","apy","open_interest","open_interest_coin","oi_volume24h","volume24h","volume24h_coin","bid","ask","bid_amount","ask_amount","liquidations"],"additionalProperties":false},{"type":"object","properties":{"currency":{"type":"string"},"price":{"nullable":true,"description":"Open-interest-weighted price across latest perpetual contract observations. Null means unavailable; zero remains zero.","type":"number"},"change":{"nullable":true,"description":"Absolute difference between current and approximately 24-hour-old weighted prices; not percent. Null means unavailable; zero remains zero.","type":"number"},"funding":{"nullable":true,"description":"Stored funding rate in percent for the source funding interval; not an annualized rate or universally eight-hour. Null means unavailable; zero remains zero.","type":"number"},"next_fr":{"nullable":true,"description":"Next announced funding rate in percent for the source interval. Null means unavailable; zero remains zero.","type":"number"},"yield":{"nullable":true,"description":"Stored annualized funding yield in percent; not compounded APY. Null means unavailable; zero remains zero.","type":"number"},"ls_ratio":{"nullable":true,"description":"Open-interest-weighted stored long/short ratio; venue definitions can differ. Null means unavailable; zero remains zero.","type":"number"},"open_interest":{"nullable":true,"description":"Sum of latest perpetual USD open-interest observations. Null means unavailable; zero remains zero.","type":"number"},"open_interest_notional":{"nullable":true,"description":"Sum of latest perpetual open interest in base-asset units, despite the legacy notional name. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_usd":{"nullable":true,"description":"Absolute USD OI change versus the approximately 24-hour-old comparison. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_usd_percentage":{"nullable":true,"description":"Relative USD OI change in percent. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_notional":{"nullable":true,"description":"Absolute OI change in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_notional_percentage":{"nullable":true,"description":"Relative base-unit OI change in percent. Null means unavailable; zero remains zero.","type":"number"},"volume":{"nullable":true,"description":"Sum of latest rolling 24-hour USD-volume observations. Null means unavailable; zero remains zero.","type":"number"},"volume_notional":{"nullable":true,"description":"Sum of latest rolling 24-hour volume in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"volume_change_usd":{"nullable":true,"description":"Difference between current and approximately 24-hour-old rolling USD-volume observations. Null means unavailable; zero remains zero.","type":"number"},"volume_change_usd_percentage":{"nullable":true,"description":"Relative change between those rolling USD-volume observations, in percent. Null means unavailable; zero remains zero.","type":"number"},"volume_change_notional":{"nullable":true,"description":"Difference between current and older rolling volume in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"volume_change_notional_percentage":{"nullable":true,"description":"Relative change between those rolling base-unit-volume observations, in percent. Null means unavailable; zero remains zero.","type":"number"},"oi_volume_24h":{"nullable":true,"description":"Current USD OI divided by current rolling 24-hour USD volume; dimensionless. Null means unavailable; zero remains zero.","type":"number"},"markets":{"type":"array","items":{"type":"string"},"description":"Distinct contributing venue keys; not a completeness certificate."},"market_cap":{"nullable":true,"description":"Current market-cap enrichment in USD, not a value measured at every contract timestamp. Null means unavailable; zero remains zero.","type":"number"},"realized_vol":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Current realised-volatility enrichment; keys are lookback days, values are the source percentage convention."},"sectors":{"type":"array","items":{"type":"string"},"description":"Current sector labels from the existing constituent feed."},"total_long_usd":{"nullable":true,"description":"Legacy duplicate of liquidations.long. Null means unavailable; zero remains zero.","type":"number"},"total_short_usd":{"nullable":true,"description":"Legacy duplicate of liquidations.short. Null means unavailable; zero remains zero.","type":"number"},"liquidations":{"type":"object","properties":{"long":{"nullable":true,"description":"Rolling 24-hour USD amount of long positions liquidated, not buy volume. Null means unavailable; zero remains zero.","type":"number"},"short":{"nullable":true,"description":"Rolling 24-hour USD amount of short positions liquidated, not sell volume. Null means unavailable; zero remains zero.","type":"number"}},"required":["long","short"],"additionalProperties":false}},"required":["currency","price","change","funding","next_fr","yield","ls_ratio","open_interest","open_interest_notional","open_interest_change_usd","open_interest_change_usd_percentage","open_interest_change_notional","open_interest_change_notional_percentage","volume","volume_notional","volume_change_usd","volume_change_usd_percentage","volume_change_notional","volume_change_notional_percentage","oi_volume_24h","markets","market_cap","realized_vol","sectors","total_long_usd","total_short_usd","liquidations"],"additionalProperties":false},{"type":"object","properties":{"market":{"type":"string"},"symbol":{"type":"string"},"funding":{"nullable":true,"description":"Stored funding rate in percent for the source funding interval; not an annualized rate or universally eight-hour. Null means unavailable; zero remains zero.","type":"number"},"next_fr":{"nullable":true,"description":"Next announced funding rate in percent for the source interval. Null means unavailable; zero remains zero.","type":"number"},"yield":{"nullable":true,"description":"Stored annualized funding yield in percent; not compounded APY. Null means unavailable; zero remains zero.","type":"number"}},"required":["market","symbol","funding","next_fr","yield"],"additionalProperties":false},{"type":"object","properties":{"market":{"type":"string"},"maturity":{"type":"string","description":"Listed expiry in DMMMYY format."},"value":{"nullable":true,"description":"Maximum stored annualized carry yield in percent among the selected market/expiry contracts, not their average. Null means unavailable; zero remains zero.","type":"number"}},"required":["market","maturity","value"],"additionalProperties":false},{"type":"object","properties":{"market":{"type":"string"},"open_interest_change":{"nullable":true,"description":"Latest minus earliest venue-total USD open interest across matching contracts, after resolving retained replacements. Uses the two matching global boundary timestamps in the lookback, including its two-minute buffer. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_perc":{"nullable":true,"description":"Relative change of venue-total USD OI, in percent; null when the earlier total is unavailable or zero. Null means unavailable; zero remains zero.","type":"number"},"open_interest_notional_change":{"nullable":true,"description":"Latest minus earliest venue-total OI in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"open_interest_notional_change_perc":{"nullable":true,"description":"Relative change of venue-total base-unit OI, in percent; null when the earlier total is unavailable or zero. Null means unavailable; zero remains zero.","type":"number"}},"required":["market","open_interest_change","open_interest_change_perc","open_interest_notional_change","open_interest_notional_change_perc"],"additionalProperties":false}]}}},"required":["meta","data"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"Current derivatives analytics","tags":["Current Derivatives Analytics"]}},"/api/v1/analytics/derivs/perpetuals/{market}":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_perpetuals","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."},"data":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string","description":"Exact exchange instrument identifier."},"base_currency":{"type":"string","description":"Legacy normalized base asset code."},"margin":{"type":"string","description":"Legacy margin category: coin or usd; not option call/put."},"index_price":{"nullable":true,"description":"Stored index reference, quote/USD units per underlying base unit according to source contract. Null means unavailable; zero remains zero.","type":"number"},"price":{"nullable":true,"description":"Legacy normalized derivative price; not an option premium or a historical candle. Null means unavailable; zero remains zero.","type":"number"},"basis":{"nullable":true,"description":"Stored futures/perpetual basis in the legacy source convention; not funding. Null means unavailable; zero remains zero.","type":"number"},"apy":{"nullable":true,"description":"Stored annualized yield in percent. For perpetuals this is funding yield; for futures it is annualized carry. Not compounded APY despite the legacy name. Null means unavailable; zero remains zero.","type":"number"},"open_interest":{"nullable":true,"description":"Open interest in USD. Null means unavailable; zero remains zero.","type":"number"},"open_interest_coin":{"nullable":true,"description":"Open interest in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"oi_volume24h":{"nullable":true,"description":"USD open interest divided by rolling 24-hour USD volume; dimensionless, not percent. Null means unavailable; zero remains zero.","type":"number"},"volume24h":{"nullable":true,"description":"Stored rolling 24-hour USD volume. Not volume since midnight. Null means unavailable; zero remains zero.","type":"number"},"volume24h_coin":{"nullable":true,"description":"Stored rolling 24-hour volume in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"bid":{"nullable":true,"description":"Best bid price at the selected snapshot, not a 24-hour high. Null means unavailable; zero remains zero.","type":"number"},"ask":{"nullable":true,"description":"Best ask price at the selected snapshot, not a 24-hour low. Null means unavailable; zero remains zero.","type":"number"},"bid_amount":{"nullable":true,"description":"Displayed best-bid size in the legacy source quantity convention; not 24-hour bid volume. Null means unavailable; zero remains zero.","type":"number"},"ask_amount":{"nullable":true,"description":"Displayed best-ask size in the legacy source quantity convention; not 24-hour ask volume. Null means unavailable; zero remains zero.","type":"number"},"liquidations":{"type":"object","properties":{"long":{"nullable":true,"description":"Rolling 24-hour USD amount of long positions liquidated, not buy volume. Null means unavailable; zero remains zero.","type":"number"},"short":{"nullable":true,"description":"Rolling 24-hour USD amount of short positions liquidated, not sell volume. Null means unavailable; zero remains zero.","type":"number"}},"required":["long","short"],"additionalProperties":false},"funding":{"nullable":true,"description":"Stored funding rate in percent for the source funding interval; not an annualized rate or universally eight-hour. Null means unavailable; zero remains zero.","type":"number"},"next_funding":{"nullable":true,"description":"Next announced funding rate in percent for the source interval. Null means unavailable; zero remains zero.","type":"number"},"long_short_ratio":{"nullable":true,"description":"Stored venue long/short ratio; not a cross-venue standardized metric. Null means unavailable; zero remains zero.","type":"number"},"avg_apr":{"nullable":true,"description":"Stored average annualized funding yield by lookback days, in percent.","type":"object","additionalProperties":{"nullable":true,"type":"number"}},"market_cap":{"nullable":true,"description":"Current market-cap enrichment in USD; omitted when no key exists. Null means unavailable; zero remains zero.","type":"number"},"realized_vol":{"description":"Current source realised-volatility map keyed by lookback days; omitted when unavailable.","nullable":true,"type":"object","additionalProperties":{"nullable":true,"type":"number"}}},"required":["symbol","base_currency","margin","index_price","price","basis","apy","open_interest","open_interest_coin","oi_volume24h","volume24h","volume24h_coin","bid","ask","bid_amount","ask_amount","liquidations","funding","next_funding","long_short_ratio","avg_apr"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible perpetual_markets","tags":["Current Derivatives Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/derivs/perpetuals/{market}/{currency}":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_perpetualsCurrency","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."},"data":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string","description":"Exact exchange instrument identifier."},"base_currency":{"type":"string","description":"Legacy normalized base asset code."},"margin":{"type":"string","description":"Legacy margin category: coin or usd; not option call/put."},"index_price":{"nullable":true,"description":"Stored index reference, quote/USD units per underlying base unit according to source contract. Null means unavailable; zero remains zero.","type":"number"},"price":{"nullable":true,"description":"Legacy normalized derivative price; not an option premium or a historical candle. Null means unavailable; zero remains zero.","type":"number"},"basis":{"nullable":true,"description":"Stored futures/perpetual basis in the legacy source convention; not funding. Null means unavailable; zero remains zero.","type":"number"},"apy":{"nullable":true,"description":"Stored annualized yield in percent. For perpetuals this is funding yield; for futures it is annualized carry. Not compounded APY despite the legacy name. Null means unavailable; zero remains zero.","type":"number"},"open_interest":{"nullable":true,"description":"Open interest in USD. Null means unavailable; zero remains zero.","type":"number"},"open_interest_coin":{"nullable":true,"description":"Open interest in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"oi_volume24h":{"nullable":true,"description":"USD open interest divided by rolling 24-hour USD volume; dimensionless, not percent. Null means unavailable; zero remains zero.","type":"number"},"volume24h":{"nullable":true,"description":"Stored rolling 24-hour USD volume. Not volume since midnight. Null means unavailable; zero remains zero.","type":"number"},"volume24h_coin":{"nullable":true,"description":"Stored rolling 24-hour volume in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"bid":{"nullable":true,"description":"Best bid price at the selected snapshot, not a 24-hour high. Null means unavailable; zero remains zero.","type":"number"},"ask":{"nullable":true,"description":"Best ask price at the selected snapshot, not a 24-hour low. Null means unavailable; zero remains zero.","type":"number"},"bid_amount":{"nullable":true,"description":"Displayed best-bid size in the legacy source quantity convention; not 24-hour bid volume. Null means unavailable; zero remains zero.","type":"number"},"ask_amount":{"nullable":true,"description":"Displayed best-ask size in the legacy source quantity convention; not 24-hour ask volume. Null means unavailable; zero remains zero.","type":"number"},"liquidations":{"type":"object","properties":{"long":{"nullable":true,"description":"Rolling 24-hour USD amount of long positions liquidated, not buy volume. Null means unavailable; zero remains zero.","type":"number"},"short":{"nullable":true,"description":"Rolling 24-hour USD amount of short positions liquidated, not sell volume. Null means unavailable; zero remains zero.","type":"number"}},"required":["long","short"],"additionalProperties":false},"funding":{"nullable":true,"description":"Stored funding rate in percent for the source funding interval; not an annualized rate or universally eight-hour. Null means unavailable; zero remains zero.","type":"number"},"next_funding":{"nullable":true,"description":"Next announced funding rate in percent for the source interval. Null means unavailable; zero remains zero.","type":"number"},"long_short_ratio":{"nullable":true,"description":"Stored venue long/short ratio; not a cross-venue standardized metric. Null means unavailable; zero remains zero.","type":"number"},"avg_apr":{"nullable":true,"description":"Stored average annualized funding yield by lookback days, in percent.","type":"object","additionalProperties":{"nullable":true,"type":"number"}},"market_cap":{"nullable":true,"description":"Current market-cap enrichment in USD; omitted when no key exists. Null means unavailable; zero remains zero.","type":"number"},"realized_vol":{"description":"Current source realised-volatility map keyed by lookback days; omitted when unavailable.","nullable":true,"type":"object","additionalProperties":{"nullable":true,"type":"number"}}},"required":["symbol","base_currency","margin","index_price","price","basis","apy","open_interest","open_interest_coin","oi_volume24h","volume24h","volume24h_coin","bid","ask","bid_amount","ask_amount","liquidations","funding","next_funding","long_short_ratio","avg_apr"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible perpetual_markets","tags":["Current Derivatives Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/derivs/futures/{market}":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_futures","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."},"data":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string","description":"Exact exchange instrument identifier."},"base_currency":{"type":"string","description":"Legacy normalized base asset code."},"margin":{"type":"string","description":"Legacy margin category: coin or usd; not option call/put."},"index_price":{"nullable":true,"description":"Stored index reference, quote/USD units per underlying base unit according to source contract. Null means unavailable; zero remains zero.","type":"number"},"price":{"nullable":true,"description":"Legacy normalized derivative price; not an option premium or a historical candle. Null means unavailable; zero remains zero.","type":"number"},"basis":{"nullable":true,"description":"Stored futures/perpetual basis in the legacy source convention; not funding. Null means unavailable; zero remains zero.","type":"number"},"apy":{"nullable":true,"description":"Stored annualized yield in percent. For perpetuals this is funding yield; for futures it is annualized carry. Not compounded APY despite the legacy name. Null means unavailable; zero remains zero.","type":"number"},"open_interest":{"nullable":true,"description":"Open interest in USD. Null means unavailable; zero remains zero.","type":"number"},"open_interest_coin":{"nullable":true,"description":"Open interest in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"oi_volume24h":{"nullable":true,"description":"USD open interest divided by rolling 24-hour USD volume; dimensionless, not percent. Null means unavailable; zero remains zero.","type":"number"},"volume24h":{"nullable":true,"description":"Stored rolling 24-hour USD volume. Not volume since midnight. Null means unavailable; zero remains zero.","type":"number"},"volume24h_coin":{"nullable":true,"description":"Stored rolling 24-hour volume in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"bid":{"nullable":true,"description":"Best bid price at the selected snapshot, not a 24-hour high. Null means unavailable; zero remains zero.","type":"number"},"ask":{"nullable":true,"description":"Best ask price at the selected snapshot, not a 24-hour low. Null means unavailable; zero remains zero.","type":"number"},"bid_amount":{"nullable":true,"description":"Displayed best-bid size in the legacy source quantity convention; not 24-hour bid volume. Null means unavailable; zero remains zero.","type":"number"},"ask_amount":{"nullable":true,"description":"Displayed best-ask size in the legacy source quantity convention; not 24-hour ask volume. Null means unavailable; zero remains zero.","type":"number"},"liquidations":{"type":"object","properties":{"long":{"nullable":true,"description":"Rolling 24-hour USD amount of long positions liquidated, not buy volume. Null means unavailable; zero remains zero.","type":"number"},"short":{"nullable":true,"description":"Rolling 24-hour USD amount of short positions liquidated, not sell volume. Null means unavailable; zero remains zero.","type":"number"}},"required":["long","short"],"additionalProperties":false}},"required":["symbol","base_currency","margin","index_price","price","basis","apy","open_interest","open_interest_coin","oi_volume24h","volume24h","volume24h_coin","bid","ask","bid_amount","ask_amount","liquidations"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible futures_markets","tags":["Current Derivatives Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/derivs/futures/{market}/{currency}/{maturity}":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_futuresMaturity","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"maturity","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."},"data":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string","description":"Exact exchange instrument identifier."},"base_currency":{"type":"string","description":"Legacy normalized base asset code."},"margin":{"type":"string","description":"Legacy margin category: coin or usd; not option call/put."},"index_price":{"nullable":true,"description":"Stored index reference, quote/USD units per underlying base unit according to source contract. Null means unavailable; zero remains zero.","type":"number"},"price":{"nullable":true,"description":"Legacy normalized derivative price; not an option premium or a historical candle. Null means unavailable; zero remains zero.","type":"number"},"basis":{"nullable":true,"description":"Stored futures/perpetual basis in the legacy source convention; not funding. Null means unavailable; zero remains zero.","type":"number"},"apy":{"nullable":true,"description":"Stored annualized yield in percent. For perpetuals this is funding yield; for futures it is annualized carry. Not compounded APY despite the legacy name. Null means unavailable; zero remains zero.","type":"number"},"open_interest":{"nullable":true,"description":"Open interest in USD. Null means unavailable; zero remains zero.","type":"number"},"open_interest_coin":{"nullable":true,"description":"Open interest in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"oi_volume24h":{"nullable":true,"description":"USD open interest divided by rolling 24-hour USD volume; dimensionless, not percent. Null means unavailable; zero remains zero.","type":"number"},"volume24h":{"nullable":true,"description":"Stored rolling 24-hour USD volume. Not volume since midnight. Null means unavailable; zero remains zero.","type":"number"},"volume24h_coin":{"nullable":true,"description":"Stored rolling 24-hour volume in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"bid":{"nullable":true,"description":"Best bid price at the selected snapshot, not a 24-hour high. Null means unavailable; zero remains zero.","type":"number"},"ask":{"nullable":true,"description":"Best ask price at the selected snapshot, not a 24-hour low. Null means unavailable; zero remains zero.","type":"number"},"bid_amount":{"nullable":true,"description":"Displayed best-bid size in the legacy source quantity convention; not 24-hour bid volume. Null means unavailable; zero remains zero.","type":"number"},"ask_amount":{"nullable":true,"description":"Displayed best-ask size in the legacy source quantity convention; not 24-hour ask volume. Null means unavailable; zero remains zero.","type":"number"},"liquidations":{"type":"object","properties":{"long":{"nullable":true,"description":"Rolling 24-hour USD amount of long positions liquidated, not buy volume. Null means unavailable; zero remains zero.","type":"number"},"short":{"nullable":true,"description":"Rolling 24-hour USD amount of short positions liquidated, not sell volume. Null means unavailable; zero remains zero.","type":"number"}},"required":["long","short"],"additionalProperties":false}},"required":["symbol","base_currency","margin","index_price","price","basis","apy","open_interest","open_interest_coin","oi_volume24h","volume24h","volume24h_coin","bid","ask","bid_amount","ask_amount","liquidations"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible futures_markets","tags":["Current Derivatives Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/derivs/summary":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_summary","parameters":[],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."},"data":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string"},"price":{"nullable":true,"description":"Open-interest-weighted price across latest perpetual contract observations. Null means unavailable; zero remains zero.","type":"number"},"change":{"nullable":true,"description":"Absolute difference between current and approximately 24-hour-old weighted prices; not percent. Null means unavailable; zero remains zero.","type":"number"},"funding":{"nullable":true,"description":"Stored funding rate in percent for the source funding interval; not an annualized rate or universally eight-hour. Null means unavailable; zero remains zero.","type":"number"},"next_fr":{"nullable":true,"description":"Next announced funding rate in percent for the source interval. Null means unavailable; zero remains zero.","type":"number"},"yield":{"nullable":true,"description":"Stored annualized funding yield in percent; not compounded APY. Null means unavailable; zero remains zero.","type":"number"},"ls_ratio":{"nullable":true,"description":"Open-interest-weighted stored long/short ratio; venue definitions can differ. Null means unavailable; zero remains zero.","type":"number"},"open_interest":{"nullable":true,"description":"Sum of latest perpetual USD open-interest observations. Null means unavailable; zero remains zero.","type":"number"},"open_interest_notional":{"nullable":true,"description":"Sum of latest perpetual open interest in base-asset units, despite the legacy notional name. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_usd":{"nullable":true,"description":"Absolute USD OI change versus the approximately 24-hour-old comparison. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_usd_percentage":{"nullable":true,"description":"Relative USD OI change in percent. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_notional":{"nullable":true,"description":"Absolute OI change in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_notional_percentage":{"nullable":true,"description":"Relative base-unit OI change in percent. Null means unavailable; zero remains zero.","type":"number"},"volume":{"nullable":true,"description":"Sum of latest rolling 24-hour USD-volume observations. Null means unavailable; zero remains zero.","type":"number"},"volume_notional":{"nullable":true,"description":"Sum of latest rolling 24-hour volume in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"volume_change_usd":{"nullable":true,"description":"Difference between current and approximately 24-hour-old rolling USD-volume observations. Null means unavailable; zero remains zero.","type":"number"},"volume_change_usd_percentage":{"nullable":true,"description":"Relative change between those rolling USD-volume observations, in percent. Null means unavailable; zero remains zero.","type":"number"},"volume_change_notional":{"nullable":true,"description":"Difference between current and older rolling volume in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"volume_change_notional_percentage":{"nullable":true,"description":"Relative change between those rolling base-unit-volume observations, in percent. Null means unavailable; zero remains zero.","type":"number"},"oi_volume_24h":{"nullable":true,"description":"Current USD OI divided by current rolling 24-hour USD volume; dimensionless. Null means unavailable; zero remains zero.","type":"number"},"markets":{"type":"array","items":{"type":"string"},"description":"Distinct contributing venue keys; not a completeness certificate."},"market_cap":{"nullable":true,"description":"Current market-cap enrichment in USD, not a value measured at every contract timestamp. Null means unavailable; zero remains zero.","type":"number"},"realized_vol":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Current realised-volatility enrichment; keys are lookback days, values are the source percentage convention."},"sectors":{"type":"array","items":{"type":"string"},"description":"Current sector labels from the existing constituent feed."},"total_long_usd":{"nullable":true,"description":"Legacy duplicate of liquidations.long. Null means unavailable; zero remains zero.","type":"number"},"total_short_usd":{"nullable":true,"description":"Legacy duplicate of liquidations.short. Null means unavailable; zero remains zero.","type":"number"},"liquidations":{"type":"object","properties":{"long":{"nullable":true,"description":"Rolling 24-hour USD amount of long positions liquidated, not buy volume. Null means unavailable; zero remains zero.","type":"number"},"short":{"nullable":true,"description":"Rolling 24-hour USD amount of short positions liquidated, not sell volume. Null means unavailable; zero remains zero.","type":"number"}},"required":["long","short"],"additionalProperties":false}},"required":["currency","price","change","funding","next_fr","yield","ls_ratio","open_interest","open_interest_notional","open_interest_change_usd","open_interest_change_usd_percentage","open_interest_change_notional","open_interest_change_notional_percentage","volume","volume_notional","volume_change_usd","volume_change_usd_percentage","volume_change_notional","volume_change_notional_percentage","oi_volume_24h","markets","market_cap","realized_vol","sectors","total_long_usd","total_short_usd","liquidations"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible currency_summary","tags":["Current Derivatives Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/derivs/summary/{currency}":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_summaryCurrency","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."},"data":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string"},"price":{"nullable":true,"description":"Open-interest-weighted price across latest perpetual contract observations. Null means unavailable; zero remains zero.","type":"number"},"change":{"nullable":true,"description":"Absolute difference between current and approximately 24-hour-old weighted prices; not percent. Null means unavailable; zero remains zero.","type":"number"},"funding":{"nullable":true,"description":"Stored funding rate in percent for the source funding interval; not an annualized rate or universally eight-hour. Null means unavailable; zero remains zero.","type":"number"},"next_fr":{"nullable":true,"description":"Next announced funding rate in percent for the source interval. Null means unavailable; zero remains zero.","type":"number"},"yield":{"nullable":true,"description":"Stored annualized funding yield in percent; not compounded APY. Null means unavailable; zero remains zero.","type":"number"},"ls_ratio":{"nullable":true,"description":"Open-interest-weighted stored long/short ratio; venue definitions can differ. Null means unavailable; zero remains zero.","type":"number"},"open_interest":{"nullable":true,"description":"Sum of latest perpetual USD open-interest observations. Null means unavailable; zero remains zero.","type":"number"},"open_interest_notional":{"nullable":true,"description":"Sum of latest perpetual open interest in base-asset units, despite the legacy notional name. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_usd":{"nullable":true,"description":"Absolute USD OI change versus the approximately 24-hour-old comparison. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_usd_percentage":{"nullable":true,"description":"Relative USD OI change in percent. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_notional":{"nullable":true,"description":"Absolute OI change in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_notional_percentage":{"nullable":true,"description":"Relative base-unit OI change in percent. Null means unavailable; zero remains zero.","type":"number"},"volume":{"nullable":true,"description":"Sum of latest rolling 24-hour USD-volume observations. Null means unavailable; zero remains zero.","type":"number"},"volume_notional":{"nullable":true,"description":"Sum of latest rolling 24-hour volume in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"volume_change_usd":{"nullable":true,"description":"Difference between current and approximately 24-hour-old rolling USD-volume observations. Null means unavailable; zero remains zero.","type":"number"},"volume_change_usd_percentage":{"nullable":true,"description":"Relative change between those rolling USD-volume observations, in percent. Null means unavailable; zero remains zero.","type":"number"},"volume_change_notional":{"nullable":true,"description":"Difference between current and older rolling volume in base-asset units. Null means unavailable; zero remains zero.","type":"number"},"volume_change_notional_percentage":{"nullable":true,"description":"Relative change between those rolling base-unit-volume observations, in percent. Null means unavailable; zero remains zero.","type":"number"},"oi_volume_24h":{"nullable":true,"description":"Current USD OI divided by current rolling 24-hour USD volume; dimensionless. Null means unavailable; zero remains zero.","type":"number"},"markets":{"type":"array","items":{"type":"string"},"description":"Distinct contributing venue keys; not a completeness certificate."},"market_cap":{"nullable":true,"description":"Current market-cap enrichment in USD, not a value measured at every contract timestamp. Null means unavailable; zero remains zero.","type":"number"},"realized_vol":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Current realised-volatility enrichment; keys are lookback days, values are the source percentage convention."},"sectors":{"type":"array","items":{"type":"string"},"description":"Current sector labels from the existing constituent feed."},"total_long_usd":{"nullable":true,"description":"Legacy duplicate of liquidations.long. Null means unavailable; zero remains zero.","type":"number"},"total_short_usd":{"nullable":true,"description":"Legacy duplicate of liquidations.short. Null means unavailable; zero remains zero.","type":"number"},"liquidations":{"type":"object","properties":{"long":{"nullable":true,"description":"Rolling 24-hour USD amount of long positions liquidated, not buy volume. Null means unavailable; zero remains zero.","type":"number"},"short":{"nullable":true,"description":"Rolling 24-hour USD amount of short positions liquidated, not sell volume. Null means unavailable; zero remains zero.","type":"number"}},"required":["long","short"],"additionalProperties":false}},"required":["currency","price","change","funding","next_fr","yield","ls_ratio","open_interest","open_interest_notional","open_interest_change_usd","open_interest_change_usd_percentage","open_interest_change_notional","open_interest_change_notional_percentage","volume","volume_notional","volume_change_usd","volume_change_usd_percentage","volume_change_notional","volume_change_notional_percentage","oi_volume_24h","markets","market_cap","realized_vol","sectors","total_long_usd","total_short_usd","liquidations"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible currency_summary","tags":["Current Derivatives Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/futures/perpetual_funding/{currency}":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_funding","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."},"data":{"type":"array","items":{"type":"object","properties":{"market":{"type":"string"},"symbol":{"type":"string"},"funding":{"nullable":true,"description":"Stored funding rate in percent for the source funding interval; not an annualized rate or universally eight-hour. Null means unavailable; zero remains zero.","type":"number"},"next_fr":{"nullable":true,"description":"Next announced funding rate in percent for the source interval. Null means unavailable; zero remains zero.","type":"number"},"yield":{"nullable":true,"description":"Stored annualized funding yield in percent; not compounded APY. Null means unavailable; zero remains zero.","type":"number"}},"required":["market","symbol","funding","next_fr","yield"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible perpetual_funding","tags":["Current Derivatives Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/futures/perpetual_funding/{currency}/{type}":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_fundingVenues","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"type","required":true,"in":"path","description":"Centralized or decentralized legacy venue group, not collateral.","schema":{"enum":["c","d"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."},"data":{"type":"array","items":{"type":"object","properties":{"market":{"type":"string"},"symbol":{"type":"string"},"funding":{"nullable":true,"description":"Stored funding rate in percent for the source funding interval; not an annualized rate or universally eight-hour. Null means unavailable; zero remains zero.","type":"number"},"next_fr":{"nullable":true,"description":"Next announced funding rate in percent for the source interval. Null means unavailable; zero remains zero.","type":"number"},"yield":{"nullable":true,"description":"Stored annualized funding yield in percent; not compounded APY. Null means unavailable; zero remains zero.","type":"number"}},"required":["market","symbol","funding","next_fr","yield"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible perpetual_funding","tags":["Current Derivatives Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/futures/futures_yield/{currency}":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_yield","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."},"data":{"type":"array","items":{"type":"object","properties":{"market":{"type":"string"},"maturity":{"type":"string","description":"Listed expiry in DMMMYY format."},"value":{"nullable":true,"description":"Maximum stored annualized carry yield in percent among the selected market/expiry contracts, not their average. Null means unavailable; zero remains zero.","type":"number"}},"required":["market","maturity","value"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible futures_yield","tags":["Current Derivatives Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/futures/markets_oi_gainers_and_losers/{currency}/{option}/{param}":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_oiChanges","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"option","required":true,"in":"path","description":"Derivative instrument family, not an option call/put.","schema":{"enum":["all","future","perpetual"],"type":"string"}},{"name":"param","required":true,"in":"path","description":"Lookback hours.","schema":{"enum":["1","2","4","8","12","18","24","48","168","336","504","720"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."},"data":{"type":"array","items":{"type":"object","properties":{"market":{"type":"string"},"open_interest_change":{"nullable":true,"description":"Latest minus earliest venue-total USD open interest across matching contracts, after resolving retained replacements. Uses the two matching global boundary timestamps in the lookback, including its two-minute buffer. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_perc":{"nullable":true,"description":"Relative change of venue-total USD OI, in percent; null when the earlier total is unavailable or zero. Null means unavailable; zero remains zero.","type":"number"},"open_interest_notional_change":{"nullable":true,"description":"Latest minus earliest venue-total OI in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"open_interest_notional_change_perc":{"nullable":true,"description":"Relative change of venue-total base-unit OI, in percent; null when the earlier total is unavailable or zero. Null means unavailable; zero remains zero.","type":"number"}},"required":["market","open_interest_change","open_interest_change_perc","open_interest_notional_change","open_interest_notional_change_perc"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible market_oi_changes","tags":["Current Derivatives Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/analytics/futures/markets_oi_gainers_and_losers/{currency}/{option}/{param}/{type}":{"get":{"description":"Current legacy derivatives analytics, not a historical candle series. Perpetual snapshots use each contract's latest observation in five minutes; summaries compare those with approximately 24 hours earlier. Funding/yield use the latest matching snapshot in 62 minutes. OI changes compare corrected v1 venue totals across matching contracts, resolving retained replacements. USD versus base-asset units, percentages and lookback semantics are documented per field. Response generation time is not an as-of publication certificate. Results can be cached for 45 seconds. Existing subscriber rights and shared quota apply; x402 is not enabled.","operationId":"DerivativesAnalyticsController_oiChangesVenues","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"option","required":true,"in":"path","description":"Derivative instrument family, not an option call/put.","schema":{"enum":["all","future","perpetual"],"type":"string"}},{"name":"param","required":true,"in":"path","description":"Lookback hours.","schema":{"enum":["1","2","4","8","12","18","24","48","168","336","504","720"],"type":"string"}},{"name":"type","required":true,"in":"path","description":"Centralized or decentralized legacy venue group, not collateral.","schema":{"enum":["c","d"],"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Response generation time, Unix seconds UTC. Not a source publication timestamp; components can have different observation times."},"data":{"type":"array","items":{"type":"object","properties":{"market":{"type":"string"},"open_interest_change":{"nullable":true,"description":"Latest minus earliest venue-total USD open interest across matching contracts, after resolving retained replacements. Uses the two matching global boundary timestamps in the lookback, including its two-minute buffer. Null means unavailable; zero remains zero.","type":"number"},"open_interest_change_perc":{"nullable":true,"description":"Relative change of venue-total USD OI, in percent; null when the earlier total is unavailable or zero. Null means unavailable; zero remains zero.","type":"number"},"open_interest_notional_change":{"nullable":true,"description":"Latest minus earliest venue-total OI in base-asset units, not USD. Null means unavailable; zero remains zero.","type":"number"},"open_interest_notional_change_perc":{"nullable":true,"description":"Relative change of venue-total base-unit OI, in percent; null when the earlier total is unavailable or zero. Null means unavailable; zero remains zero.","type":"number"}},"required":["market","open_interest_change","open_interest_change_perc","open_interest_notional_change","open_interest_notional_change_perc"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible market_oi_changes","tags":["Current Derivatives Analytics"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"}}},"/api/v1/spot/candle-history":{"get":{"description":"Retained v1 spot candles (open, high, low, close, volume_base, volume_quote) served natively on v2. A separate retained source from modern /spot/ohlcvt: no VWAP, trade counts or buy/sell split. Before 2024-01-01 stored candles of the requested period are returned. From 2024-01-01 candles are built from stored minute rows (first open, highest high, lowest low, last close, summed volumes); for 1h and 1d a bucket without minute rows falls back to stored same-period rows, while 5m, 15m and 30m use minute rows only. Missing candles are not synthesized.\n\nFrom 2024-01-01: UTC candle start, which can precede the requested start for a clipped edge bucket. Before 2024-01-01: the stored candle timestamp as retained; its candle-start labeling is not separately verified.\n\nPeriods 1m, 5m, 15m, 30m, 1h and 1d (no 4h). UTC buckets from 2024-01-01; stored requested-period candles before.\n\nExplicit timezone-qualified start/end, inclusive after truncation to seconds. Bounds filter source rows BEFORE bucketing, so edge candles can be partial and moving a bound can change their values or the 1h/1d fallback choice. page/limit (default 10, maximum 1440) and total count candles. instrument_name is lowercased; separators are not rewritten. Compatibility aliases keep v1 date-only whole-day bounds, the omitted-end default and legacy pagination accounting; use the route mapping for equivalent requests.\n\nQuote currency per one base unit; not mark or index price.\n\nTraded base-asset quantity summed over the selected source rows; not USD or rolling 24-hour volume.\n\nTraded quote-asset quantity; BTC-USDT quote volume is USDT, not certified USD.\n\nSpot pairs retained for the exchange, matched case-insensitively; not today's spot catalog. Subscriber history only; x402 is not enabled.\n\nNo data-coverage endpoint is declared for this retained reader, and its response availability coverage bounds are null. Page totals are not archive bounds; an accepted selector does not establish that rows exist. Modern dataset coverage does not bound these older generations.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: spot.retained_candles. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.\n\nAvailable to eligible subscribers when enabled; API key or OAuth uses the same account history rights. x402 is not enabled. Field guide: https://apiv2.laevitas.ch/migration/v1-to-v2/history-field-guide.md.","operationId":"MarketHistoryController_spot","parameters":[{"name":"exchange","required":true,"in":"query","schema":{"type":"string","maxLength":64,"pattern":"^[a-z0-9]+(?:[-_][a-z0-9]+)*$","description":"Lowercase exchange selector. Liquidations also accept aggregated, meaning all retained markets."}},{"name":"start","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive ISO-8601 instant with timezone, truncated to seconds. Spot edge candles use only source observations inside the requested bounds."}},{"name":"end","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive ISO-8601 instant with timezone, truncated to seconds. Not an exclusive boundary or an implicit full UTC day."}},{"name":"page","required":false,"in":"query","schema":{"default":1,"description":"One-based output-row page. A liquidation page can split the long and short rows at one timestamp.","type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"default":10,"description":"Output rows per page, not timestamps. Default 10; maximum 1440.","type":"integer","minimum":1,"maximum":1440}},{"name":"instrument_name","required":true,"in":"query","schema":{"type":"string","minLength":1,"maxLength":256,"description":"Retained spot pair identifier, e.g. BTC-USDT on coinbase. Compared case-insensitively, but separators are not rewritten. Not an option or derivative instrument."}},{"name":"resolution","required":true,"in":"query","schema":{"type":"string","enum":["1m","5m","15m","30m","1h","1d"],"description":"UTC candle period. OHLC and volume aggregate selected source observations; incomplete edge buckets are not full-period candles."}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["spot.retained_candles"]},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Unix epoch milliseconds, UTC. Spot: candle start (possibly before requested start for a clipped edge). Liquidations: original stored observation timestamp, not publication time."},"open":{"nullable":true,"description":"Quote-currency units per one base unit; earliest selected source open. Not necessarily the full candle open when start clips the bucket.","type":"number"},"high":{"nullable":true,"description":"Maximum selected source high, in quote currency per base unit.","type":"number"},"low":{"nullable":true,"description":"Minimum selected source low, in quote currency per base unit.","type":"number"},"close":{"nullable":true,"description":"Latest selected source close, in quote currency per base unit. Not mark/index price.","type":"number"},"volume_base":{"nullable":true,"description":"Sum of traded base-asset quantity from selected source candles; not USD notional or rolling 24-hour volume. Old-generation candles retain their stored volume.","type":"number"},"volume_quote":{"nullable":true,"description":"Sum of traded quote-asset quantity from selected source candles. For BTC-USDT this is USDT, not certified USD. Old-generation candles retain their stored volume.","type":"number"}},"required":["date","open","high","low","close","volume_base","volume_quote"],"additionalProperties":false}},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"availability":{"type":"object","properties":{"empty_reason":{"nullable":true,"type":"string","enum":["classification_unavailable"]},"coverage":{"type":"object","properties":{"source_id":{"type":"string","enum":["spot.retained_candles"]},"exchange_supported":{"nullable":true,"type":"boolean","enum":[true]},"instrument_eligible":{"type":"string","nullable":true,"enum":[null]},"earliest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"latest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["source_id","exchange_supported","instrument_eligible","earliest_observed_at","latest_observed_at"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","enum":["unavailable"]},"certification":{"type":"string","nullable":true,"enum":[null]},"complete_from":{"type":"string","nullable":true,"enum":[null]},"complete_through":{"type":"string","nullable":true,"enum":[null]},"complete_from_inclusive":{"type":"boolean","enum":[true]},"complete_through_inclusive":{"type":"boolean","enum":[false]},"monotonic":{"type":"boolean","enum":[false]},"monotonic_boundary":{"type":"string","enum":["complete_through"]},"revisions_possible":{"type":"boolean","enum":[true]},"certified_at":{"type":"string","nullable":true,"enum":[null]},"updated_at":{"type":"string","nullable":true,"enum":[null]},"unavailable_reason":{"type":"string","enum":["not_supported"]},"scope":{"type":"object","properties":{"endpoint_id":{"type":"string","enum":["spot.retained_candles"]},"source_ids":{"type":"array","items":{"type":"string"}},"exchange":{"nullable":true,"type":"string"},"instrument_name":{"nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"}},"required":["endpoint_id","source_ids","exchange","instrument_name","currency"],"additionalProperties":false}},"required":["status","certification","complete_from","complete_through","complete_from_inclusive","complete_through_inclusive","monotonic","monotonic_boundary","revisions_possible","certified_at","updated_at","unavailable_reason","scope"],"additionalProperties":false}},"required":["empty_reason","coverage","completeness"],"additionalProperties":false},"count_basis":{"type":"string","enum":["candles"],"description":"What total, limit and pagination count; liquidation long/short rows may occupy separate pages."}},"required":["total","items","page","total_pages","limit","availability","count_basis"],"additionalProperties":false}},"required":["dataset_id","items","meta"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"Retained spot candles","tags":["Retained Spot and Liquidation History"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"type":"string","maxLength":64,"pattern":"^[a-z0-9]+(?:[-_][a-z0-9]+)*$","description":"Lowercase exchange selector. Liquidations also accept aggregated, meaning all retained markets."},"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive ISO-8601 instant with timezone, truncated to seconds. Spot edge candles use only source observations inside the requested bounds."},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive ISO-8601 instant with timezone, truncated to seconds. Not an exclusive boundary or an implicit full UTC day."},"page":{"default":1,"description":"One-based output-row page. A liquidation page can split the long and short rows at one timestamp.","type":"integer","minimum":1,"maximum":9007199254740991},"limit":{"default":10,"description":"Output rows per page, not timestamps. Default 10; maximum 1440.","type":"integer","minimum":1,"maximum":1440},"instrument_name":{"type":"string","minLength":1,"maxLength":256,"description":"Retained spot pair identifier, e.g. BTC-USDT on coinbase. Compared case-insensitively, but separators are not rewritten. Not an option or derivative instrument."},"resolution":{"type":"string","enum":["1m","5m","15m","30m","1h","1d"],"description":"UTC candle period. OHLC and volume aggregate selected source observations; incomplete edge buckets are not full-period candles."}},"required":["exchange","start","end","instrument_name","resolution"]}}}}}},"/api/v1/derivatives/liquidation-history":{"get":{"description":"Retained USD liquidation amounts, one row per source timestamp and liquidated position side. Long means long positions liquidated, not buys. Resolution samples the UTC observation grid; 1d is the midnight observation, NOT a daily sum. Sums retained contract contributions at each selected source timestamp after replacement. aggregated includes all retained markets, not only active venues. Missing sides stay absent, not zero. Closed timestamps may still receive revisions; no finite finalization delay is certified.","operationId":"MarketHistoryController_liquidations","parameters":[{"name":"exchange","required":true,"in":"query","schema":{"type":"string","enum":["aggregated","binance","bitfinex","bitmex","bybit","deribit","ftx","huobi","hyperliquid","kraken","lighter","nado","okx"],"description":"Retained exchange selector, or aggregated for all retained markets. Selector acceptance does not certify that a venue has data in this window."}},{"name":"start","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive ISO-8601 instant with timezone, truncated to seconds. Spot edge candles use only source observations inside the requested bounds."}},{"name":"end","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive ISO-8601 instant with timezone, truncated to seconds. Not an exclusive boundary or an implicit full UTC day."}},{"name":"page","required":false,"in":"query","schema":{"default":1,"description":"One-based output-row page. A liquidation page can split the long and short rows at one timestamp.","type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"default":10,"description":"Output rows per page, not timestamps. Default 10; maximum 1440.","type":"integer","minimum":1,"maximum":1440}},{"name":"currency","required":true,"in":"query","schema":{"type":"string","maxLength":32,"pattern":"^[A-Za-z0-9][A-Za-z0-9_-]*$","description":"Exact case-sensitive retained base-currency selector, normally BTC or ETH. This is not the settlement or reporting currency; usd_amount is USD."}},{"name":"resolution","required":false,"in":"query","schema":{"default":"native","description":"Sample grid, NOT an aggregation period. 1h selects minute-zero observations; 1d selects midnight UTC. Native retains every stored timestamp.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["derivatives.retained_liquidations"]},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Unix epoch milliseconds, UTC. Spot: candle start (possibly before requested start for a clipped edge). Liquidations: original stored observation timestamp, not publication time."},"usd_amount":{"type":"number","description":"USD amount summed across retained contract contributions at exactly this source timestamp and liquidated-position side, after replacement. NOT the sum over the requested resolution interval. This is amount, not event count; negative finite source amounts are not silently clipped."},"side":{"nullable":true,"description":"Side of the position liquidated: long or short. Not aggressor buy/sell direction. Null preserves an unclassified legacy side; an absent side is not a zero row.","type":"string","enum":["long","short"]}},"required":["date","usd_amount","side"],"additionalProperties":false}},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"availability":{"type":"object","properties":{"empty_reason":{"nullable":true,"type":"string","enum":["classification_unavailable"]},"coverage":{"type":"object","properties":{"source_id":{"type":"string","enum":["derivatives.retained_liquidations"]},"exchange_supported":{"nullable":true,"type":"boolean","enum":[true]},"instrument_eligible":{"type":"string","nullable":true,"enum":[null]},"earliest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"latest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["source_id","exchange_supported","instrument_eligible","earliest_observed_at","latest_observed_at"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","enum":["unavailable"]},"certification":{"type":"string","nullable":true,"enum":[null]},"complete_from":{"type":"string","nullable":true,"enum":[null]},"complete_through":{"type":"string","nullable":true,"enum":[null]},"complete_from_inclusive":{"type":"boolean","enum":[true]},"complete_through_inclusive":{"type":"boolean","enum":[false]},"monotonic":{"type":"boolean","enum":[false]},"monotonic_boundary":{"type":"string","enum":["complete_through"]},"revisions_possible":{"type":"boolean","enum":[true]},"certified_at":{"type":"string","nullable":true,"enum":[null]},"updated_at":{"type":"string","nullable":true,"enum":[null]},"unavailable_reason":{"type":"string","enum":["not_supported"]},"scope":{"type":"object","properties":{"endpoint_id":{"type":"string","enum":["derivatives.retained_liquidations"]},"source_ids":{"type":"array","items":{"type":"string"}},"exchange":{"nullable":true,"type":"string"},"instrument_name":{"nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"}},"required":["endpoint_id","source_ids","exchange","instrument_name","currency"],"additionalProperties":false}},"required":["status","certification","complete_from","complete_through","complete_from_inclusive","complete_through_inclusive","monotonic","monotonic_boundary","revisions_possible","certified_at","updated_at","unavailable_reason","scope"],"additionalProperties":false}},"required":["empty_reason","coverage","completeness"],"additionalProperties":false},"count_basis":{"type":"string","enum":["timestamp_side_rows"],"description":"What total, limit and pagination count; liquidation long/short rows may occupy separate pages."}},"required":["total","items","page","total_pages","limit","availability","count_basis"],"additionalProperties":false}},"required":["dataset_id","items","meta"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"Retained liquidations by currency","tags":["Retained Spot and Liquidation History"]}},"/api/v1/historical/spot/{market}/{symbol}/{period}":{"get":{"description":"Retained spot OHLC candles. Prices are quote currency per base unit; volumes are base and quote units, not universally USD. UTC candle-start timestamps. Before 2024-01-01 stored requested-period candles are used; thereafter minute candles take precedence over same-period hourly/daily fallback. Request bounds clip contributing observations, so edge candles may be partial and their start can precede start. No synthetic missing candles. This is not the modern OHLCVT dataset.","operationId":"MarketHistoryController_legacySpot","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"symbol","required":true,"in":"path","description":"Spot pair identifier; separators unchanged, case normalized.","schema":{"type":"string"}},{"name":"period","required":true,"in":"path","schema":{"enum":["1m","5m","15m","30m","1h","1d"],"type":"string"}},{"name":"start","required":true,"in":"query","description":"Inclusive legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Inclusive. Date-only includes the whole UTC day; omitted end includes tomorrow UTC.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Default query page 1. Omitted meta.page preserved for single-generation requests.","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows. Omitted total_pages divisor is 1, except cross-generation spot paging uses its actual limit."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Unix epoch milliseconds, UTC. Spot: candle start (possibly before requested start for a clipped edge). Liquidations: original stored observation timestamp, not publication time."},"open":{"nullable":true,"description":"Quote-currency units per one base unit; earliest selected source open. Not necessarily the full candle open when start clips the bucket.","type":"number"},"high":{"nullable":true,"description":"Maximum selected source high, in quote currency per base unit.","type":"number"},"low":{"nullable":true,"description":"Minimum selected source low, in quote currency per base unit.","type":"number"},"close":{"nullable":true,"description":"Latest selected source close, in quote currency per base unit. Not mark/index price.","type":"number"},"volume_base":{"nullable":true,"description":"Sum of traded base-asset quantity from selected source candles; not USD notional or rolling 24-hour volume. Old-generation candles retain their stored volume.","type":"number"},"volume_quote":{"nullable":true,"description":"Sum of traded quote-asset quantity from selected source candles. For BTC-USDT this is USDT, not certified USD. Old-generation candles retain their stored volume.","type":"number"}},"required":["date","open","high","low","close","volume_base","volume_quote"],"additionalProperties":false}},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false}},"required":["items","meta"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible spot candles","tags":["Retained Spot and Liquidation History"]}},"/api/v1/historical/derivs/liquidation_by_currency/{market}/{currency}":{"get":{"description":"Retained USD liquidation amounts, one row per source timestamp and liquidated position side. Long means long positions liquidated, not buys. Resolution samples the UTC observation grid; 1d is the midnight observation, NOT a daily sum. Sums retained contract contributions at each selected source timestamp after replacement. aggregated includes all retained markets, not only active venues. Missing sides stay absent, not zero. Closed timestamps may still receive revisions; no finite finalization delay is certified.","operationId":"MarketHistoryController_legacyLiquidations","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","description":"Exact case-sensitive base currency.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Sample grid, not bucket aggregation. -- or omitted means native.","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Inclusive legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Inclusive. Date-only includes the whole UTC day; omitted end includes tomorrow UTC.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Default query page 1. Omitted meta.page preserved for single-generation requests.","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows. Omitted total_pages divisor is 1, except cross-generation spot paging uses its actual limit."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Unix epoch milliseconds, UTC. Spot: candle start (possibly before requested start for a clipped edge). Liquidations: original stored observation timestamp, not publication time."},"usd_amount":{"type":"number","description":"USD amount summed across retained contract contributions at exactly this source timestamp and liquidated-position side, after replacement. NOT the sum over the requested resolution interval. This is amount, not event count; negative finite source amounts are not silently clipped."},"side":{"nullable":true,"description":"Side of the position liquidated: long or short. Not aggressor buy/sell direction. Null preserves an unclassified legacy side; an absent side is not a zero row.","type":"string","enum":["long","short"]}},"required":["date","usd_amount","side"],"additionalProperties":false}},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false}},"required":["items","meta"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible liquidations by currency","tags":["Retained Spot and Liquidation History"]}},"/api/v1/market/positioning-history":{"get":{"description":"15 pinned legacy series. Strike distributions sum a UTC hour and are not paged; all other series use sampled observations, not interval aggregates. Market-wide options OI requires exchange and no currency filter, with notional n and option premium valuation ov; reduce page size if a broad page reaches shared source-capacity limits. options_volume_total requires exchange (aggregate spans every venue) and returns retained volume state, notional and premium valuation, not unique trades in the interval. options_oi_by_currency and options_volume_by_currency span every venue, take currency only (BTC_USDC and ETH_USDC select Deribit USDC-settled products) and return n notional and ov premium valuation rounded to two decimals; broad pages may reach source-capacity limits, so retry with a smaller limit. Max pain pages maturity rows. Missing venue keys remain absent, not zero. Futures exchange totals preserve the pinned c/d taxonomy and optional market-filter behavior. Source revisions/omissions are not completeness or point-in-time certified. Available to eligible subscribers when enabled; API key or OAuth uses the same account history rights. x402 is not enabled. Field guide: https://apiv2.laevitas.ch/migration/v1-to-v2/history-field-guide.md. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits. Retained option quantities keep their source units. For Binance eapi, OI is in underlying units, volume is in contracts and quoted premiums are per contract: one DOGE contract represents 1000 DOGE and one XRP contract 100 XRP. OI premium converts base quantity to contracts; volume notional converts contracts to base quantity. A positive quantity with an unavailable reference price yields null notional, including when only part of an aggregate is unavailable; zero quantity retains zero. Notional and premium availability are independent. These are retained snapshot valuations, not trade cash flows. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available.","operationId":"PositioningHistoryController_read","parameters":[{"name":"series","required":true,"in":"query","schema":{"type":"string","enum":["options_oi_strike","options_volume_strike","options_oi_pc_ratio","options_volume_pc_ratio","futures_oi_by_margin","options_max_pain","futures_oi_by_exchange","options_oi_total","options_volume_total","futures_oi_total","futures_volume_by_exchange","futures_volume_total","options_oi_by_market","options_oi_by_currency","options_volume_by_currency"]}},{"name":"exchange","required":false,"in":"query","schema":{"description":"Required for options except the by-currency totals, which span every venue and forbid it; use aggregate for all-venue volume_total. Optional market filter only on futures exchange-total series; retained source selectors, not active venue certification.","type":"string","maxLength":64,"pattern":"^[a-z0-9]+(?:[-_][a-z0-9]+)*$"}},{"name":"currency","required":false,"in":"query","schema":{"description":"Required except for options_oi_by_market, which includes every retained currency and forbids this filter. Other series retain their legacy base/prefix rules; BTC_USDC and ETH_USDC select Deribit USDC-settled products.","type":"string","maxLength":32,"pattern":"^[A-Z0-9]+(?:_[A-Z0-9]+)?$"}},{"name":"maturity","required":false,"in":"query","schema":{"description":"Required only for strike distributions; exact expiry, including expired contracts.","type":"string","pattern":"^\\d{1,2}(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)\\d{2}$"}},{"name":"option","required":false,"in":"query","schema":{"description":"Required only for futures exchange totals: pinned CEX/DEX classification.","type":"string","enum":["c","d"]}},{"name":"at","required":false,"in":"query","schema":{"description":"Strike distributions only: sum the containing UTC hour, not a latest snapshot.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},{"name":"start","required":false,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},{"name":"end","required":false,"in":"query","schema":{"description":"Time series only. Inclusive after truncation to seconds.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},{"name":"resolution","required":false,"in":"query","schema":{"description":"Time series only. UTC sample grid, not interval aggregation; omitted means native.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"description":"Time series only, default 10 unless stated otherwise. Max pain counts maturity rows, not timestamps. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits.","type":"integer","minimum":1,"maximum":1440}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["market.positioning_observations"]},"series":{"type":"string","enum":["options_oi_strike","options_volume_strike","options_oi_pc_ratio","options_volume_pc_ratio","futures_oi_by_margin","options_max_pain","futures_oi_by_exchange","options_oi_total","options_volume_total","futures_oi_total","futures_volume_by_exchange","futures_volume_total","options_oi_by_market","options_oi_by_currency","options_volume_by_currency"]},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"availability":{"type":"object","properties":{"empty_reason":{"nullable":true,"type":"string","enum":["classification_unavailable"]},"coverage":{"type":"object","properties":{"source_id":{"type":"string","enum":["market.positioning_observations"]},"exchange_supported":{"nullable":true,"type":"boolean","enum":[true]},"instrument_eligible":{"type":"string","nullable":true,"enum":[null]},"earliest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"latest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["source_id","exchange_supported","instrument_eligible","earliest_observed_at","latest_observed_at"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","enum":["unavailable"]},"certification":{"type":"string","nullable":true,"enum":[null]},"complete_from":{"type":"string","nullable":true,"enum":[null]},"complete_through":{"type":"string","nullable":true,"enum":[null]},"complete_from_inclusive":{"type":"boolean","enum":[true]},"complete_through_inclusive":{"type":"boolean","enum":[false]},"monotonic":{"type":"boolean","enum":[false]},"monotonic_boundary":{"type":"string","enum":["complete_through"]},"revisions_possible":{"type":"boolean","enum":[true]},"certified_at":{"type":"string","nullable":true,"enum":[null]},"updated_at":{"type":"string","nullable":true,"enum":[null]},"unavailable_reason":{"type":"string","enum":["not_supported"]},"scope":{"type":"object","properties":{"endpoint_id":{"type":"string","enum":["market.positioning_observations"]},"source_ids":{"type":"array","items":{"type":"string"}},"exchange":{"nullable":true,"type":"string"},"instrument_name":{"nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"}},"required":["endpoint_id","source_ids","exchange","instrument_name","currency"],"additionalProperties":false}},"required":["status","certification","complete_from","complete_through","complete_from_inclusive","complete_through_inclusive","monotonic","monotonic_boundary","revisions_possible","certified_at","updated_at","unavailable_reason","scope"],"additionalProperties":false}},"required":["empty_reason","coverage","completeness"],"additionalProperties":false},"count_basis":{"type":"string","enum":["rows","strikes"]}},"required":["total","items","page","total_pages","limit","availability","count_basis"],"additionalProperties":false},"items":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"strike":{"nullable":true,"description":"Option strike price in the underlying reference quote currency.","type":"number"},"c":{"nullable":true,"description":"Call quantity: sum of retained open interest or volume observations over the selected hour. Repeated observations are included; this is not a single-instant OI snapshot or unique traded volume.","type":"number"},"p":{"nullable":true,"description":"Put quantity: same hour-summed observation rule as c, in retained source quantity units.","type":"number"},"notional_c":{"nullable":true,"description":"Call quantity times underlying reference price, summed over the selected hour, in USD-equivalent units. Not option premium value. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"notional_p":{"nullable":true,"description":"Put quantity times underlying reference price, summed over the selected hour, in USD-equivalent units. Not option premium value. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"}},"required":["strike","c","p","notional_c","notional_p"],"additionalProperties":false},{"type":"object","properties":{"strike":{"nullable":true,"description":"Option strike price in the underlying reference quote currency.","type":"number"},"c":{"nullable":true,"description":"Call quantity: sum of retained open interest or volume observations over the selected hour. Repeated observations are included; this is not a single-instant OI snapshot or unique traded volume.","type":"number"},"p":{"nullable":true,"description":"Put quantity: same hour-summed observation rule as c, in retained source quantity units.","type":"number"},"notional_c":{"nullable":true,"description":"Call quantity times underlying reference price, summed over the selected hour, in USD-equivalent units. Not option premium value. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"notional_p":{"nullable":true,"description":"Put quantity times underlying reference price, summed over the selected hour, in USD-equivalent units. Not option premium value. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"}},"required":["strike","c","p","notional_c","notional_p"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"p":{"nullable":true,"description":"Total put open-interest quantity (OI series) or retained volume quantity (volume series), rounded to four decimals. Not USD.","type":"number"},"c":{"nullable":true,"description":"Corresponding total call quantity, rounded to four decimals. Not USD.","type":"number"},"pc":{"nullable":true,"description":"Put/call quantity ratio p / c, dimensionless, rounded to three decimals. A nonfinite ratio is null, not zero.","type":"number"},"p_p":{"nullable":true,"description":"USD-equivalent premium valuation of put quantity, rounded to four decimals. Second p means premium, not probability. Volume valuation is not realized traded premium.","type":"number"},"c_p":{"nullable":true,"description":"USD-equivalent premium valuation of call quantity, rounded to four decimals. Null when required valuation inputs are unavailable.","type":"number"},"pc_p":{"nullable":true,"description":"Put/call premium-valuation ratio p_p / c_p, dimensionless, rounded to two decimals; not the quantity ratio pc.","type":"number"},"p_notional":{"nullable":true,"description":"Put quantity times underlying reference price, summed at this timestamp in USD-equivalent units. Not premium valuation. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"c_notional":{"nullable":true,"description":"Call quantity times underlying reference price, summed at this timestamp in USD-equivalent units. Not premium valuation. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"}},"required":["date","p","c","pc","p_p","c_p","pc_p","p_notional","c_notional"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"p":{"nullable":true,"description":"Total put open-interest quantity (OI series) or retained volume quantity (volume series), rounded to four decimals. Not USD.","type":"number"},"c":{"nullable":true,"description":"Corresponding total call quantity, rounded to four decimals. Not USD.","type":"number"},"pc":{"nullable":true,"description":"Put/call quantity ratio p / c, dimensionless, rounded to three decimals. A nonfinite ratio is null, not zero.","type":"number"},"p_p":{"nullable":true,"description":"USD-equivalent premium valuation of put quantity, rounded to four decimals. Second p means premium, not probability. Volume valuation is not realized traded premium.","type":"number"},"c_p":{"nullable":true,"description":"USD-equivalent premium valuation of call quantity, rounded to four decimals. Null when required valuation inputs are unavailable.","type":"number"},"pc_p":{"nullable":true,"description":"Put/call premium-valuation ratio p_p / c_p, dimensionless, rounded to two decimals; not the quantity ratio pc.","type":"number"},"p_notional":{"nullable":true,"description":"Put quantity times underlying reference price, summed at this timestamp in USD-equivalent units. Not premium valuation. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"c_notional":{"nullable":true,"description":"Call quantity times underlying reference price, summed at this timestamp in USD-equivalent units. Not premium valuation. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"}},"required":["date","p","c","pc","p_p","c_p","pc_p","p_notional","c_notional"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"maturity":{"type":"string","description":"Option maturity identifier, not time remaining."},"max_pain":{"nullable":true,"description":"Retained maximum-pain strike level in the underlying quote currency, not a probability or predicted settlement.","type":"number"},"index_price":{"nullable":true,"description":"Retained spot-index reference price in its quote currency.","type":"number"}},"required":["date","maturity","max_pain","index_price"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"oi":{"nullable":true,"description":"Sum of retained outstanding option quantities, not USD notional.","type":"number"},"notional":{"nullable":true,"description":"Sum of base-equivalent quantity times underlying reference price in USD-equivalent units. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"premium":{"nullable":true,"description":"USD-equivalent premium valuation of outstanding options; null if a required valuation input is unavailable. Not notional exposure.","type":"number"}},"required":["date","oi","notional","premium"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"volume":{"nullable":true,"description":"Sum of retained option volume state at this observation timestamp, in source quantity units; not USD. It is the volume value stored on each retained snapshot row, not unique trades during the resolution interval, so successive timestamps must not be summed into turnover.","type":"number"},"notional":{"nullable":true,"description":"Retained volume converted to base quantity, times underlying reference price, summed over the selected scope at this timestamp, in USD-equivalent units. Not option premium turnover. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"premium":{"nullable":true,"description":"USD-equivalent valuation of the retained volume quantity at the observation quotes; not realized traded premium. Null if a required valuation input is unavailable for any contributing row.","type":"number"}},"required":["date","volume","notional","premium"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"n":{"nullable":true,"description":"Notional: sum of open-interest quantity times underlying reference price in USD-equivalent units; not a count. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"ov":{"nullable":true,"description":"Option value: USD-equivalent premium valuation of outstanding options; not trading volume.","type":"number"}},"required":["date","n","ov"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"n":{"nullable":true,"description":"Notional: retained open-interest quantity times underlying reference price, summed over every venue for the requested currency at this timestamp, in USD-equivalent units, rounded to two decimals; not a count. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"ov":{"nullable":true,"description":"Option value: USD-equivalent premium valuation of outstanding options over every venue for the requested currency, rounded to two decimals; not trading volume. Null if any contributing valuation input is unavailable.","type":"number"}},"required":["date","n","ov"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"n":{"nullable":true,"description":"Notional: retained volume converted to base quantity, times underlying reference price, summed over every venue for the requested currency at this timestamp, in USD-equivalent units, rounded to two decimals. Retained volume state, not unique trades in the interval. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"ov":{"nullable":true,"description":"Option value: USD-equivalent premium valuation of the retained volume quantity over every venue for the requested currency, rounded to two decimals; not realized traded premium. Null if any contributing valuation input is unavailable.","type":"number"}},"required":["date","n","ov"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; coarse resolution samples observations rather than summing the interval."},"f_u":{"nullable":true,"description":"Dated futures, USD-margined: open interest in USD-equivalent units.","type":"number"},"f_u_n":{"nullable":true,"description":"Dated futures, USD-margined: open interest in base-asset units. Legacy _n is NOT USD notional.","type":"number"},"f_c":{"nullable":true,"description":"Dated futures, coin-margined: open interest in USD-equivalent units.","type":"number"},"f_c_n":{"nullable":true,"description":"Dated futures, coin-margined: open interest in base-asset units.","type":"number"},"p_u":{"nullable":true,"description":"Perpetuals, USD-margined: open interest in USD-equivalent units. p means perpetual, not put.","type":"number"},"p_u_n":{"nullable":true,"description":"Perpetuals, USD-margined: open interest in base-asset units.","type":"number"},"p_c":{"nullable":true,"description":"Perpetuals, coin-margined: open interest in USD-equivalent units. c means coin margin, not call.","type":"number"},"p_c_n":{"nullable":true,"description":"Perpetuals, coin-margined: open interest in base-asset units.","type":"number"}},"required":["date","f_u","f_u_n","f_c","f_c_n","p_u","p_u_n","p_c","p_c_n"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; coarse resolution samples observations rather than summing the interval."},"perpetual":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Perpetual contracts. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."},"future":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Dated futures. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."}},"required":["date","perpetual","future"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; coarse resolution samples observations rather than summing the interval."},"perpetual":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Perpetual contracts. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."},"future":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Dated futures. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."}},"required":["date","perpetual","future"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; coarse resolution samples observations rather than summing the interval."},"perpetual":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Perpetual contracts. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."},"future":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Dated futures. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."}},"required":["date","perpetual","future"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; coarse resolution samples observations rather than summing the interval."},"perpetual":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Perpetual contracts. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."},"future":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Dated futures. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."}},"required":["date","perpetual","future"],"additionalProperties":false}]}}},"required":["dataset_id","series","meta","items"],"additionalProperties":false}}}},"400":{"description":"Invalid selectors or POSITIONING_DAILY_PAGE_TOO_LARGE; the latter includes max_limit and requested_limit. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}},"security":[{"X-API-Key":[]}],"summary":"Retained open interest, volume, put/call, margin and max-pain history","tags":["Market Positioning History"]}},"/api/v1/historical/options/oi_strike/{market}/{currency}/{maturity}":{"get":{"operationId":"LegacyPositioningHistoryController_options_oi_strike","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"maturity","required":true,"in":"path","description":"Exact DMONYY or DDMONYY expiry; ALL is not supported by the retained query.","schema":{"type":"string"}},{"name":"date_h","required":true,"in":"query","description":"YYYY-MM-DDTHH in UTC. Sums all observations of this hour; returns a bare strike-sorted array, no paging.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Option strike price in the underlying reference quote currency.","type":"number"},"c":{"nullable":true,"description":"Call quantity: sum of retained open interest or volume observations over the selected hour. Repeated observations are included; this is not a single-instant OI snapshot or unique traded volume.","type":"number"},"p":{"nullable":true,"description":"Put quantity: same hour-summed observation rule as c, in retained source quantity units.","type":"number"},"notional_c":{"nullable":true,"description":"Call quantity times underlying reference price, summed over the selected hour, in USD-equivalent units. Not option premium value. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"notional_p":{"nullable":true,"description":"Put quantity times underlying reference price, summed over the selected hour, in USD-equivalent units. Not option premium value. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"}},"required":["strike","c","p","notional_c","notional_p"],"additionalProperties":false}}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible options open interest by strike","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/options/volume_strike/{market}/{currency}/{maturity}":{"get":{"operationId":"LegacyPositioningHistoryController_options_volume_strike","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"maturity","required":true,"in":"path","description":"Exact DMONYY or DDMONYY expiry; ALL is not supported by the retained query.","schema":{"type":"string"}},{"name":"date_h","required":true,"in":"query","description":"YYYY-MM-DDTHH in UTC. Sums all observations of this hour; returns a bare strike-sorted array, no paging.","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"strike":{"nullable":true,"description":"Option strike price in the underlying reference quote currency.","type":"number"},"c":{"nullable":true,"description":"Call quantity: sum of retained open interest or volume observations over the selected hour. Repeated observations are included; this is not a single-instant OI snapshot or unique traded volume.","type":"number"},"p":{"nullable":true,"description":"Put quantity: same hour-summed observation rule as c, in retained source quantity units.","type":"number"},"notional_c":{"nullable":true,"description":"Call quantity times underlying reference price, summed over the selected hour, in USD-equivalent units. Not option premium value. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"notional_p":{"nullable":true,"description":"Put quantity times underlying reference price, summed over the selected hour, in USD-equivalent units. Not option premium value. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"}},"required":["strike","c","p","notional_c","notional_p"],"additionalProperties":false}}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible options volume by strike","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/options/oi_pc_ratio/{market}/{currency}":{"get":{"operationId":"LegacyPositioningHistoryController_options_oi_pc_ratio","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"p":{"nullable":true,"description":"Total put open-interest quantity (OI series) or retained volume quantity (volume series), rounded to four decimals. Not USD.","type":"number"},"c":{"nullable":true,"description":"Corresponding total call quantity, rounded to four decimals. Not USD.","type":"number"},"pc":{"nullable":true,"description":"Put/call quantity ratio p / c, dimensionless, rounded to three decimals. A nonfinite ratio is null, not zero.","type":"number"},"p_p":{"nullable":true,"description":"USD-equivalent premium valuation of put quantity, rounded to four decimals. Second p means premium, not probability. Volume valuation is not realized traded premium.","type":"number"},"c_p":{"nullable":true,"description":"USD-equivalent premium valuation of call quantity, rounded to four decimals. Null when required valuation inputs are unavailable.","type":"number"},"pc_p":{"nullable":true,"description":"Put/call premium-valuation ratio p_p / c_p, dimensionless, rounded to two decimals; not the quantity ratio pc.","type":"number"},"p_notional":{"nullable":true,"description":"Put quantity times underlying reference price, summed at this timestamp in USD-equivalent units. Not premium valuation. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"c_notional":{"nullable":true,"description":"Call quantity times underlying reference price, summed at this timestamp in USD-equivalent units. Not premium valuation. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"}},"required":["date","p","c","pc","p_p","c_p","pc_p","p_notional","c_notional"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible options put/call open-interest ratios","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/options/volume_pc_ratio/{market}/{currency}":{"get":{"operationId":"LegacyPositioningHistoryController_options_volume_pc_ratio","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"p":{"nullable":true,"description":"Total put open-interest quantity (OI series) or retained volume quantity (volume series), rounded to four decimals. Not USD.","type":"number"},"c":{"nullable":true,"description":"Corresponding total call quantity, rounded to four decimals. Not USD.","type":"number"},"pc":{"nullable":true,"description":"Put/call quantity ratio p / c, dimensionless, rounded to three decimals. A nonfinite ratio is null, not zero.","type":"number"},"p_p":{"nullable":true,"description":"USD-equivalent premium valuation of put quantity, rounded to four decimals. Second p means premium, not probability. Volume valuation is not realized traded premium.","type":"number"},"c_p":{"nullable":true,"description":"USD-equivalent premium valuation of call quantity, rounded to four decimals. Null when required valuation inputs are unavailable.","type":"number"},"pc_p":{"nullable":true,"description":"Put/call premium-valuation ratio p_p / c_p, dimensionless, rounded to two decimals; not the quantity ratio pc.","type":"number"},"p_notional":{"nullable":true,"description":"Put quantity times underlying reference price, summed at this timestamp in USD-equivalent units. Not premium valuation. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"c_notional":{"nullable":true,"description":"Call quantity times underlying reference price, summed at this timestamp in USD-equivalent units. Not premium valuation. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"}},"required":["date","p","c","pc","p_p","c_p","pc_p","p_notional","c_notional"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible options put/call volume ratios","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/options/max_pain/{market}/{currency}":{"get":{"operationId":"LegacyPositioningHistoryController_options_max_pain","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"maturity":{"type":"string","description":"Option maturity identifier, not time remaining."},"max_pain":{"nullable":true,"description":"Retained maximum-pain strike level in the underlying quote currency, not a probability or predicted settlement.","type":"number"},"index_price":{"nullable":true,"description":"Retained spot-index reference price in its quote currency.","type":"number"}},"required":["date","maturity","max_pain","index_price"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible retained max pain by maturity","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/options/oi_total/{market}/{currency}":{"get":{"operationId":"LegacyPositioningHistoryController_options_oi_total","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"oi":{"nullable":true,"description":"Sum of retained outstanding option quantities, not USD notional.","type":"number"},"notional":{"nullable":true,"description":"Sum of base-equivalent quantity times underlying reference price in USD-equivalent units. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"premium":{"nullable":true,"description":"USD-equivalent premium valuation of outstanding options; null if a required valuation input is unavailable. Not notional exposure.","type":"number"}},"required":["date","oi","notional","premium"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible options total open interest","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/options/volume_total/{market}/{currency}":{"get":{"operationId":"LegacyPositioningHistoryController_options_volume_total","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"volume":{"nullable":true,"description":"Sum of retained option volume state at this observation timestamp, in source quantity units; not USD. It is the volume value stored on each retained snapshot row, not unique trades during the resolution interval, so successive timestamps must not be summed into turnover.","type":"number"},"notional":{"nullable":true,"description":"Retained volume converted to base quantity, times underlying reference price, summed over the selected scope at this timestamp, in USD-equivalent units. Not option premium turnover. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"premium":{"nullable":true,"description":"USD-equivalent valuation of the retained volume quantity at the observation quotes; not realized traded premium. Null if a required valuation input is unavailable for any contributing row.","type":"number"}},"required":["date","volume","notional","premium"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible retained options volume state, notional and premium valuation; market aggregate spans venues","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/options/total/oi_by_market/{market}":{"get":{"operationId":"LegacyPositioningHistoryController_options_oi_by_market","parameters":[{"name":"market","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"n":{"nullable":true,"description":"Notional: sum of open-interest quantity times underlying reference price in USD-equivalent units; not a count. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"ov":{"nullable":true,"description":"Option value: USD-equivalent premium valuation of outstanding options; not trading volume.","type":"number"}},"required":["date","n","ov"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible market-wide options OI notional and premium valuation across retained currencies","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/options/total/oi_by_currency/{currency}":{"get":{"operationId":"LegacyPositioningHistoryController_options_oi_by_currency","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"n":{"nullable":true,"description":"Notional: retained open-interest quantity times underlying reference price, summed over every venue for the requested currency at this timestamp, in USD-equivalent units, rounded to two decimals; not a count. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"ov":{"nullable":true,"description":"Option value: USD-equivalent premium valuation of outstanding options over every venue for the requested currency, rounded to two decimals; not trading volume. Null if any contributing valuation input is unavailable.","type":"number"}},"required":["date","n","ov"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible all-venue options OI notional and premium valuation for one currency","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/options/total/volume_by_currency/{currency}":{"get":{"operationId":"LegacyPositioningHistoryController_options_volume_by_currency","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC. Resolution samples timestamps, not interval totals."},"n":{"nullable":true,"description":"Notional: retained volume converted to base quantity, times underlying reference price, summed over every venue for the requested currency at this timestamp, in USD-equivalent units, rounded to two decimals. Retained volume state, not unique trades in the interval. Volume quantities are converted from contracts to base units where required before valuation. Null if any contributing positive quantity lacks a valid reference price; zero quantity retains zero. Independent of premium availability.","type":"number"},"ov":{"nullable":true,"description":"Option value: USD-equivalent premium valuation of the retained volume quantity over every venue for the requested currency, rounded to two decimals; not realized traded premium. Null if any contributing valuation input is unavailable.","type":"number"}},"required":["date","n","ov"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible all-venue retained options volume notional and premium valuation for one currency","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/futures/total_oi_by_margin/{currency}":{"get":{"operationId":"LegacyPositioningHistoryController_futures_oi_by_margin","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; coarse resolution samples observations rather than summing the interval."},"f_u":{"nullable":true,"description":"Dated futures, USD-margined: open interest in USD-equivalent units.","type":"number"},"f_u_n":{"nullable":true,"description":"Dated futures, USD-margined: open interest in base-asset units. Legacy _n is NOT USD notional.","type":"number"},"f_c":{"nullable":true,"description":"Dated futures, coin-margined: open interest in USD-equivalent units.","type":"number"},"f_c_n":{"nullable":true,"description":"Dated futures, coin-margined: open interest in base-asset units.","type":"number"},"p_u":{"nullable":true,"description":"Perpetuals, USD-margined: open interest in USD-equivalent units. p means perpetual, not put.","type":"number"},"p_u_n":{"nullable":true,"description":"Perpetuals, USD-margined: open interest in base-asset units.","type":"number"},"p_c":{"nullable":true,"description":"Perpetuals, coin-margined: open interest in USD-equivalent units. c means coin margin, not call.","type":"number"},"p_c_n":{"nullable":true,"description":"Perpetuals, coin-margined: open interest in base-asset units.","type":"number"}},"required":["date","f_u","f_u_n","f_c","f_c_n","p_u","p_u_n","p_c","p_c_n"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible futures open interest by margin","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/futures/total_oi_by_exchange/{currency}/{option}":{"get":{"operationId":"LegacyPositioningHistoryController_futures_oi_by_exchange","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"option","required":true,"in":"path","description":"Pinned gateway CEX/DEX classification; case-insensitive.","schema":{"enum":["c","d"],"type":"string"}},{"name":"market","required":false,"in":"query","description":"Legacy optional market filter; incompatible c/d and market retain the v1 no-filter behavior.","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; coarse resolution samples observations rather than summing the interval."},"perpetual":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Perpetual contracts. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."},"future":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Dated futures. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."}},"required":["date","perpetual","future"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible futures open interest by exchange","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/futures/total_volume_by_exchange/{currency}/{option}":{"get":{"operationId":"LegacyPositioningHistoryController_futures_volume_by_exchange","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"option","required":true,"in":"path","description":"Pinned gateway CEX/DEX classification; case-insensitive.","schema":{"enum":["c","d"],"type":"string"}},{"name":"market","required":false,"in":"query","description":"Legacy optional market filter; incompatible c/d and market retain the v1 no-filter behavior.","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; coarse resolution samples observations rather than summing the interval."},"perpetual":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Perpetual contracts. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."},"future":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Dated futures. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."}},"required":["date","perpetual","future"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible futures volume by exchange","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/futures/total_oi/{currency}":{"get":{"operationId":"LegacyPositioningHistoryController_futures_oi_total","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; coarse resolution samples observations rather than summing the interval."},"perpetual":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Perpetual contracts. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."},"future":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Dated futures. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."}},"required":["date","perpetual","future"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible futures total open interest","tags":["Legacy Market Positioning History"]}},"/api/v1/historical/futures/total_volume/{currency}":{"get":{"operationId":"LegacyPositioningHistoryController_futures_volume_total","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"UTC sample grid, not interval aggregation; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Default query page 1; omitted meta.page matches v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Default query 10 rows unless stated otherwise; otherwise omitted meta.total_pages uses divisor 1 as in v1. Max pain counts maturity rows. Daily (1d) options_oi_by_currency, options_volume_by_currency and options_volume_total with exchange=aggregate use at most 2 rows per page, default 2. Larger limits return 400 POSITIONING_DAILY_PAGE_TOO_LARGE. Use limit=2 from page=1 and follow total_pages; the date range and totals are unchanged. Other series and resolutions keep their existing limits."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; coarse resolution samples observations rather than summing the interval."},"perpetual":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Perpetual contracts. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."},"future":{"type":"object","additionalProperties":{"nullable":true,"type":"number"},"description":"Dated futures. Uppercase venue keys: e.g. DERIBIT is USD-equivalent exposure/volume; DERIBIT_notional is base-asset quantity despite the legacy name. OI is outstanding exposure; volume is the retained rolling volume observation, not interval volume. Missing venue keys are not certified zero OI. Retained futures OI/volume totals count Kraken contract names that differ only in letter case once. If those copies disagree, the affected USD or base-asset total is null, not zero or a partial sum. Other venues are not case-normalized. This does not certify original publication time or history completeness. BINANCE ETHBTC is quoted in BTC. Historical totals report USD values and ETH quantities. Older BTC quote volume is converted to an ETH equivalent at the historical instrument price; newer base volume is already ETH. OI quantity is in ETH. Where USD OI requires conversion, it uses a BTCUSDT index (valid mark fallback) from the same observation minute, never a current or later-minute price. Missing or conflicting required reference prices make the affected venue/margin total null. Corrected historical values do not certify when the original value was first available."}},"required":["date","perpetual","future"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible futures total volume","tags":["Legacy Market Positioning History"]}},"/api/v1/market/snapshot-history":{"get":{"description":"Retained v1 chain snapshots served on v2, including older archive generations, for four series: options, options_dynamic_volume (option chains with trade-derived rolling volume), futures and perpetuals. Select series=options for option chains. Options from 2025-08-20 and all dynamic-volume rows come from stored minute observations; earlier options and all futures/perpetuals come from archived snapshots in two generations (futures/perpetuals split at 2024-11-01, options at 2025-02-24). Not interchangeable with modern /options/snapshot, OHLC data or order-book replay. Older underlyer_spot/forward_price mappings differ by source generation; consult the field guide before combining them.\n\nStored-minute option rows: date is the observation minute. Archive-backed rows: date is the requested grid slot (request start truncated to the minute plus k x resolution, not aligned to UTC hours/days) and the stored observation time, where present, is the datetime text, which can lack a timezone suffix. Neither is original availability time.\n\nStored-minute option series sample UTC grid points. Archive series read one stored snapshot per requested slot; resolution sets slot spacing and never aggregates. Unavailable snapshots are not reconstructed.\n\nExplicit timezone-qualified start/end, inclusive; archive bounds truncate to minutes and a future end is clamped to now. limit counts timestamp slots, not instruments: 1 for option series, at most 144 for futures/perpetuals. count_basis states whether totals count requested slots or observed timestamps; native paging places each slot in exactly one generation. Compatibility archive aliases read objects only when both page and limit are sent, omit total_pages and repeat the generation boundary slot (2024-11-01 for futures/perpetuals, 2025-02-24 for options) in both generations.\n\nLegacy fields and source-generation conventions; see history-field-guide.md, Market snapshots.\n\nOlder archive generations and post-2024-11-01 futures/perpetual rows coerce a stored null or empty value to 0 and return an absent field as null; post-2025-02-24 option archive rows keep numeric strings and omitted fields. A zero is therefore not proof of a zero observation.\n\nFutures/perpetual mark_price 0 is returned as null, except in post-2024-11-01 perpetual archive rows, where 0 is kept.\n\nDerivative snapshot volume is base-asset quantity and volume_usd is USD-equivalent, unlike instrument-history volume.\n\nArchived source conventions. Percentage-point funding and USD-equivalent open interest are instrument-history conventions and are not verified for archived snapshots.\n\nInstruments in the retained snapshot, not certified originally listed/open-for-trading state.\n\nModern options.snapshot bounds do not bound these older generations, and response availability coverage bounds are null. Unavailable archive slots are listed in missing_object_timestamps and present snapshots without matching instruments in empty_snapshot_timestamps; neither is reconstructed.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: market.snapshot_history. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.\n\nFour legacy snapshot series share subscriber authorization, history entitlement and bounded source admission. Archived generations and retained option-table observations keep their source field mappings and timestamp semantics. Options dynamic-volume snapshots use the retained trade-derived rolling volume. This is not modern OHLC data or full order-book replay. Page limits count snapshot timestamps, not returned instruments; empty archived slots remain part of the requested grid. Source generations have different field availability and pagination semantics. No originally-published or complete-history certification. Available to eligible subscribers when enabled; API key or OAuth uses the same account history rights. x402 is not enabled. Field guide: https://apiv2.laevitas.ch/migration/v1-to-v2/history-field-guide.md.","operationId":"SnapshotHistoryController_read","parameters":[{"name":"series","required":true,"in":"query","schema":{"type":"string","enum":["options","futures","perpetuals","options_dynamic_volume"]}},{"name":"exchange","required":true,"in":"query","schema":{"type":"string","maxLength":64,"pattern":"^[a-z0-9]+(?:[-_][a-z0-9]+)*$","description":"Lowercase retained venue, not a guarantee of archive availability."}},{"name":"currency","required":true,"in":"query","schema":{"type":"string","maxLength":32,"pattern":"^[A-Z0-9]+(?:_[A-Z0-9]+)?$"}},{"name":"start","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},{"name":"end","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive. Archive bounds truncate to minutes and clamp future end to now."}},{"name":"resolution","required":false,"in":"query","schema":{"default":"1m","description":"Archive grids advance from the request start; option-table samples use UTC grids. Not OHLC aggregation.","type":"string","enum":["1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"default":1,"description":"Timestamp slots, not instrument rows. Options: at most 1; futures/perpetuals: at most 144.","type":"integer","minimum":1,"maximum":144}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["market.snapshot_observations"]},"series":{"type":"string","enum":["options","futures","perpetuals","options_dynamic_volume"]},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991},"count_basis":{"type":"string","enum":["requested_timestamp_slots","observed_timestamps","archive_slots_then_observed_timestamps"]},"selected_snapshots":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of timestamp slots selected for this page; not the number of instrument rows."},"returned_snapshots":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of distinct returned snapshot timestamps; not the number of instruments."},"missing_object_timestamps":{"type":"array","items":{"type":"integer","minimum":0,"maximum":9007199254740991},"description":"UTC Unix-millisecond archive slots whose snapshot object was unavailable. Not evidence of zero market activity."},"empty_snapshot_timestamps":{"type":"array","items":{"type":"integer","minimum":0,"maximum":9007199254740991},"description":"UTC Unix-millisecond archive slots read successfully but yielding no matching instrument rows."},"availability":{"type":"object","properties":{"empty_reason":{"nullable":true,"type":"string","enum":["classification_unavailable"]},"coverage":{"type":"object","properties":{"source_id":{"type":"string","enum":["market.snapshot_observations"]},"exchange_supported":{"nullable":true,"type":"boolean","enum":[true]},"instrument_eligible":{"type":"string","nullable":true,"enum":[null]},"earliest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"latest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["source_id","exchange_supported","instrument_eligible","earliest_observed_at","latest_observed_at"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","enum":["unavailable"]},"certification":{"type":"string","nullable":true,"enum":[null]},"complete_from":{"type":"string","nullable":true,"enum":[null]},"complete_through":{"type":"string","nullable":true,"enum":[null]},"complete_from_inclusive":{"type":"boolean","enum":[true]},"complete_through_inclusive":{"type":"boolean","enum":[false]},"monotonic":{"type":"boolean","enum":[false]},"monotonic_boundary":{"type":"string","enum":["complete_through"]},"revisions_possible":{"type":"boolean","enum":[true]},"certified_at":{"type":"string","nullable":true,"enum":[null]},"updated_at":{"type":"string","nullable":true,"enum":[null]},"unavailable_reason":{"type":"string","enum":["not_supported"]},"scope":{"type":"object","properties":{"endpoint_id":{"type":"string","enum":["market.snapshot_observations"]},"source_ids":{"type":"array","items":{"type":"string"}},"exchange":{"nullable":true,"type":"string"},"instrument_name":{"nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"}},"required":["endpoint_id","source_ids","exchange","instrument_name","currency"],"additionalProperties":false}},"required":["status","certification","complete_from","complete_through","complete_from_inclusive","complete_through_inclusive","monotonic","monotonic_boundary","revisions_possible","certified_at","updated_at","unavailable_reason","scope"],"additionalProperties":false}},"required":["empty_reason","coverage","completeness"],"additionalProperties":false}},"required":["total","items","page","limit","total_pages","count_basis","selected_snapshots","returned_snapshots","missing_object_timestamps","empty_snapshot_timestamps","availability"],"additionalProperties":false},"items":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Snapshot timestamp in Unix milliseconds, UTC. Multiple instruments share a timestamp; archive slots are not necessarily the original publication time."},"instrument_name":{"type":"string","description":"Retained venue-specific instrument identifier; preserve spelling and separators."},"underlyer":{"description":"Legacy underlying label, typically BTC_USD; not a guarantee of the option premium or settlement currency.","nullable":true,"type":"string"},"expiration_date":{"description":"Legacy expiry timestamp formatted at 08:00 UTC. This compatibility field is not an exchange-native expiry-hour certificate across all venues.","nullable":true,"type":"string"},"claim_type":{"type":"string","description":"Option right: call or put; not long/short position side."},"exercise":{"description":"Legacy exercise-style label: European.","nullable":true,"type":"string"},"settlement":{"description":"Legacy settlement-method label: cash. Does not identify the cash/crypto settlement currency.","nullable":true,"type":"string"},"datetime":{"description":"Optional legacy timestamp text from the archive; date is the pagination timestamp in Unix milliseconds. Text may omit a timezone suffix.","nullable":true,"type":"string"},"open_interest":{"description":"Outstanding option quantity in retained source units. Not USD notional or premium value; this reader does not apply another contract multiplier. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"mark_price":{"description":"Option mark premium per source quantity unit, in the instrument premium currency. Inverse BTC/ETH and linear stablecoin options do not share one premium currency; no USD conversion is applied. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"mark_iv":{"description":"Mark implied volatility in percentage points (50 means 50%, not 0.50). Retained source observation; no new model fit or rescaling is applied. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"bid_iv":{"description":"Implied volatility associated with the bid quote, in percentage points. Not a premium or bid size; unavailable retained values are not executable quotes. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"ask_iv":{"description":"Implied volatility associated with the ask quote, in percentage points. Not a premium or ask size; unavailable retained values are not executable quotes. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"strike":{"description":"Option strike price in the underlying reference quote currency, not an option premium. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_bid_price":{"description":"Best bid premium per source quantity unit, in the same premium currency as mark_price; not bid implied volatility. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_ask_price":{"description":"Best ask premium per source quantity unit, in the same premium currency as mark_price; not ask implied volatility. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"underlyer_spot":{"description":"Reference-price field with legacy generation-dependent mapping. Recent observations use spot index; the intermediate archive generation uses stored underlying reference instead. Do not assume identical semantics over all history; see field guide. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"forward_price":{"description":"Reference-price field with legacy generation-dependent mapping. Recent observations use underlying pricing reference; the intermediate archive generation uses stored index reference instead. Not universally an expiry forward; see field guide. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"volume":{"description":"Retained venue-reported option volume in source quantity units and source reporting window. Not the volume traded inside the requested resolution. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_bid_amount":{"description":"Retained best-bid displayed quantity in source units. Not full depth or guaranteed executable size; historical unit conventions are preserved. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_ask_amount":{"description":"Retained best-ask displayed quantity in source units. Not full depth or guaranteed executable size; historical unit conventions are preserved. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}},"required":["date","instrument_name","claim_type"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Snapshot timestamp in Unix milliseconds, UTC. Multiple instruments share a timestamp; archive slots are not necessarily the original publication time."},"instrument_name":{"type":"string","description":"Retained venue-specific instrument identifier; preserve spelling and separators."},"underlyer":{"description":"Legacy underlying label, typically BTC_USD; not a guarantee of the option premium or settlement currency.","nullable":true,"type":"string"},"expiration_date":{"description":"Legacy expiry timestamp formatted at 08:00 UTC. This compatibility field is not an exchange-native expiry-hour certificate across all venues.","nullable":true,"type":"string"},"claim_type":{"type":"string","description":"Option right: call or put; not long/short position side."},"exercise":{"description":"Legacy exercise-style label: European.","nullable":true,"type":"string"},"settlement":{"description":"Legacy settlement-method label: cash. Does not identify the cash/crypto settlement currency.","nullable":true,"type":"string"},"datetime":{"description":"Optional legacy timestamp text from the archive; date is the pagination timestamp in Unix milliseconds. Text may omit a timezone suffix.","nullable":true,"type":"string"},"open_interest":{"description":"Outstanding option quantity in retained source units. Not USD notional or premium value; this reader does not apply another contract multiplier. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"mark_price":{"description":"Option mark premium per source quantity unit, in the instrument premium currency. Inverse BTC/ETH and linear stablecoin options do not share one premium currency; no USD conversion is applied. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"mark_iv":{"description":"Mark implied volatility in percentage points (50 means 50%, not 0.50). Retained source observation; no new model fit or rescaling is applied. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"bid_iv":{"description":"Implied volatility associated with the bid quote, in percentage points. Not a premium or bid size; unavailable retained values are not executable quotes. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"ask_iv":{"description":"Implied volatility associated with the ask quote, in percentage points. Not a premium or ask size; unavailable retained values are not executable quotes. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"strike":{"description":"Option strike price in the underlying reference quote currency, not an option premium. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_bid_price":{"description":"Best bid premium per source quantity unit, in the same premium currency as mark_price; not bid implied volatility. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_ask_price":{"description":"Best ask premium per source quantity unit, in the same premium currency as mark_price; not ask implied volatility. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"underlyer_spot":{"description":"Reference-price field with legacy generation-dependent mapping. Recent observations use spot index; the intermediate archive generation uses stored underlying reference instead. Do not assume identical semantics over all history; see field guide. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"forward_price":{"description":"Reference-price field with legacy generation-dependent mapping. Recent observations use underlying pricing reference; the intermediate archive generation uses stored index reference instead. Not universally an expiry forward; see field guide. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"volume":{"description":"Trade-derived rolling quantity for the requested resolution, rounded to three decimals. Unlike ordinary options snapshots, this is not the venue-reported rolling volume field.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_bid_amount":{"description":"Retained best-bid displayed quantity in source units. Not full depth or guaranteed executable size; historical unit conventions are preserved. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_ask_amount":{"description":"Retained best-ask displayed quantity in source units. Not full depth or guaranteed executable size; historical unit conventions are preserved. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"underlying_index":{"type":"string","description":"Reference future symbol if available, otherwise a SYN. label. A synthetic label is not proof of a tradable underlying contract."}},"required":["date","instrument_name","claim_type","underlying_index"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Snapshot timestamp in Unix milliseconds, UTC. Multiple instruments share a timestamp; archive slots are not necessarily the original publication time."},"instrument_name":{"type":"string","description":"Retained venue-specific instrument identifier; preserve spelling and separators."},"underlyer":{"description":"Legacy underlying label, typically BTC_USD; not a guarantee of the option premium or settlement currency.","nullable":true,"type":"string"},"datetime":{"description":"Optional legacy timestamp text from the archive; date is the pagination timestamp in Unix milliseconds. Text may omit a timezone suffix.","nullable":true,"type":"string"},"mark_price":{"nullable":true,"description":"Retained derivative reference/mark price in the source price convention; not an option premium or OHLC candle. A stored 0 is returned as null, except in post-2024-11-01 perpetual archive rows, where 0 is kept.","type":"number"},"bid":{"nullable":true,"description":"Retained best bid price in the contract quotation convention; not bid size. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"bid_amount":{"nullable":true,"description":"Retained displayed quantity at the best bid, in source quantity units. Not depth beyond level 1 or a fill guarantee. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"ask":{"nullable":true,"description":"Retained best ask price in the contract quotation convention; not ask size. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"ask_amount":{"nullable":true,"description":"Retained displayed quantity at the best ask, in source quantity units. Not depth beyond level 1 or a fill guarantee. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"volume":{"nullable":true,"description":"Retained rolling volume in base-asset quantity units. Unlike derivative instrument-history volume, this snapshot field is NOT USD volume. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"volume_usd":{"nullable":true,"description":"Retained rolling volume in USD-equivalent units. Not volume traded during the requested resolution. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"open_interest":{"nullable":true,"description":"Retained open interest under the archived source convention. Derivative instrument history documents USD-equivalent open interest; that unit is not verified for archived snapshots, so check before combining them. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"underlyer_spot":{"nullable":true,"description":"Retained derivative spot/index reference price, in its reference quote currency. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"basis":{"nullable":true,"description":"Retained futures/perpetual basis under the source convention. Not funding paid; no percentage/fraction conversion is added by this reader. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"expiration_date":{"description":"Legacy expiry timestamp formatted at 08:00 UTC. This compatibility field is not an exchange-native expiry-hour certificate across all venues.","nullable":true,"type":"string"}},"required":["date","instrument_name","mark_price","bid","bid_amount","ask","ask_amount","volume","volume_usd","open_interest","underlyer_spot","basis"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Snapshot timestamp in Unix milliseconds, UTC. Multiple instruments share a timestamp; archive slots are not necessarily the original publication time."},"instrument_name":{"type":"string","description":"Retained venue-specific instrument identifier; preserve spelling and separators."},"underlyer":{"description":"Legacy underlying label, typically BTC_USD; not a guarantee of the option premium or settlement currency.","nullable":true,"type":"string"},"datetime":{"description":"Optional legacy timestamp text from the archive; date is the pagination timestamp in Unix milliseconds. Text may omit a timezone suffix.","nullable":true,"type":"string"},"mark_price":{"nullable":true,"description":"Retained derivative reference/mark price in the source price convention; not an option premium or OHLC candle. A stored 0 is returned as null, except in post-2024-11-01 perpetual archive rows, where 0 is kept.","type":"number"},"bid":{"nullable":true,"description":"Retained best bid price in the contract quotation convention; not bid size. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"bid_amount":{"nullable":true,"description":"Retained displayed quantity at the best bid, in source quantity units. Not depth beyond level 1 or a fill guarantee. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"ask":{"nullable":true,"description":"Retained best ask price in the contract quotation convention; not ask size. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"ask_amount":{"nullable":true,"description":"Retained displayed quantity at the best ask, in source quantity units. Not depth beyond level 1 or a fill guarantee. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"volume":{"nullable":true,"description":"Retained rolling volume in base-asset quantity units. Unlike derivative instrument-history volume, this snapshot field is NOT USD volume. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"volume_usd":{"nullable":true,"description":"Retained rolling volume in USD-equivalent units. Not volume traded during the requested resolution. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"open_interest":{"nullable":true,"description":"Retained open interest under the archived source convention. Derivative instrument history documents USD-equivalent open interest; that unit is not verified for archived snapshots, so check before combining them. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"underlyer_spot":{"nullable":true,"description":"Retained derivative spot/index reference price, in its reference quote currency. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"basis":{"nullable":true,"description":"Retained futures/perpetual basis under the source convention. Not funding paid; no percentage/fraction conversion is added by this reader. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"next_fr":{"nullable":true,"description":"Retained next funding-rate estimate under the archived source convention (documented elsewhere as percentage points, not verified for archives). Not the next settlement timestamp or a guaranteed payment. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"fr":{"nullable":true,"description":"Retained funding-rate observation under the archived source convention. The retained-history guide documents percentage points (0.01 means 0.01%); that convention is not verified for archived snapshots. Not a funding payment. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"}},"required":["date","instrument_name","mark_price","bid","bid_amount","ask","ask_amount","volume","volume_usd","open_interest","underlyer_spot","basis","next_fr","fr"],"additionalProperties":false}]}}},"required":["dataset_id","series","meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"Retained options, futures and perpetual snapshot observations","tags":["Market Snapshot History"]}},"/api/v1/historical/options/snapshot/{market}/{currency}":{"get":{"operationId":"LegacySnapshotHistoryController_options","parameters":[{"name":"market","required":true,"in":"path","description":"Retained venue selector, case-insensitive.","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","description":"Retained currency/product selector, case-insensitive.","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Inclusive. Date-only includes the full UTC day. Archive end is clamped to now.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Default 1m. Sampling, not OHLC aggregation; archive grids start at the requested minute.","schema":{"enum":["1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"],"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Timestamp-slot page, not an instrument-row page."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1},"description":"Maximum selected snapshot timestamps, not instrument rows."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Snapshot timestamp in Unix milliseconds, UTC. Multiple instruments share a timestamp; archive slots are not necessarily the original publication time."},"instrument_name":{"type":"string","description":"Retained venue-specific instrument identifier; preserve spelling and separators."},"underlyer":{"description":"Legacy underlying label, typically BTC_USD; not a guarantee of the option premium or settlement currency.","nullable":true,"type":"string"},"expiration_date":{"description":"Legacy expiry timestamp formatted at 08:00 UTC. This compatibility field is not an exchange-native expiry-hour certificate across all venues.","nullable":true,"type":"string"},"claim_type":{"type":"string","description":"Option right: call or put; not long/short position side."},"exercise":{"description":"Legacy exercise-style label: European.","nullable":true,"type":"string"},"settlement":{"description":"Legacy settlement-method label: cash. Does not identify the cash/crypto settlement currency.","nullable":true,"type":"string"},"datetime":{"description":"Optional legacy timestamp text from the archive; date is the pagination timestamp in Unix milliseconds. Text may omit a timezone suffix.","nullable":true,"type":"string"},"open_interest":{"description":"Outstanding option quantity in retained source units. Not USD notional or premium value; this reader does not apply another contract multiplier. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"mark_price":{"description":"Option mark premium per source quantity unit, in the instrument premium currency. Inverse BTC/ETH and linear stablecoin options do not share one premium currency; no USD conversion is applied. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"mark_iv":{"description":"Mark implied volatility in percentage points (50 means 50%, not 0.50). Retained source observation; no new model fit or rescaling is applied. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"bid_iv":{"description":"Implied volatility associated with the bid quote, in percentage points. Not a premium or bid size; unavailable retained values are not executable quotes. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"ask_iv":{"description":"Implied volatility associated with the ask quote, in percentage points. Not a premium or ask size; unavailable retained values are not executable quotes. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"strike":{"description":"Option strike price in the underlying reference quote currency, not an option premium. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_bid_price":{"description":"Best bid premium per source quantity unit, in the same premium currency as mark_price; not bid implied volatility. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_ask_price":{"description":"Best ask premium per source quantity unit, in the same premium currency as mark_price; not ask implied volatility. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"underlyer_spot":{"description":"Reference-price field with legacy generation-dependent mapping. Recent observations use spot index; the intermediate archive generation uses stored underlying reference instead. Do not assume identical semantics over all history; see field guide. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"forward_price":{"description":"Reference-price field with legacy generation-dependent mapping. Recent observations use underlying pricing reference; the intermediate archive generation uses stored index reference instead. Not universally an expiry forward; see field guide. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"volume":{"description":"Retained venue-reported option volume in source quantity units and source reporting window. Not the volume traded inside the requested resolution. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_bid_amount":{"description":"Retained best-bid displayed quantity in source units. Not full depth or guaranteed executable size; historical unit conventions are preserved. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_ask_amount":{"description":"Retained best-ask displayed quantity in source units. Not full depth or guaranteed executable size; historical unit conventions are preserved. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]}},"required":["date","instrument_name","claim_type"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible historical option-chain snapshots","tags":["Legacy Market Snapshot History"]}},"/api/v1/historical/futures/snapshot/{market}/{currency}":{"get":{"operationId":"LegacySnapshotHistoryController_futures","parameters":[{"name":"market","required":true,"in":"path","description":"Retained venue selector, case-insensitive.","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","description":"Retained currency/product selector, case-insensitive.","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Inclusive. Date-only includes the full UTC day. Archive end is clamped to now.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Default 1m. Sampling, not OHLC aggregation; archive grids start at the requested minute.","schema":{"enum":["1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"],"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Timestamp-slot page, not an instrument-row page."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":144},"description":"Maximum selected snapshot timestamps, not instrument rows."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Snapshot timestamp in Unix milliseconds, UTC. Multiple instruments share a timestamp; archive slots are not necessarily the original publication time."},"instrument_name":{"type":"string","description":"Retained venue-specific instrument identifier; preserve spelling and separators."},"underlyer":{"description":"Legacy underlying label, typically BTC_USD; not a guarantee of the option premium or settlement currency.","nullable":true,"type":"string"},"datetime":{"description":"Optional legacy timestamp text from the archive; date is the pagination timestamp in Unix milliseconds. Text may omit a timezone suffix.","nullable":true,"type":"string"},"mark_price":{"nullable":true,"description":"Retained derivative reference/mark price in the source price convention; not an option premium or OHLC candle. A stored 0 is returned as null, except in post-2024-11-01 perpetual archive rows, where 0 is kept.","type":"number"},"bid":{"nullable":true,"description":"Retained best bid price in the contract quotation convention; not bid size. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"bid_amount":{"nullable":true,"description":"Retained displayed quantity at the best bid, in source quantity units. Not depth beyond level 1 or a fill guarantee. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"ask":{"nullable":true,"description":"Retained best ask price in the contract quotation convention; not ask size. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"ask_amount":{"nullable":true,"description":"Retained displayed quantity at the best ask, in source quantity units. Not depth beyond level 1 or a fill guarantee. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"volume":{"nullable":true,"description":"Retained rolling volume in base-asset quantity units. Unlike derivative instrument-history volume, this snapshot field is NOT USD volume. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"volume_usd":{"nullable":true,"description":"Retained rolling volume in USD-equivalent units. Not volume traded during the requested resolution. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"open_interest":{"nullable":true,"description":"Retained open interest under the archived source convention. Derivative instrument history documents USD-equivalent open interest; that unit is not verified for archived snapshots, so check before combining them. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"underlyer_spot":{"nullable":true,"description":"Retained derivative spot/index reference price, in its reference quote currency. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"basis":{"nullable":true,"description":"Retained futures/perpetual basis under the source convention. Not funding paid; no percentage/fraction conversion is added by this reader. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"expiration_date":{"description":"Legacy expiry timestamp formatted at 08:00 UTC. This compatibility field is not an exchange-native expiry-hour certificate across all venues.","nullable":true,"type":"string"}},"required":["date","instrument_name","mark_price","bid","bid_amount","ask","ask_amount","volume","volume_usd","open_interest","underlyer_spot","basis"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible historical dated-futures snapshots","tags":["Legacy Market Snapshot History"]}},"/api/v1/historical/derivs/snapshot/{market}/{currency}":{"get":{"operationId":"LegacySnapshotHistoryController_perpetuals","parameters":[{"name":"market","required":true,"in":"path","description":"Retained venue selector, case-insensitive.","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","description":"Retained currency/product selector, case-insensitive.","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Inclusive. Date-only includes the full UTC day. Archive end is clamped to now.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Default 1m. Sampling, not OHLC aggregation; archive grids start at the requested minute.","schema":{"enum":["1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"],"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Timestamp-slot page, not an instrument-row page."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":144},"description":"Maximum selected snapshot timestamps, not instrument rows."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Snapshot timestamp in Unix milliseconds, UTC. Multiple instruments share a timestamp; archive slots are not necessarily the original publication time."},"instrument_name":{"type":"string","description":"Retained venue-specific instrument identifier; preserve spelling and separators."},"underlyer":{"description":"Legacy underlying label, typically BTC_USD; not a guarantee of the option premium or settlement currency.","nullable":true,"type":"string"},"datetime":{"description":"Optional legacy timestamp text from the archive; date is the pagination timestamp in Unix milliseconds. Text may omit a timezone suffix.","nullable":true,"type":"string"},"mark_price":{"nullable":true,"description":"Retained derivative reference/mark price in the source price convention; not an option premium or OHLC candle. A stored 0 is returned as null, except in post-2024-11-01 perpetual archive rows, where 0 is kept.","type":"number"},"bid":{"nullable":true,"description":"Retained best bid price in the contract quotation convention; not bid size. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"bid_amount":{"nullable":true,"description":"Retained displayed quantity at the best bid, in source quantity units. Not depth beyond level 1 or a fill guarantee. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"ask":{"nullable":true,"description":"Retained best ask price in the contract quotation convention; not ask size. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"ask_amount":{"nullable":true,"description":"Retained displayed quantity at the best ask, in source quantity units. Not depth beyond level 1 or a fill guarantee. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"volume":{"nullable":true,"description":"Retained rolling volume in base-asset quantity units. Unlike derivative instrument-history volume, this snapshot field is NOT USD volume. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"volume_usd":{"nullable":true,"description":"Retained rolling volume in USD-equivalent units. Not volume traded during the requested resolution. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"open_interest":{"nullable":true,"description":"Retained open interest under the archived source convention. Derivative instrument history documents USD-equivalent open interest; that unit is not verified for archived snapshots, so check before combining them. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"underlyer_spot":{"nullable":true,"description":"Retained derivative spot/index reference price, in its reference quote currency. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"basis":{"nullable":true,"description":"Retained futures/perpetual basis under the source convention. Not funding paid; no percentage/fraction conversion is added by this reader. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"next_fr":{"nullable":true,"description":"Retained next funding-rate estimate under the archived source convention (documented elsewhere as percentage points, not verified for archives). Not the next settlement timestamp or a guaranteed payment. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"},"fr":{"nullable":true,"description":"Retained funding-rate observation under the archived source convention. The retained-history guide documents percentage points (0.01 means 0.01%); that convention is not verified for archived snapshots. Not a funding payment. Archived snapshots return a stored null or empty value as 0 and an absent value as null; a zero is not proof of a zero observation.","type":"number"}},"required":["date","instrument_name","mark_price","bid","bid_amount","ask","ask_amount","volume","volume_usd","open_interest","underlyer_spot","basis","next_fr","fr"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible historical perpetual-futures snapshots","tags":["Legacy Market Snapshot History"]}},"/api/v1/historical/options/dynamic_volume_snapshot/{market}/{currency}":{"get":{"operationId":"LegacySnapshotHistoryController_optionsDynamicVolume","parameters":[{"name":"market","required":true,"in":"path","description":"Retained venue selector, case-insensitive.","schema":{"type":"string"}},{"name":"currency","required":true,"in":"path","description":"Retained currency/product selector, case-insensitive.","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Inclusive. Date-only includes the full UTC day. Archive end is clamped to now.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Default 1m. Sampling, not OHLC aggregation; archive grids start at the requested minute.","schema":{"enum":["1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"],"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Timestamp-slot page, not an instrument-row page."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1},"description":"Maximum selected snapshot timestamps, not instrument rows."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"nullable":true,"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Snapshot timestamp in Unix milliseconds, UTC. Multiple instruments share a timestamp; archive slots are not necessarily the original publication time."},"instrument_name":{"type":"string","description":"Retained venue-specific instrument identifier; preserve spelling and separators."},"underlyer":{"description":"Legacy underlying label, typically BTC_USD; not a guarantee of the option premium or settlement currency.","nullable":true,"type":"string"},"expiration_date":{"description":"Legacy expiry timestamp formatted at 08:00 UTC. This compatibility field is not an exchange-native expiry-hour certificate across all venues.","nullable":true,"type":"string"},"claim_type":{"type":"string","description":"Option right: call or put; not long/short position side."},"exercise":{"description":"Legacy exercise-style label: European.","nullable":true,"type":"string"},"settlement":{"description":"Legacy settlement-method label: cash. Does not identify the cash/crypto settlement currency.","nullable":true,"type":"string"},"datetime":{"description":"Optional legacy timestamp text from the archive; date is the pagination timestamp in Unix milliseconds. Text may omit a timezone suffix.","nullable":true,"type":"string"},"open_interest":{"description":"Outstanding option quantity in retained source units. Not USD notional or premium value; this reader does not apply another contract multiplier. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"mark_price":{"description":"Option mark premium per source quantity unit, in the instrument premium currency. Inverse BTC/ETH and linear stablecoin options do not share one premium currency; no USD conversion is applied. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"mark_iv":{"description":"Mark implied volatility in percentage points (50 means 50%, not 0.50). Retained source observation; no new model fit or rescaling is applied. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"bid_iv":{"description":"Implied volatility associated with the bid quote, in percentage points. Not a premium or bid size; unavailable retained values are not executable quotes. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"ask_iv":{"description":"Implied volatility associated with the ask quote, in percentage points. Not a premium or ask size; unavailable retained values are not executable quotes. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"strike":{"description":"Option strike price in the underlying reference quote currency, not an option premium. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_bid_price":{"description":"Best bid premium per source quantity unit, in the same premium currency as mark_price; not bid implied volatility. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_ask_price":{"description":"Best ask premium per source quantity unit, in the same premium currency as mark_price; not ask implied volatility. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"underlyer_spot":{"description":"Reference-price field with legacy generation-dependent mapping. Recent observations use spot index; the intermediate archive generation uses stored underlying reference instead. Do not assume identical semantics over all history; see field guide. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"forward_price":{"description":"Reference-price field with legacy generation-dependent mapping. Recent observations use underlying pricing reference; the intermediate archive generation uses stored index reference instead. Not universally an expiry forward; see field guide. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"volume":{"description":"Trade-derived rolling quantity for the requested resolution, rounded to three decimals. Unlike ordinary options snapshots, this is not the venue-reported rolling volume field.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_bid_amount":{"description":"Retained best-bid displayed quantity in source units. Not full depth or guaranteed executable size; historical unit conventions are preserved. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"best_ask_amount":{"description":"Retained best-ask displayed quantity in source units. Not full depth or guaranteed executable size; historical unit conventions are preserved. Archived generations may retain numeric strings or omit the field; null, zero and absence are distinct.","anyOf":[{"type":"number"},{"type":"string"},{"type":"string","nullable":true,"enum":[null]}]},"underlying_index":{"type":"string","description":"Reference future symbol if available, otherwise a SYN. label. A synthetic label is not proof of a tradable underlying contract."}},"required":["date","instrument_name","claim_type","underlying_index"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible option snapshots with trade-derived rolling volume","tags":["Legacy Market Snapshot History"]}},"/api/v1/derivatives/funding-history":{"get":{"description":"Eight retained v1 series selected by series: perpetual_funding and perpetual_yield (per-symbol arrays for one exchange); perpetual_funding_exchange (yield, funding and next_fr by market and symbol, option C/D selecting the legacy centralized/decentralized venue group); oi_weighted_funding (USD open-interest weighted) and oi_weighted_volume_funding (USD rolling-volume weighted), each with all/coin-margined/USD-margined variants; oi_weighted_basis (seven target tenors); futures_annualized_basis (per-market map for one days tenor); realized_volatility (aggregate spot). Weighted values combine the instruments stored at one timestamp; they are not averages over time. Not settlement cashflows or modern v2 carry.\n\nStored observation timestamp shared by every value in the row (whole seconds), ascending. Not a funding settlement time or ingestion/publication time.\n\nStored observations grouped by timestamp. Coarser resolutions keep only timestamps on the UTC grid (1h: minute 0; 1d: 00:00 UTC): sampling, not aggregation. realized_volatility defaults to 1h and accepts only 1h, 2h, 4h, 6h, 12h or 1d.\n\nExplicit timezone-qualified start/end, inclusive after truncation to seconds. exchange is required only for perpetual_funding/perpetual_yield, option only for perpetual_funding_exchange and days (7, 30, 60, 90, 180, 270, 365) only for futures_annualized_basis. Funding/carry use the full uppercase currency; realized_volatility uses the base before an underscore. page/limit (default 10, maximum 1440) and total count timestamps, not nested symbols or markets. Compatibility aliases keep v1 date-only whole-day bounds, the omitted-end default and legacy pagination accounting; use the route mapping for equivalent requests.\n\nPercentage points per the retained field guide (0.01 means 0.01%), normally 8-hour-equivalent as stored. Modern perpetual funding is a decimal (0.0001 means 0.01%), so the same rate is 100 times larger here. Not a payment amount or settlement timestamp. Sampling at 1h does not make it an hourly rate.\n\nAnnualized percentage points (10.95 means 10.95% per year), not a compounded APY; do not re-annualize.\n\nWeighted normalized reference price in the source quotation currency.\n\noi_weighted_basis and futures_annualized_basis: annualized dated-futures basis in percentage points, weighted by open_interest / (0.001 + |days_to_go - target|) within the tenor band (5 days for 7, otherwise half the target). Keys are target days or venue names.\n\nAnnualized aggregate-spot realized volatility in percentage points, rounded to two decimals; keys 3 to 365 are lookback days, not option expiries.\n\nWeighted funding and basis return 0 when the weight denominator is not positive, and a missing RV tenor keeps a 0 default. Such zeroes are not certified zero activity or zero volatility.\n\nRetained perpetual and dated-future observations for the currency, excluding CME; realized volatility uses the aggregate spot series. Not certified original publication or complete venue membership.\n\nNo data-coverage endpoint is declared for this retained reader, and its response availability coverage bounds are null. Page totals are not archive bounds; an accepted selector does not establish that rows exist. Modern dataset coverage does not bound these older generations.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: derivatives.funding_history. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.\n\nPerpetual funding/yield preserve symbol arrays, including duplicate symbols. Available to eligible subscribers when enabled; API key or OAuth uses the same account history rights. x402 is not enabled. Field guide: https://apiv2.laevitas.ch/migration/v1-to-v2/history-field-guide.md.","operationId":"FundingHistoryController_read","parameters":[{"name":"series","required":true,"in":"query","schema":{"type":"string","enum":["perpetual_funding","perpetual_yield","perpetual_funding_exchange","oi_weighted_funding","oi_weighted_volume_funding","oi_weighted_basis","futures_annualized_basis","realized_volatility"]}},{"name":"exchange","required":false,"in":"query","schema":{"description":"Required only for perpetual_funding and perpetual_yield. Lowercase retained venue selector, including hyphenated names. Venue availability is source-dependent; no fixed current-exchange whitelist is implied.","type":"string","maxLength":64,"pattern":"^[a-z0-9]+(?:[-_][a-z0-9]+)*$"}},{"name":"currency","required":true,"in":"query","schema":{"type":"string","maxLength":32,"pattern":"^[A-Z0-9]+(?:_[A-Z0-9]+)?$","description":"Uppercase currency. Funding/carry preserve the full currency; realized_volatility selects the base before an underscore."}},{"name":"option","required":false,"in":"query","schema":{"description":"Required only for perpetual_funding_exchange: C or D uses the pinned gateway DEX list.","type":"string","enum":["C","D"]}},{"name":"days","required":false,"in":"query","schema":{"description":"Required only for futures_annualized_basis: one target tenor in days.","anyOf":[{"type":"number","enum":[7]},{"type":"number","enum":[30]},{"type":"number","enum":[60]},{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[270]},{"type":"number","enum":[365]}]}},{"name":"start","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},{"name":"end","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive after truncation to seconds."}},{"name":"resolution","required":false,"in":"query","schema":{"description":"UTC grid samples, not interval aggregates. Default native, except realized_volatility defaults to 1h and permits only 1h, 2h, 4h, 6h, 12h or 1d.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"default":10,"type":"integer","minimum":1,"maximum":1440}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["derivatives.funding_observations"]},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"availability":{"type":"object","properties":{"empty_reason":{"nullable":true,"type":"string","enum":["classification_unavailable"]},"coverage":{"type":"object","properties":{"source_id":{"type":"string","enum":["derivatives.funding_observations"]},"exchange_supported":{"nullable":true,"type":"boolean","enum":[true]},"instrument_eligible":{"type":"string","nullable":true,"enum":[null]},"earliest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"latest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["source_id","exchange_supported","instrument_eligible","earliest_observed_at","latest_observed_at"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","enum":["unavailable"]},"certification":{"type":"string","nullable":true,"enum":[null]},"complete_from":{"type":"string","nullable":true,"enum":[null]},"complete_through":{"type":"string","nullable":true,"enum":[null]},"complete_from_inclusive":{"type":"boolean","enum":[true]},"complete_through_inclusive":{"type":"boolean","enum":[false]},"monotonic":{"type":"boolean","enum":[false]},"monotonic_boundary":{"type":"string","enum":["complete_through"]},"revisions_possible":{"type":"boolean","enum":[true]},"certified_at":{"type":"string","nullable":true,"enum":[null]},"updated_at":{"type":"string","nullable":true,"enum":[null]},"unavailable_reason":{"type":"string","enum":["not_supported"]},"scope":{"type":"object","properties":{"endpoint_id":{"type":"string","enum":["derivatives.funding_observations"]},"source_ids":{"type":"array","items":{"type":"string"}},"exchange":{"nullable":true,"type":"string"},"instrument_name":{"nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"}},"required":["endpoint_id","source_ids","exchange","instrument_name","currency"],"additionalProperties":false}},"required":["status","certification","complete_from","complete_through","complete_from_inclusive","complete_through_inclusive","monotonic","monotonic_boundary","revisions_possible","certified_at","updated_at","unavailable_reason","scope"],"additionalProperties":false}},"required":["empty_reason","coverage","completeness"],"additionalProperties":false}},"required":["total","items","page","total_pages","limit","availability"],"additionalProperties":false},"series":{"type":"string","enum":["perpetual_funding","perpetual_yield","perpetual_funding_exchange","oi_weighted_funding","oi_weighted_volume_funding","oi_weighted_basis","futures_annualized_basis","realized_volatility"]},"option":{"type":"string","enum":["C","D"]},"days":{"anyOf":[{"type":"number","enum":[7]},{"type":"number","enum":[30]},{"type":"number","enum":[60]},{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[270]},{"type":"number","enum":[365]}]},"items":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples this grid, not funding settlement times."},"data":{"type":"array","items":{"type":"object","properties":{"funding":{"nullable":true,"description":"Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"symbol":{"type":"string","description":"Retained exchange contract identifier; multiple symbols may exist for one currency and timestamp."}},"required":["funding","symbol"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples this grid, not funding settlement times."},"data":{"type":"array","items":{"type":"object","properties":{"yield":{"nullable":true,"description":"Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"symbol":{"type":"string","description":"Retained exchange contract identifier; multiple symbols may exist for one currency and timestamp."}},"required":["yield","symbol"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples this grid, not funding settlement times."},"data":{"type":"array","items":{"type":"object","properties":{"yield":{"nullable":true,"description":"Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"funding":{"nullable":true,"description":"Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"next_fr":{"nullable":true,"description":"Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"market":{"type":"string","description":"Retained exchange name; not a margin type."},"symbol":{"type":"string","description":"Retained exchange contract identifier; multiple symbols may exist for one currency and timestamp."}},"required":["yield","funding","next_fr","market","symbol"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples this grid, not funding settlement times."},"price":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Normalized reference price; not an option premium.","type":"number"},"apr":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"apr_c":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Coin-margined contracts only; c is not call. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"apr_u":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. USD-margined contracts only; u is not put. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"funding":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"funding_c":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Coin-margined contracts only. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"funding_u":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. USD-margined contracts only. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"next_fr":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"next_fr_c":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Coin-margined contracts only. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"next_fr_u":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. USD-margined contracts only. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"}},"required":["date","price","apr","apr_c","apr_u","funding","funding_c","funding_u","next_fr","next_fr_c","next_fr_u"],"additionalProperties":false},{"type":"object","properties":{"price":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Normalized reference price; not an option premium.","type":"number"},"apr":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"apr_c":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Coin-margined contracts only; c is not call. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"apr_u":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. USD-margined contracts only; u is not put. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"funding":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"funding_c":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Coin-margined contracts only. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"funding_u":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. USD-margined contracts only. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"next_fr":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"next_fr_c":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Coin-margined contracts only. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"next_fr_u":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. USD-margined contracts only. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples observations rather than calculating interval totals."}},"required":["price","apr","apr_c","apr_u","funding","funding_c","funding_u","next_fr","next_fr_c","next_fr_u","date"],"additionalProperties":false},{"type":"object","properties":{"7":{"nullable":true,"description":"7-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"30":{"nullable":true,"description":"30-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"60":{"nullable":true,"description":"60-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"90":{"nullable":true,"description":"90-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"180":{"nullable":true,"description":"180-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"270":{"nullable":true,"description":"270-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"365":{"nullable":true,"description":"365-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples observations rather than calculating interval totals."}},"required":["7","30","60","90","180","270","365","date"],"additionalProperties":false},{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples observations rather than calculating interval totals."}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Annualized dated-futures basis in percentage points for this exchange and selected tenor; not a perpetual funding settlement.","type":"number"}},{"type":"object","properties":{"3":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"7":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"30":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"60":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"90":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"180":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"270":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"365":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples observations rather than calculating interval totals."}},"required":["3","7","30","60","90","180","270","365","date"],"additionalProperties":false}]}}},"required":["dataset_id","meta","series","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"Retained funding, carry and aggregate spot realized-volatility observations","tags":["Derivatives Funding History"]}},"/api/v1/historical/futures/perpetual_funding/{currency}/{market}":{"get":{"operationId":"LegacyFundingHistoryController_perpetual_funding","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"market","required":true,"in":"path","description":"Retained venue name, case-insensitive. Availability depends on the retained source.","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid, not aggregation. Omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 timestamps but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples this grid, not funding settlement times."},"data":{"type":"array","items":{"type":"object","properties":{"funding":{"nullable":true,"description":"Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"symbol":{"type":"string","description":"Retained exchange contract identifier; multiple symbols may exist for one currency and timestamp."}},"required":["funding","symbol"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible perpetual funding observations by symbol","tags":["Legacy Derivatives Funding History"]}},"/api/v1/historical/futures/perpetual_yield/{currency}/{market}":{"get":{"operationId":"LegacyFundingHistoryController_perpetual_yield","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"market","required":true,"in":"path","description":"Retained venue name, case-insensitive. Availability depends on the retained source.","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid, not aggregation. Omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 timestamps but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples this grid, not funding settlement times."},"data":{"type":"array","items":{"type":"object","properties":{"yield":{"nullable":true,"description":"Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"symbol":{"type":"string","description":"Retained exchange contract identifier; multiple symbols may exist for one currency and timestamp."}},"required":["yield","symbol"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible perpetual yield observations by symbol","tags":["Legacy Derivatives Funding History"]}},"/api/v1/historical/futures/perpetual_funding_exchange/{currency}/{option}":{"get":{"operationId":"LegacyFundingHistoryController_perpetual_funding_exchange","parameters":[{"name":"option","required":true,"in":"path","description":"Pinned gateway CEX/DEX taxonomy, case-insensitive.","schema":{"enum":["C","D"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid, not aggregation. Omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 timestamps but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples this grid, not funding settlement times."},"data":{"type":"array","items":{"type":"object","properties":{"yield":{"nullable":true,"description":"Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"funding":{"nullable":true,"description":"Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"next_fr":{"nullable":true,"description":"Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"market":{"type":"string","description":"Retained exchange name; not a margin type."},"symbol":{"type":"string","description":"Retained exchange contract identifier; multiple symbols may exist for one currency and timestamp."}},"required":["yield","funding","next_fr","market","symbol"],"additionalProperties":false}}},"required":["date","data"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible yield, funding and announced rate by market and symbol","tags":["Legacy Derivatives Funding History"]}},"/api/v1/historical/futures/oi_weighted_funding/{currency}":{"get":{"operationId":"LegacyFundingHistoryController_oi_weighted_funding","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid, not aggregation. Omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 timestamps but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples this grid, not funding settlement times."},"price":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Normalized reference price; not an option premium.","type":"number"},"apr":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"apr_c":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Coin-margined contracts only; c is not call. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"apr_u":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. USD-margined contracts only; u is not put. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"funding":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"funding_c":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Coin-margined contracts only. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"funding_u":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. USD-margined contracts only. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"next_fr":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"next_fr_c":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. Coin-margined contracts only. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"next_fr_u":{"nullable":true,"description":"Weighted by USD open interest at the observation timestamp. USD-margined contracts only. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"}},"required":["date","price","apr","apr_c","apr_u","funding","funding_c","funding_u","next_fr","next_fr_c","next_fr_u"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible USD-open-interest-weighted funding observations","tags":["Legacy Derivatives Funding History"]}},"/api/v1/historical/futures/oi_weighted_volume_funding/{currency}":{"get":{"operationId":"LegacyFundingHistoryController_oi_weighted_volume_funding","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid, not aggregation. Omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 timestamps but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"price":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Normalized reference price; not an option premium.","type":"number"},"apr":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"apr_c":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Coin-margined contracts only; c is not call. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"apr_u":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. USD-margined contracts only; u is not put. Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","type":"number"},"funding":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"funding_c":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Coin-margined contracts only. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"funding_u":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. USD-margined contracts only. Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","type":"number"},"next_fr":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"next_fr_c":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. Coin-margined contracts only. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"next_fr_u":{"nullable":true,"description":"Weighted by USD rolling volume at the observation timestamp. USD-margined contracts only. Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","type":"number"},"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples observations rather than calculating interval totals."}},"required":["price","apr","apr_c","apr_u","funding","funding_c","funding_u","next_fr","next_fr_c","next_fr_u","date"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible USD-volume-weighted funding observations","tags":["Legacy Derivatives Funding History"]}},"/api/v1/historical/futures/oi_weighted_basis/{currency}":{"get":{"operationId":"LegacyFundingHistoryController_oi_weighted_basis","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid, not aggregation. Omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 timestamps but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"7":{"nullable":true,"description":"7-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"30":{"nullable":true,"description":"30-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"60":{"nullable":true,"description":"60-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"90":{"nullable":true,"description":"90-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"180":{"nullable":true,"description":"180-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"270":{"nullable":true,"description":"270-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"365":{"nullable":true,"description":"365-day target: annualized dated-futures basis in percentage points, weighted by open interest and distance to this tenor. Not a perpetual funding payment; zero may be the legacy no-weight default.","type":"number"},"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples observations rather than calculating interval totals."}},"required":["7","30","60","90","180","270","365","date"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible distance-weighted futures basis at seven tenors","tags":["Legacy Derivatives Funding History"]}},"/api/v1/historical/futures/futures_annualized_basis/{currency}/{days}":{"get":{"operationId":"LegacyFundingHistoryController_futures_annualized_basis","parameters":[{"name":"days","required":true,"in":"path","schema":{"enum":[7,30,60,90,180,270,365],"type":"number"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid, not aggregation. Omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 timestamps but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples observations rather than calculating interval totals."}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Annualized dated-futures basis in percentage points for this exchange and selected tenor; not a perpetual funding settlement.","type":"number"}}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible fixed-tenor futures basis by market","tags":["Legacy Derivatives Funding History"]}},"/api/v1/historical/futures/realized_volatility/{currency}":{"get":{"description":"Corrected retained spot/mark AGGREGATE points, not a futures estimator or option IV/RV join. Returns 3/7/30/60/90/180/270/365, rounded to two decimals; missing pivots preserve source zero defaults. Default 1h; hourly/day grids only.","operationId":"LegacyFundingHistoryController_realized_volatility","parameters":[{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Default 1h; only 1h, 2h, 4h, 6h, 12h and 1d UTC samples are supported.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 timestamps but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"3":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"7":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"30":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"60":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"90":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"180":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"270":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"365":{"type":"number","minimum":0,"maximum":10000,"description":"Annualized realized volatility in percentage points. The field key is the lookback in days, not an option tenor. Uses aggregate spot returns, not a futures price series. A zero may be a preserved missing-pivot default, not measured zero volatility."},"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation Unix milliseconds, UTC; resolution samples observations rather than calculating interval totals."}},"required":["3","7","30","60","90","180","270","365","date"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible aggregate spot realized-volatility tenors","tags":["Legacy Derivatives Funding History"]}},"/api/v1/options/volatility-history":{"get":{"description":"Latest corrected legacy history. UTC grid samples, not averages, OHLC or originally-published vintages. Dynamic tenor keys and explicit withdrawals preserved. IV/RV combines venue model IV with spot RV. Actual-volatility series require days and return atm,c,p,d. Native actual RR/butterfly joins timestamp populations BEFORE paging; unlike their compatibility aliases, meta.total counts joined rows. Missing tenor fields stay omitted. Bid/ask IV calculates eight tenor maps {b,a,m} from retained chain observations, separately interpolating total variance with exact-tenor and single-neighbour fallback; mark is not a midpoint. Deribit BTC/ETH settlement prefixes stay distinct for this series. GEX preserves retained chain exposure formulas and product prefixes. Gamma bands default to 5m, return newest first and limit daily ranges to 31 inclusive UTC dates. VIX is the legacy chain estimator with 15/30/90/180-day keys, not DVOL. Available to eligible subscribers when enabled; API key or OAuth uses the same account history rights. x402 is not enabled. Field guide: https://apiv2.laevitas.ch/migration/v1-to-v2/history-field-guide.md.","operationId":"VolatilityHistoryController_read","parameters":[{"name":"series","required":true,"in":"query","schema":{"type":"string","enum":["atm_iv","atm_iv_model","risk_reversal","risk_reversal_model","butterfly","butterfly_model","skew","skew_model","dvol","iv_rv","actual_skew_model","actual_risk_reversal_model","actual_butterfly_model","iv_bid_ask","gex_index","gamma_bands","vix"]}},{"name":"exchange","required":true,"in":"query","schema":{"type":"string","enum":["deribit","binance","bybit","okx","coincall"]}},{"name":"currency","required":true,"in":"query","schema":{"type":"string","maxLength":32,"pattern":"^[A-Z0-9]+(?:_[A-Z0-9]+)?$","description":"Uppercase legacy currency. Point series and gamma bands select the base currency. Bid/ask IV, GEX and VIX preserve settlement prefixes: BTC and BTC_USDC are distinct."}},{"name":"type","required":false,"in":"query","schema":{"description":"Required for typed series. Bid/ask IV: P_ATM, P_25, P_10, P_5, C_ATM, C_25, C_10, C_5. Gamma bands: 1D, 7D, 30D. Other series use model or delta-bucket selectors; omit for market ATM, DVOL, IV/RV, GEX and VIX.","type":"string","maxLength":8}},{"name":"days","required":false,"in":"query","schema":{"description":"Required only for actual-volatility series: one selected tenor in days.","anyOf":[{"type":"number","enum":[7]},{"type":"number","enum":[30]},{"type":"number","enum":[60]},{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[365]}]}},{"name":"start","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},{"name":"end","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive after truncation to seconds."}},{"name":"resolution","required":false,"in":"query","schema":{"description":"UTC grid samples, not aggregates. Default native, except IV/RV defaults to 1h and gamma bands to 5m. IV/RV permits hourly/day grids only. Daily gamma bands allow at most 31 inclusive UTC calendar dates, regardless of page size.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"default":10,"type":"integer","minimum":1,"maximum":1440}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["options.volatility_observations"],"description":"Stable retained-dataset identifier; not the modern fitted-surface dataset."},"series":{"type":"string","enum":["atm_iv","atm_iv_model","risk_reversal","risk_reversal_model","butterfly","butterfly_model","skew","skew_model","dvol","iv_rv","actual_skew_model","actual_risk_reversal_model","actual_butterfly_model","iv_bid_ask","gex_index","gamma_bands","vix"],"description":"Determines field semantics: market versus model IV, normalized skew versus volatility-point RR/butterfly, volatility indices, or price bands."},"days":{"description":"Selected target tenor in days for actual-volatility series, not a lookback or pagination window.","type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"availability":{"type":"object","properties":{"empty_reason":{"nullable":true,"type":"string","enum":["classification_unavailable"]},"coverage":{"type":"object","properties":{"source_id":{"type":"string","enum":["options.volatility_observations"]},"exchange_supported":{"type":"boolean","enum":[true]},"instrument_eligible":{"type":"string","nullable":true,"enum":[null]},"earliest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"latest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["source_id","exchange_supported","instrument_eligible","earliest_observed_at","latest_observed_at"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","enum":["unavailable"]},"certification":{"type":"string","nullable":true,"enum":[null]},"complete_from":{"type":"string","nullable":true,"enum":[null]},"complete_through":{"type":"string","nullable":true,"enum":[null]},"complete_from_inclusive":{"type":"boolean","enum":[true]},"complete_through_inclusive":{"type":"boolean","enum":[false]},"monotonic":{"type":"boolean","enum":[false]},"monotonic_boundary":{"type":"string","enum":["complete_through"]},"revisions_possible":{"type":"boolean","enum":[true]},"certified_at":{"type":"string","nullable":true,"enum":[null]},"updated_at":{"type":"string","nullable":true,"enum":[null]},"unavailable_reason":{"type":"string","enum":["not_supported"]},"scope":{"type":"object","properties":{"endpoint_id":{"type":"string","enum":["options.volatility_observations"]},"source_ids":{"type":"array","items":{"type":"string"}},"exchange":{"nullable":true,"type":"string"},"instrument_name":{"nullable":true,"type":"string"},"currency":{"nullable":true,"type":"string"}},"required":["endpoint_id","source_ids","exchange","instrument_name","currency"],"additionalProperties":false}},"required":["status","certification","complete_from","complete_through","complete_from_inclusive","complete_through_inclusive","monotonic","monotonic_boundary","revisions_possible","certified_at","updated_at","unavailable_reason","scope"],"additionalProperties":false}},"required":["empty_reason","coverage","completeness"],"additionalProperties":false},"pagination_basis":{"type":"string","enum":["joined_observation_timestamps"]}},"required":["total","items","page","total_pages","limit","availability"],"additionalProperties":false},"items":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}},{"type":"array","items":{"type":"object","properties":{"1":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"1-day constant-maturity IV quotes, not an expiry date or lookback window."},"7":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"7-day constant-maturity IV quotes, not an expiry date or lookback window."},"14":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"14-day constant-maturity IV quotes, not an expiry date or lookback window."},"30":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"30-day constant-maturity IV quotes, not an expiry date or lookback window."},"60":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"60-day constant-maturity IV quotes, not an expiry date or lookback window."},"90":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"90-day constant-maturity IV quotes, not an expiry date or lookback window."},"180":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"180-day constant-maturity IV quotes, not an expiry date or lookback window."},"365":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"365-day constant-maturity IV quotes, not an expiry date or lookback window."},"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source minute observation time in Unix milliseconds, UTC; not publication receipt time."}},"required":["1","7","14","30","60","90","180","365","date"],"additionalProperties":false},"description":"Minute timestamp in Unix milliseconds and all eight tenor keys, each containing independently calculated b, a, m IV rounded to two decimals. Mark is not the midpoint and can lie outside bid/ask."}]}},"required":["dataset_id","series","meta","items"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"Retained market/model volatility observations","tags":["Options Volatility History"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"series":{"type":"string","enum":["atm_iv","atm_iv_model","risk_reversal","risk_reversal_model","butterfly","butterfly_model","skew","skew_model","dvol","iv_rv","actual_skew_model","actual_risk_reversal_model","actual_butterfly_model","iv_bid_ask","gex_index","gamma_bands","vix"]},"exchange":{"type":"string","enum":["deribit","binance","bybit","okx","coincall"]},"currency":{"type":"string","maxLength":32,"pattern":"^[A-Z0-9]+(?:_[A-Z0-9]+)?$","description":"Uppercase legacy currency. Point series and gamma bands select the base currency. Bid/ask IV, GEX and VIX preserve settlement prefixes: BTC and BTC_USDC are distinct."},"type":{"description":"Required for typed series. Bid/ask IV: P_ATM, P_25, P_10, P_5, C_ATM, C_25, C_10, C_5. Gamma bands: 1D, 7D, 30D. Other series use model or delta-bucket selectors; omit for market ATM, DVOL, IV/RV, GEX and VIX.","type":"string","maxLength":8},"days":{"description":"Required only for actual-volatility series: one selected tenor in days.","anyOf":[{"type":"number","enum":[7]},{"type":"number","enum":[30]},{"type":"number","enum":[60]},{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[365]}]},"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive after truncation to seconds."},"resolution":{"description":"UTC grid samples, not aggregates. Default native, except IV/RV defaults to 1h and gamma bands to 5m. IV/RV permits hourly/day grids only. Daily gamma bands allow at most 31 inclusive UTC calendar dates, regardless of page size.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]},"page":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991},"limit":{"default":10,"type":"integer","minimum":1,"maximum":1440}},"required":["series","exchange","currency","start","end"]}}}}}},"/api/v1/historical/options/gex_index/{market}/{currency}":{"get":{"description":"Retained chain calculations, not modern exposure surfaces. Returns gex, vex, gex_plus and index_price at exact source timestamps, oldest first. Full Deribit settlement prefix is retained. UTC grids sample, not average, observations.","operationId":"LegacyVolatilityHistoryController_gex_index","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible GEX and VEX observations","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/type/gamma_bands/{market}/{currency}/{type}":{"get":{"description":"Newest first, unlike the other volatility histories. Default 5m UTC samples; explicit native is unsampled. Uses the preceding six-hour spot anchor. Missing inputs and invalid band geometry are unpublished, not zero. Daily requests span at most 31 inclusive UTC calendar dates, independent of page size; larger ranges return 400 GAMMA_DAILY_RANGE_TOO_LARGE before reading the source.","operationId":"LegacyVolatilityHistoryController_gamma_bands","parameters":[{"name":"type","required":true,"in":"path","schema":{"enum":["1D","7D","30D"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}},"400":{"description":"Invalid selectors or GAMMA_DAILY_RANGE_TOO_LARGE (31 inclusive UTC dates for daily requests)."}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible gamma band history","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/vix/{market}/{currency}":{"get":{"description":"Returns 15, 30, 90 and 180-day values plus index, oldest first. Not DVOL: source-chain expiry selection, arithmetic and unavailable nulls preserve the legacy contract. No 60-day value is published.","operationId":"LegacyVolatilityHistoryController_vix","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible chain-derived VIX estimates","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/type/iv_bid_ask/{market}/{currency}/{type}":{"get":{"description":"Pinned to HIST-2026-09-22-V1-IV-BID-ASK-TENORS. Eight target-day keys each hold {b,a,m}; source minutes are sampled on the requested UTC grid, not averaged. Bid/ask/mark use independent total-variance interpolation, whole-day maturity buckets and nearest signed delta within 0.1. Exact-tenor and single-neighbour fallback preserved. Legacy currency prefix case and pagination defaults retained. No source rewrite or original-publication certification.","operationId":"LegacyVolatilityHistoryController_iv_bid_ask","parameters":[{"name":"type","required":true,"in":"path","schema":{"enum":["P_ATM","P_25","P_10","P_5","C_ATM","C_25","C_10","C_5"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"1":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"1-day constant-maturity IV quotes, not an expiry date or lookback window."},"7":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"7-day constant-maturity IV quotes, not an expiry date or lookback window."},"14":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"14-day constant-maturity IV quotes, not an expiry date or lookback window."},"30":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"30-day constant-maturity IV quotes, not an expiry date or lookback window."},"60":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"60-day constant-maturity IV quotes, not an expiry date or lookback window."},"90":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"90-day constant-maturity IV quotes, not an expiry date or lookback window."},"180":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"180-day constant-maturity IV quotes, not an expiry date or lookback window."},"365":{"type":"object","properties":{"b":{"type":"number","minimum":0,"maximum":10000,"description":"Bid implied volatility, percentage points (50 = 50%), rounded to two decimals. Not bid premium."},"a":{"type":"number","minimum":0,"maximum":10000,"description":"Ask implied volatility, percentage points, rounded to two decimals. Not ask premium."},"m":{"type":"number","minimum":0,"maximum":10000,"description":"Independently calculated mark implied volatility, percentage points. Not the bid/ask midpoint and may lie outside that interval."}},"required":["b","a","m"],"additionalProperties":false,"description":"365-day constant-maturity IV quotes, not an expiry date or lookback window."},"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source minute observation time in Unix milliseconds, UTC; not publication receipt time."}},"required":["1","7","14","30","60","90","180","365","date"],"additionalProperties":false},"description":"Minute timestamp in Unix milliseconds and all eight tenor keys, each containing independently calculated b, a, m IV rounded to two decimals. Mark is not the midpoint and can lie outside bid/ask."}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible corrected bid/ask/mark IV by tenor","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/actual_vol/skew_model/{market}/{currency}/{type}/{days}":{"get":{"description":"Filter the joined operand population before paging. d = round((p-c)/atm*100,2) from four-decimal served operands; no original-publication certification.","operationId":"LegacyVolatilityHistoryController_actual_skew_model","parameters":[{"name":"days","required":true,"in":"path","schema":{"enum":[7,30,60,90,180,365],"type":"number"}},{"name":"type","required":true,"in":"path","schema":{"enum":["10D","15D","25D","35D"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible actual skew operands","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/actual_vol/risk_reversal_model/{market}/{currency}/{type}/{days}":{"get":{"description":"Legacy compatibility: four inputs are paged separately then joined by timestamp. meta.total/total_pages describe the model input, not the joined result. Short or empty intermediate pages can occur. Native/MCP use joined-row pagination instead.","operationId":"LegacyVolatilityHistoryController_actual_risk_reversal_model","parameters":[{"name":"days","required":true,"in":"path","schema":{"enum":[7,30,60,90,180,365],"type":"number"}},{"name":"type","required":true,"in":"path","schema":{"enum":["10D","15D","25D","35D"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible actual risk-reversal operands","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/actual_vol/butterfly_model/{market}/{currency}/{type}/{days}":{"get":{"description":"Legacy compatibility: four inputs are paged separately then joined by timestamp. meta.total/total_pages describe the model input, not the joined result. Short or empty intermediate pages can occur. Native/MCP use joined-row pagination instead.","operationId":"LegacyVolatilityHistoryController_actual_butterfly_model","parameters":[{"name":"days","required":true,"in":"path","schema":{"enum":[7,30,60,90,180,365],"type":"number"}},{"name":"type","required":true,"in":"path","schema":{"enum":["10D","15D","25D","35D"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible actual butterfly operands","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/atm_iv/{market}/{currency}":{"get":{"operationId":"LegacyVolatilityHistoryController_atm_iv","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible atm_iv history","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/type/atm_iv_model/{market}/{currency}/{type}":{"get":{"operationId":"LegacyVolatilityHistoryController_atm_iv_model","parameters":[{"name":"type","required":true,"in":"path","schema":{"enum":["ATM","YIELD","SLOPE","10P","10C","15P","15C","25P","25C","35P","35C"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible atm_iv_model history","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/type/risk_reversal/{market}/{currency}/{type}":{"get":{"operationId":"LegacyVolatilityHistoryController_risk_reversal","parameters":[{"name":"type","required":true,"in":"path","schema":{"enum":["10D","25D"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible risk_reversal history","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/type/risk_reversal_model/{market}/{currency}/{type}":{"get":{"operationId":"LegacyVolatilityHistoryController_risk_reversal_model","parameters":[{"name":"type","required":true,"in":"path","schema":{"enum":["10D","15D","25D","35D"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible risk_reversal_model history","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/type/butterfly/{market}/{currency}/{type}":{"get":{"operationId":"LegacyVolatilityHistoryController_butterfly","parameters":[{"name":"type","required":true,"in":"path","schema":{"enum":["10D","25D"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible butterfly history","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/type/butterfly_model/{market}/{currency}/{type}":{"get":{"operationId":"LegacyVolatilityHistoryController_butterfly_model","parameters":[{"name":"type","required":true,"in":"path","schema":{"enum":["10D","15D","25D","35D"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible butterfly_model history","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/type/skew/{market}/{currency}/{type}":{"get":{"operationId":"LegacyVolatilityHistoryController_skew","parameters":[{"name":"type","required":true,"in":"path","schema":{"enum":["10D","25D"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible skew history","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/type/skew_model/{market}/{currency}/{type}":{"get":{"operationId":"LegacyVolatilityHistoryController_skew_model","parameters":[{"name":"type","required":true,"in":"path","schema":{"enum":["10D","15D","25D","35D"],"type":"string"}},{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible skew_model history","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/dvol/{market}/{currency}":{"get":{"operationId":"LegacyVolatilityHistoryController_dvol","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible dvol history","tags":["Legacy Options Volatility History"]}},"/api/v1/historical/options/iv_rv/{market}/{currency}":{"get":{"description":"Default grid 1h, only hourly/day grids accepted. Realized volatility is the legacy spot series, not venue-specific option RV.","operationId":"LegacyVolatilityHistoryController_iv_rv","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","BINANCE","BYBIT","OKX","COINCALL"],"type":"string"}},{"name":"currency","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"items":{"type":"integer","minimum":0,"maximum":9007199254740991},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC. Most series are oldest first; gamma_bands is newest first. Resolution selects a time grid, not an average."},"atm":{"description":"ATM implied volatility operand, percentage points, published to four decimals. Not a price.","nullable":true,"type":"number"},"c":{"description":"Call implied volatility operand at the selected delta, percentage points, published to four decimals. Not call quantity.","nullable":true,"type":"number"},"p":{"description":"Put implied volatility operand at the selected delta, percentage points, published to four decimals. Not put quantity.","nullable":true,"type":"number"},"d":{"description":"Selected derived metric. actual_skew_model: round((p - c) / atm * 100, 2) from served operands in binary floating point, a percentage ratio. actual_risk_reversal_model / actual_butterfly_model: retained model result in volatility points, NOT that normalized ratio.","nullable":true,"type":"number"},"dvol":{"description":"Retained Deribit volatility-index level, in volatility percentage points. Not the ATM-IV series or the legacy VIX estimator.","nullable":true,"type":"number"},"index":{"description":"Reference asset/index price in quote-price units, not a volatility value.","nullable":true,"type":"number"},"index_price":{"description":"Retained average spot-index reference price in quote-price units, not a GEX value.","nullable":true,"type":"number"},"gex":{"description":"Legacy signed sum of gamma * underlying_price * open_interest; puts negative, calls positive. No extra 1%-move or squared-price scaling; not interchangeable with modern GEX.","nullable":true,"type":"number"},"vex":{"description":"Legacy signed vanna-style exposure term, including its 0.01 and /1000 scales. Not ordinary option vega or USD open interest; see the field guide formula.","nullable":true,"type":"number"},"gex_plus":{"description":"Arithmetic sum gex + vex under this legacy convention, not an independently calibrated exposure.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":{"nullable":true,"description":"Series-dependent field: numeric keys are target tenor days, not prices or row numbers. IV/RV keys encode tenor/lookback days. See the series-specific field guide; YIELD and SLOPE are not IV levels.","type":"number"},"description":"date is Unix milliseconds; surface keys are tenor days; IV/RV has iv_7..iv_365 and rv_7..rv_365; DVOL has dvol and index. Actual volatility has atm,c,p,d; absent tenor fields in actual RR/butterfly are omitted, not zero/null. GEX has gex,vex,gex_plus,index_price. Gamma bands have vwap,price,u1_4,u1_2,u1,u2,l1_4,l1_2,l1,l2, newest first. VIX has 15,30,90,180,index (no 60-day value), oldest first. Null withdrawals are explicit."}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible iv_rv history","tags":["Legacy Options Volatility History"]}},"/api/v1/options/instrument-history":{"get":{"description":"Retained v1 instrument observations served natively on v2, including price, IV, Greeks, references, OI and volume. projection selects fields; resolution samples the source grid rather than creating OHLC. Legacy timestamps and values remain unchanged. This is the migration equivalent of v1 option history, not a renamed modern ticker table.\n\nRetained legacy observation label. No universal one-minute shift to modern bucket timestamps is applied.\n\nSource observation grid, sampled at the selected resolution; not reconstructed intraminute highs/lows.\n\nExplicit UTC start/end, page and limit. Compatibility aliases retain legacy date-only and pagination conventions; use the route mapping for equivalent requests.\n\nPremium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.\n\nImplied volatility in percentage points: 65 means 65%, not 0.65.\n\nRetained source quantity units; the API does not apply an additional contract multiplier. Not USD notional or a universal one-contract-one-coin convention.\n\nVenue-reported retained volume state; not an interval sum. See the retained-history field guide.\n\nMatching retained instrument observations, not today's catalog and not a certified original publication vintage.\n\nThis retained-history reader can reach different/older dates than modern ticker coverage. Use /api/v1/options/instrument-history/discovery: mode=instruments searches a UTC day and mode=coverage reports whole-contract observation bounds. Page bounds and first/last dates do not certify continuous history. Its changelog/data-coverage ID remains unavailable.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: options.instrument_history. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.","operationId":"InstrumentHistoryController_read","parameters":[{"name":"exchange","required":true,"in":"query","schema":{"type":"string","enum":["deribit","okx","binance","bybit","paradex"]}},{"name":"instrument_name","required":true,"in":"query","schema":{"type":"string","minLength":1,"maxLength":256}},{"name":"start","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO-8601 instant with Z or an explicit UTC offset."}},{"name":"end","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive, after truncation to seconds; not a whole-day shortcut."}},{"name":"resolution","required":false,"in":"query","schema":{"default":"native","description":"UTC observation grid, not candle aggregation.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}},{"name":"projection","required":false,"in":"query","schema":{"default":"full","type":"string","enum":["full","iv","price","underlying_price","oi_volume"]}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"default":10,"type":"integer","minimum":1,"maximum":1440}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["options.instrument_observations"]},"projection":{"type":"string","enum":["full","iv","price","underlying_price","oi_volume"]},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"availability":{"type":"object","properties":{"empty_reason":{"nullable":true,"type":"string","enum":["classification_unavailable"]},"coverage":{"type":"object","properties":{"source_id":{"type":"string","enum":["options.instrument_observations"]},"exchange_supported":{"type":"boolean","enum":[true]},"instrument_eligible":{"nullable":true,"type":"boolean"},"earliest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"latest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["source_id","exchange_supported","instrument_eligible","earliest_observed_at","latest_observed_at"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","enum":["unavailable"]},"certification":{"type":"string","nullable":true,"enum":[null]},"complete_from":{"type":"string","nullable":true,"enum":[null]},"complete_through":{"type":"string","nullable":true,"enum":[null]},"complete_from_inclusive":{"type":"boolean","enum":[true]},"complete_through_inclusive":{"type":"boolean","enum":[false]},"monotonic":{"type":"boolean","enum":[false]},"monotonic_boundary":{"type":"string","enum":["complete_through"]},"revisions_possible":{"type":"boolean","enum":[true]},"certified_at":{"type":"string","nullable":true,"enum":[null]},"updated_at":{"type":"string","nullable":true,"enum":[null]},"unavailable_reason":{"type":"string","enum":["not_supported"]},"scope":{"type":"object","properties":{"endpoint_id":{"type":"string","enum":["options.instrument_observations"]},"source_ids":{"type":"array","items":{"type":"string"}},"exchange":{"nullable":true,"type":"string"},"instrument_name":{"nullable":true,"type":"string"}},"required":["endpoint_id","source_ids","exchange","instrument_name"],"additionalProperties":false}},"required":["status","certification","complete_from","complete_through","complete_from_inclusive","complete_through_inclusive","monotonic","monotonic_boundary","revisions_possible","certified_at","updated_at","unavailable_reason","scope"],"additionalProperties":false}},"required":["empty_reason","coverage","completeness"],"additionalProperties":false}},"required":["total","items","page","total_pages","limit","availability"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC; not the request time or a finality certificate. Resolution normally samples observations, not interval totals."},"index_price":{"description":"Retained spot-index reference price, in the underlying index quote currency. Distinct from the expiry-specific underlying_price; no substitution is made by this reader.","nullable":true,"type":"number"},"underlying_price":{"description":"Retained option-pricing reference (potentially an expiry-specific forward), in its reference quote currency. Not necessarily the spot index.","nullable":true,"type":"number"},"mark_price":{"description":"Option mark premium per source quantity unit, in the instrument premium currency. Inverse BTC/ETH and linear stablecoin options do not share one premium currency; no USD conversion is applied.","nullable":true,"type":"number"},"bid_price":{"description":"Best bid premium per source quantity unit, in the same premium currency as mark_price; not bid implied volatility.","nullable":true,"type":"number"},"ask_price":{"description":"Best ask premium per source quantity unit, in the same premium currency as mark_price; not ask implied volatility.","nullable":true,"type":"number"},"mark_iv":{"description":"Mark implied volatility in percentage points (50 means 50%, not 0.50). Retained source observation; no new model fit or rescaling is applied.","nullable":true,"type":"number"},"bid_iv":{"description":"Implied volatility associated with the bid quote, in percentage points. Not a premium or bid size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"ask_iv":{"description":"Implied volatility associated with the ask quote, in percentage points. Not a premium or ask size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"open_interest":{"description":"Outstanding option quantity in retained source units. Not USD notional or premium value; this reader does not apply another contract multiplier.","nullable":true,"type":"number"},"volume":{"description":"Retained venue-reported option volume in source quantity units and source reporting window. Not the volume traded inside the requested resolution.","nullable":true,"type":"number"},"delta":{"description":"Retained option delta under the venue source convention. No cross-venue delta or premium-adjustment normalization is applied.","nullable":true,"type":"number"},"gamma":{"description":"Retained option gamma under the venue source convention; not aggregate gamma exposure (GEX).","nullable":true,"type":"number"},"theta":{"description":"Retained option theta under the venue source time and premium-currency convention; no daily/annual conversion is applied.","nullable":true,"type":"number"},"vega":{"description":"Retained option vega under the venue source volatility and premium-currency convention; not aggregate vega exposure.","nullable":true,"type":"number"},"daystogo":{"description":"Remaining time to maturity, in days, as retained. This is a duration, not an expiry timestamp or fixed-tenor selector.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":false}}},"required":["dataset_id","projection","meta","items"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"Instrument observations from retained history","tags":["Options Instrument History"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"type":"string","enum":["deribit","okx","binance","bybit","paradex"]},"instrument_name":{"type":"string","minLength":1,"maxLength":256},"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO-8601 instant with Z or an explicit UTC offset."},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive, after truncation to seconds; not a whole-day shortcut."},"resolution":{"default":"native","description":"UTC observation grid, not candle aggregation.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]},"projection":{"default":"full","type":"string","enum":["full","iv","price","underlying_price","oi_volume"]},"page":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991},"limit":{"default":10,"type":"integer","minimum":1,"maximum":1440}},"required":["exchange","instrument_name","start","end"]}}}}}},"/api/v1/historical/options/iv/{market}/{instrument}":{"get":{"operationId":"LegacyInstrumentHistoryController_iv","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","OKX","BINANCE","BYBIT","PARADEX"],"type":"string"}},{"name":"instrument","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC; not the request time or a finality certificate. Resolution normally samples observations, not interval totals."},"index_price":{"description":"Retained spot-index reference price, in the underlying index quote currency. Distinct from the expiry-specific underlying_price; no substitution is made by this reader.","nullable":true,"type":"number"},"underlying_price":{"description":"Retained option-pricing reference (potentially an expiry-specific forward), in its reference quote currency. Not necessarily the spot index.","nullable":true,"type":"number"},"mark_price":{"description":"Option mark premium per source quantity unit, in the instrument premium currency. Inverse BTC/ETH and linear stablecoin options do not share one premium currency; no USD conversion is applied.","nullable":true,"type":"number"},"bid_price":{"description":"Best bid premium per source quantity unit, in the same premium currency as mark_price; not bid implied volatility.","nullable":true,"type":"number"},"ask_price":{"description":"Best ask premium per source quantity unit, in the same premium currency as mark_price; not ask implied volatility.","nullable":true,"type":"number"},"mark_iv":{"description":"Mark implied volatility in percentage points (50 means 50%, not 0.50). Retained source observation; no new model fit or rescaling is applied.","nullable":true,"type":"number"},"bid_iv":{"description":"Implied volatility associated with the bid quote, in percentage points. Not a premium or bid size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"ask_iv":{"description":"Implied volatility associated with the ask quote, in percentage points. Not a premium or ask size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"open_interest":{"description":"Outstanding option quantity in retained source units. Not USD notional or premium value; this reader does not apply another contract multiplier.","nullable":true,"type":"number"},"volume":{"description":"Retained venue-reported option volume in source quantity units and source reporting window. Not the volume traded inside the requested resolution.","nullable":true,"type":"number"},"delta":{"description":"Retained option delta under the venue source convention. No cross-venue delta or premium-adjustment normalization is applied.","nullable":true,"type":"number"},"gamma":{"description":"Retained option gamma under the venue source convention; not aggregate gamma exposure (GEX).","nullable":true,"type":"number"},"theta":{"description":"Retained option theta under the venue source time and premium-currency convention; no daily/annual conversion is applied.","nullable":true,"type":"number"},"vega":{"description":"Retained option vega under the venue source volatility and premium-currency convention; not aggregate vega exposure.","nullable":true,"type":"number"},"daystogo":{"description":"Remaining time to maturity, in days, as retained. This is a duration, not an expiry timestamp or fixed-tenor selector.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"tags":["Legacy Options Instrument History"]}},"/api/v1/historical/options/price/{market}/{instrument}":{"get":{"operationId":"LegacyInstrumentHistoryController_price","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","OKX","BINANCE","BYBIT","PARADEX"],"type":"string"}},{"name":"instrument","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC; not the request time or a finality certificate. Resolution normally samples observations, not interval totals."},"index_price":{"description":"Retained spot-index reference price, in the underlying index quote currency. Distinct from the expiry-specific underlying_price; no substitution is made by this reader.","nullable":true,"type":"number"},"underlying_price":{"description":"Retained option-pricing reference (potentially an expiry-specific forward), in its reference quote currency. Not necessarily the spot index.","nullable":true,"type":"number"},"mark_price":{"description":"Option mark premium per source quantity unit, in the instrument premium currency. Inverse BTC/ETH and linear stablecoin options do not share one premium currency; no USD conversion is applied.","nullable":true,"type":"number"},"bid_price":{"description":"Best bid premium per source quantity unit, in the same premium currency as mark_price; not bid implied volatility.","nullable":true,"type":"number"},"ask_price":{"description":"Best ask premium per source quantity unit, in the same premium currency as mark_price; not ask implied volatility.","nullable":true,"type":"number"},"mark_iv":{"description":"Mark implied volatility in percentage points (50 means 50%, not 0.50). Retained source observation; no new model fit or rescaling is applied.","nullable":true,"type":"number"},"bid_iv":{"description":"Implied volatility associated with the bid quote, in percentage points. Not a premium or bid size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"ask_iv":{"description":"Implied volatility associated with the ask quote, in percentage points. Not a premium or ask size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"open_interest":{"description":"Outstanding option quantity in retained source units. Not USD notional or premium value; this reader does not apply another contract multiplier.","nullable":true,"type":"number"},"volume":{"description":"Retained venue-reported option volume in source quantity units and source reporting window. Not the volume traded inside the requested resolution.","nullable":true,"type":"number"},"delta":{"description":"Retained option delta under the venue source convention. No cross-venue delta or premium-adjustment normalization is applied.","nullable":true,"type":"number"},"gamma":{"description":"Retained option gamma under the venue source convention; not aggregate gamma exposure (GEX).","nullable":true,"type":"number"},"theta":{"description":"Retained option theta under the venue source time and premium-currency convention; no daily/annual conversion is applied.","nullable":true,"type":"number"},"vega":{"description":"Retained option vega under the venue source volatility and premium-currency convention; not aggregate vega exposure.","nullable":true,"type":"number"},"daystogo":{"description":"Remaining time to maturity, in days, as retained. This is a duration, not an expiry timestamp or fixed-tenor selector.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"tags":["Legacy Options Instrument History"]}},"/api/v1/historical/options/underlying_price/{market}/{instrument}":{"get":{"operationId":"LegacyInstrumentHistoryController_underlyingPrice","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","OKX","BINANCE","BYBIT","PARADEX"],"type":"string"}},{"name":"instrument","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC; not the request time or a finality certificate. Resolution normally samples observations, not interval totals."},"index_price":{"description":"Retained spot-index reference price, in the underlying index quote currency. Distinct from the expiry-specific underlying_price; no substitution is made by this reader.","nullable":true,"type":"number"},"underlying_price":{"description":"Retained option-pricing reference (potentially an expiry-specific forward), in its reference quote currency. Not necessarily the spot index.","nullable":true,"type":"number"},"mark_price":{"description":"Option mark premium per source quantity unit, in the instrument premium currency. Inverse BTC/ETH and linear stablecoin options do not share one premium currency; no USD conversion is applied.","nullable":true,"type":"number"},"bid_price":{"description":"Best bid premium per source quantity unit, in the same premium currency as mark_price; not bid implied volatility.","nullable":true,"type":"number"},"ask_price":{"description":"Best ask premium per source quantity unit, in the same premium currency as mark_price; not ask implied volatility.","nullable":true,"type":"number"},"mark_iv":{"description":"Mark implied volatility in percentage points (50 means 50%, not 0.50). Retained source observation; no new model fit or rescaling is applied.","nullable":true,"type":"number"},"bid_iv":{"description":"Implied volatility associated with the bid quote, in percentage points. Not a premium or bid size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"ask_iv":{"description":"Implied volatility associated with the ask quote, in percentage points. Not a premium or ask size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"open_interest":{"description":"Outstanding option quantity in retained source units. Not USD notional or premium value; this reader does not apply another contract multiplier.","nullable":true,"type":"number"},"volume":{"description":"Retained venue-reported option volume in source quantity units and source reporting window. Not the volume traded inside the requested resolution.","nullable":true,"type":"number"},"delta":{"description":"Retained option delta under the venue source convention. No cross-venue delta or premium-adjustment normalization is applied.","nullable":true,"type":"number"},"gamma":{"description":"Retained option gamma under the venue source convention; not aggregate gamma exposure (GEX).","nullable":true,"type":"number"},"theta":{"description":"Retained option theta under the venue source time and premium-currency convention; no daily/annual conversion is applied.","nullable":true,"type":"number"},"vega":{"description":"Retained option vega under the venue source volatility and premium-currency convention; not aggregate vega exposure.","nullable":true,"type":"number"},"daystogo":{"description":"Remaining time to maturity, in days, as retained. This is a duration, not an expiry timestamp or fixed-tenor selector.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"tags":["Legacy Options Instrument History"]}},"/api/v1/historical/options/oi_volume/{market}/{instrument}":{"get":{"operationId":"LegacyInstrumentHistoryController_oiVolume","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","OKX","BINANCE","BYBIT","PARADEX"],"type":"string"}},{"name":"instrument","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC; not the request time or a finality certificate. Resolution normally samples observations, not interval totals."},"index_price":{"description":"Retained spot-index reference price, in the underlying index quote currency. Distinct from the expiry-specific underlying_price; no substitution is made by this reader.","nullable":true,"type":"number"},"underlying_price":{"description":"Retained option-pricing reference (potentially an expiry-specific forward), in its reference quote currency. Not necessarily the spot index.","nullable":true,"type":"number"},"mark_price":{"description":"Option mark premium per source quantity unit, in the instrument premium currency. Inverse BTC/ETH and linear stablecoin options do not share one premium currency; no USD conversion is applied.","nullable":true,"type":"number"},"bid_price":{"description":"Best bid premium per source quantity unit, in the same premium currency as mark_price; not bid implied volatility.","nullable":true,"type":"number"},"ask_price":{"description":"Best ask premium per source quantity unit, in the same premium currency as mark_price; not ask implied volatility.","nullable":true,"type":"number"},"mark_iv":{"description":"Mark implied volatility in percentage points (50 means 50%, not 0.50). Retained source observation; no new model fit or rescaling is applied.","nullable":true,"type":"number"},"bid_iv":{"description":"Implied volatility associated with the bid quote, in percentage points. Not a premium or bid size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"ask_iv":{"description":"Implied volatility associated with the ask quote, in percentage points. Not a premium or ask size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"open_interest":{"description":"Outstanding option quantity in retained source units. Not USD notional or premium value; this reader does not apply another contract multiplier.","nullable":true,"type":"number"},"volume":{"description":"Retained venue-reported option volume in source quantity units and source reporting window. Not the volume traded inside the requested resolution.","nullable":true,"type":"number"},"delta":{"description":"Retained option delta under the venue source convention. No cross-venue delta or premium-adjustment normalization is applied.","nullable":true,"type":"number"},"gamma":{"description":"Retained option gamma under the venue source convention; not aggregate gamma exposure (GEX).","nullable":true,"type":"number"},"theta":{"description":"Retained option theta under the venue source time and premium-currency convention; no daily/annual conversion is applied.","nullable":true,"type":"number"},"vega":{"description":"Retained option vega under the venue source volatility and premium-currency convention; not aggregate vega exposure.","nullable":true,"type":"number"},"daystogo":{"description":"Remaining time to maturity, in days, as retained. This is a duration, not an expiry timestamp or fixed-tenor selector.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"tags":["Legacy Options Instrument History"]}},"/api/v1/historical/options/{market}/{instrument}":{"get":{"operationId":"LegacyInstrumentHistoryController_full","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["DERIBIT","OKX","BINANCE","BYBIT","PARADEX"],"type":"string"}},{"name":"instrument","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC; not the request time or a finality certificate. Resolution normally samples observations, not interval totals."},"index_price":{"description":"Retained spot-index reference price, in the underlying index quote currency. Distinct from the expiry-specific underlying_price; no substitution is made by this reader.","nullable":true,"type":"number"},"underlying_price":{"description":"Retained option-pricing reference (potentially an expiry-specific forward), in its reference quote currency. Not necessarily the spot index.","nullable":true,"type":"number"},"mark_price":{"description":"Option mark premium per source quantity unit, in the instrument premium currency. Inverse BTC/ETH and linear stablecoin options do not share one premium currency; no USD conversion is applied.","nullable":true,"type":"number"},"bid_price":{"description":"Best bid premium per source quantity unit, in the same premium currency as mark_price; not bid implied volatility.","nullable":true,"type":"number"},"ask_price":{"description":"Best ask premium per source quantity unit, in the same premium currency as mark_price; not ask implied volatility.","nullable":true,"type":"number"},"mark_iv":{"description":"Mark implied volatility in percentage points (50 means 50%, not 0.50). Retained source observation; no new model fit or rescaling is applied.","nullable":true,"type":"number"},"bid_iv":{"description":"Implied volatility associated with the bid quote, in percentage points. Not a premium or bid size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"ask_iv":{"description":"Implied volatility associated with the ask quote, in percentage points. Not a premium or ask size; unavailable retained values are not executable quotes.","nullable":true,"type":"number"},"open_interest":{"description":"Outstanding option quantity in retained source units. Not USD notional or premium value; this reader does not apply another contract multiplier.","nullable":true,"type":"number"},"volume":{"description":"Retained venue-reported option volume in source quantity units and source reporting window. Not the volume traded inside the requested resolution.","nullable":true,"type":"number"},"delta":{"description":"Retained option delta under the venue source convention. No cross-venue delta or premium-adjustment normalization is applied.","nullable":true,"type":"number"},"gamma":{"description":"Retained option gamma under the venue source convention; not aggregate gamma exposure (GEX).","nullable":true,"type":"number"},"theta":{"description":"Retained option theta under the venue source time and premium-currency convention; no daily/annual conversion is applied.","nullable":true,"type":"number"},"vega":{"description":"Retained option vega under the venue source volatility and premium-currency convention; not aggregate vega exposure.","nullable":true,"type":"number"},"daystogo":{"description":"Remaining time to maturity, in days, as retained. This is a duration, not an expiry timestamp or fixed-tenor selector.","nullable":true,"type":"number"}},"required":["date"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"tags":["Legacy Options Instrument History"]}},"/api/v1/perpetuals/instrument-history":{"get":{"description":"Retained v1 perpetual instrument observations served natively on v2: price, index, basis, yield, funding, next_funding, long_short_ratio, volume, volume_coin, open_interest, open_interest_coin, oi_volume24h, bid/ask and displayed sizes. Stored rows without deduplication, interval aggregation, gap filling or unit conversion. Not modern ticker states or OHLC bars; this is the migration equivalent of v1 perpetual history.\n\nRetained legacy observation label at whole-second precision, in ascending order. Not a modern interval-start bucket or ingestion/publication time; no one-minute shift to modern timestamps is applied.\n\nStored observation rows. native and 1m select the same rows; 5m to 1d keep only rows whose stored UTC minute/hour falls on the grid point (1h: minute 0; 1d: 00:00). Sampling, not aggregation; same-timestamp rows are preserved.\n\nExplicit timezone-qualified start/end, inclusive after truncation to seconds. instrument_name is the exact case-sensitive legacy symbol; expired symbols are requestable without an active-catalog check. Sixteen legacy perpetual venues are accepted; acceptance is not evidence of retained rows. limit is 1-1440 (default 10) rows; total counts matching rows. Compatibility aliases keep v1 date-only whole-day bounds, the omitted-end default and legacy pagination accounting; use the route mapping for equivalent requests.\n\nRetained contract and reference-index prices in the source quotation convention; not OHLC.\n\nUSD-equivalent outstanding exposure and venue-reported rolling trading volume; volume is not a sum over the requested resolution.\n\nCorresponding base-asset quantities, not USD.\n\nround(open_interest / volume, 4): a dimensionless ratio, not a change in open interest.\n\nDisplayed level-1 quantity in source units; not book depth or a fill guarantee.\n\nRetained basis under the source convention. Whether it is a price difference, fraction or percentage is not specified here; do not combine it with modern basis fields without checking.\n\nAnnualized funding yield. Annualized percentage points (10.95 means 10.95% per year), not a compounded APY; do not re-annualize.\n\nPercentage points per the retained field guide (0.01 means 0.01%), normally 8-hour-equivalent as stored. Modern perpetual funding is a decimal (0.0001 means 0.01%), so the same rate is 100 times larger here. Not a payment amount or settlement timestamp.\n\nVenue-defined long/short ratio; its population is source-specific.\n\nObservations stored for the exact, case-sensitive legacy symbol, including expired contracts. Not today's catalog and not a certified original-publication vintage.\n\nUse /api/v1/perpetuals/instrument-history/discovery with exchange and currency: mode=instruments finds contracts observed on a UTC day; mode=coverage also requires the exact contract name and reports bounds under that currency label. Different currency labels and letter-case variants remain separate. Bounds do not certify continuous history. This history response's own coverage bounds remain null, and no changelog/data-coverage ID is declared for it.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: perpetuals.instrument_history. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.\n\nAvailable to eligible subscribers when enabled; API key or OAuth uses the same account history rights. x402 is not enabled. Field guide: https://apiv2.laevitas.ch/migration/v1-to-v2/history-field-guide.md.","operationId":"DerivativeInstrumentHistoryController_perpetuals","parameters":[{"name":"exchange","required":true,"in":"query","schema":{"type":"string","enum":["binance","bitmex","deribit","okx","dydx","huobi","kraken","bybit","bitget","aevo","blitz","coinbase","bitfinex","hyperliquid","paradex","vertex"]}},{"name":"instrument_name","required":true,"in":"query","schema":{"type":"string","minLength":1,"maxLength":256,"description":"Exact case-sensitive legacy symbol, including expired contracts."}},{"name":"start","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO-8601 instant with Z or an explicit UTC offset."}},{"name":"end","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive, after truncation to seconds; not a whole-day shortcut."}},{"name":"resolution","required":false,"in":"query","schema":{"default":"native","description":"UTC observation grid, not candle aggregation.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}},{"name":"projection","required":false,"in":"query","schema":{"default":"full","type":"string","enum":["full"]}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"default":10,"type":"integer","minimum":1,"maximum":1440}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["perpetuals.instrument_observations","futures.instrument_observations"]},"projection":{"type":"string","enum":["full"]},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"availability":{"type":"object","properties":{"empty_reason":{"nullable":true,"type":"string","enum":["classification_unavailable"]},"coverage":{"type":"object","properties":{"source_id":{"type":"string","enum":["perpetuals.instrument_observations","futures.instrument_observations"]},"exchange_supported":{"type":"boolean","enum":[true]},"instrument_eligible":{"nullable":true,"type":"boolean"},"earliest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"latest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["source_id","exchange_supported","instrument_eligible","earliest_observed_at","latest_observed_at"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","enum":["unavailable"]},"certification":{"type":"string","nullable":true,"enum":[null]},"complete_from":{"type":"string","nullable":true,"enum":[null]},"complete_through":{"type":"string","nullable":true,"enum":[null]},"complete_from_inclusive":{"type":"boolean","enum":[true]},"complete_through_inclusive":{"type":"boolean","enum":[false]},"monotonic":{"type":"boolean","enum":[false]},"monotonic_boundary":{"type":"string","enum":["complete_through"]},"revisions_possible":{"type":"boolean","enum":[true]},"certified_at":{"type":"string","nullable":true,"enum":[null]},"updated_at":{"type":"string","nullable":true,"enum":[null]},"unavailable_reason":{"type":"string","enum":["not_supported"]},"scope":{"type":"object","properties":{"endpoint_id":{"type":"string","enum":["perpetuals.instrument_observations","futures.instrument_observations"]},"source_ids":{"type":"array","items":{"type":"string"}},"exchange":{"nullable":true,"type":"string"},"instrument_name":{"nullable":true,"type":"string"}},"required":["endpoint_id","source_ids","exchange","instrument_name"],"additionalProperties":false}},"required":["status","certification","complete_from","complete_through","complete_from_inclusive","complete_through_inclusive","monotonic","monotonic_boundary","revisions_possible","certified_at","updated_at","unavailable_reason","scope"],"additionalProperties":false}},"required":["empty_reason","coverage","completeness"],"additionalProperties":false}},"required":["total","items","page","total_pages","limit","availability"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC; not the request time or a finality certificate. Resolution normally samples observations, not interval totals."},"price":{"description":"Retained normalized contract price, in the source price reference currency; not an OHLC close.","nullable":true,"type":"number"},"index":{"description":"Retained contract index/reference price. This field is a price, not a row number or instrument identifier.","nullable":true,"type":"number"},"basis":{"description":"Retained futures/perpetual basis under the source convention. Not funding paid; no percentage/fraction conversion is added by this reader.","nullable":true,"type":"number"},"funding":{"description":"Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","nullable":true,"type":"number"},"yield":{"description":"For dated futures: annualized basis in percentage points. For perpetuals: Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","nullable":true,"type":"number"},"volume":{"description":"Venue-reported rolling trading volume in USD-equivalent units. Not the volume summed over the requested resolution.","nullable":true,"type":"number"},"volume_coin":{"description":"Corresponding retained trading volume in base-asset quantity units, not USD.","nullable":true,"type":"number"},"open_interest":{"description":"Outstanding derivative exposure in USD-equivalent units; not a contract count.","nullable":true,"type":"number"},"open_interest_coin":{"description":"Outstanding derivative exposure in base-asset quantity units; not USD.","nullable":true,"type":"number"},"oi_volume24h":{"description":"Dimensionless open_interest / volume ratio rounded to four decimals. Both operands use USD-equivalent units; not a 24-hour change in open interest.","nullable":true,"type":"number"},"long_short_ratio":{"description":"Retained venue long/short ratio. Population and measurement convention are source-specific; not a liquidation-side total.","nullable":true,"type":"number"},"next_funding":{"description":"Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","nullable":true,"type":"number"},"bid":{"description":"Retained best bid price in the contract quotation convention; not bid size.","nullable":true,"type":"number"},"bid_amount":{"description":"Retained displayed quantity at the best bid, in source quantity units. Not depth beyond level 1 or a fill guarantee.","nullable":true,"type":"number"},"ask":{"description":"Retained best ask price in the contract quotation convention; not ask size.","nullable":true,"type":"number"},"ask_amount":{"description":"Retained displayed quantity at the best ask, in source quantity units. Not depth beyond level 1 or a fill guarantee.","nullable":true,"type":"number"},"expiry":{"description":"Contract expiry date in legacy DD/MM/YY format. Date only: it does not encode the exchange-native expiry hour.","nullable":true,"type":"string"}},"required":["date"],"additionalProperties":false}}},"required":["dataset_id","projection","meta","items"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"Retained perpetual instrument observations","tags":["Derivative Instrument History"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"type":"string","enum":["binance","bitmex","deribit","okx","dydx","huobi","kraken","bybit","bitget","aevo","blitz","coinbase","bitfinex","hyperliquid","paradex","vertex"]},"instrument_name":{"type":"string","minLength":1,"maxLength":256,"description":"Exact case-sensitive legacy symbol, including expired contracts."},"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO-8601 instant with Z or an explicit UTC offset."},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive, after truncation to seconds; not a whole-day shortcut."},"resolution":{"default":"native","description":"UTC observation grid, not candle aggregation.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]},"projection":{"default":"full","type":"string","enum":["full"]},"page":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991},"limit":{"default":10,"type":"integer","minimum":1,"maximum":1440}},"required":["exchange","instrument_name","start","end"]}}}}}},"/api/v1/futures/instrument-history":{"get":{"description":"Retained v1 dated-future instrument observations served natively on v2: expiry, price, index, basis, yield, volume, volume_coin, open_interest, open_interest_coin, oi_volume24h, bid/ask and displayed sizes. Stored rows without deduplication, interval aggregation, gap filling or unit conversion. Not modern ticker states or OHLC bars; this is the migration equivalent of v1 dated-future history.\n\nRetained legacy observation label at whole-second precision, in ascending order. Not a modern interval-start bucket or ingestion/publication time; no one-minute shift to modern timestamps is applied.\n\nStored observation rows. native and 1m select the same rows; 5m to 1d keep only rows whose stored UTC minute/hour falls on the grid point (1h: minute 0; 1d: 00:00). Sampling, not aggregation; same-timestamp rows are preserved.\n\nExplicit timezone-qualified start/end, inclusive after truncation to seconds. instrument_name is the exact case-sensitive legacy symbol; expired symbols are requestable without an active-catalog check. Eight legacy futures venues (kraken, deribit, okx, bybit, binance, bitget, bitmex, huobi) are accepted; acceptance is not evidence of retained rows. limit is 1-1440 (default 10) rows; total counts matching rows. Compatibility aliases keep v1 date-only whole-day bounds, the omitted-end default and legacy pagination accounting; use the route mapping for equivalent requests.\n\nRetained contract and reference-index prices in the source quotation convention; not OHLC.\n\nUSD-equivalent outstanding exposure and venue-reported rolling trading volume; volume is not a sum over the requested resolution.\n\nCorresponding base-asset quantities, not USD.\n\nround(open_interest / volume, 4): a dimensionless ratio, not a change in open interest.\n\nDisplayed level-1 quantity in source units; not book depth or a fill guarantee.\n\nRetained basis under the source convention. Whether it is a price difference, fraction or percentage is not specified here; do not combine it with modern basis fields without checking.\n\nAnnualized basis (carry), not perpetual funding. Annualized percentage points (10.95 means 10.95% per year), not a compounded APY; do not re-annualize.\n\nLegacy DD/MM/YY date only; it does not encode the exchange-native expiry hour.\n\nObservations stored for the exact, case-sensitive legacy symbol, including expired contracts. Not today's catalog and not a certified original-publication vintage.\n\nUse /api/v1/futures/instrument-history/discovery with exchange and currency: mode=instruments finds contracts observed on a UTC day; mode=coverage also requires the exact contract name and reports bounds under that currency label. Different currency labels and letter-case variants remain separate. Bounds do not certify continuous history. This history response's own coverage bounds remain null, and no changelog/data-coverage ID is declared for it.\n\nCurrent retained/corrected history, not certified as-originally-published data. An observation or calculation timestamp is not proof of first public availability. Availability by the next minute boundary is not certified; no measured or guaranteed publication-lag bound is supplied here.\n\nDefinition: futures.instrument_history. Coverage and comparison guide: /migration/v1-to-v2/data-products.md.\n\nReviewed history dates, cadence and known gaps: /migration/v1-to-v2/data-inventory.md. Inventory entries are dated and product-specific, not live completeness guarantees.\n\nAvailable to eligible subscribers when enabled; API key or OAuth uses the same account history rights. x402 is not enabled. Field guide: https://apiv2.laevitas.ch/migration/v1-to-v2/history-field-guide.md.","operationId":"DerivativeInstrumentHistoryController_futures","parameters":[{"name":"exchange","required":true,"in":"query","schema":{"type":"string","enum":["kraken","deribit","okx","bybit","binance","bitget","bitmex","huobi"]}},{"name":"instrument_name","required":true,"in":"query","schema":{"type":"string","minLength":1,"maxLength":256,"description":"Exact case-sensitive legacy symbol, including expired contracts."}},{"name":"start","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO-8601 instant with Z or an explicit UTC offset."}},{"name":"end","required":true,"in":"query","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive, after truncation to seconds; not a whole-day shortcut."}},{"name":"resolution","required":false,"in":"query","schema":{"default":"native","description":"UTC observation grid, not candle aggregation.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]}},{"name":"projection","required":false,"in":"query","schema":{"default":"full","type":"string","enum":["full"]}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991}},{"name":"limit","required":false,"in":"query","schema":{"default":10,"type":"integer","minimum":1,"maximum":1440}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"dataset_id":{"type":"string","enum":["perpetuals.instrument_observations","futures.instrument_observations"]},"projection":{"type":"string","enum":["full"]},"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."},"limit":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"availability":{"type":"object","properties":{"empty_reason":{"nullable":true,"type":"string","enum":["classification_unavailable"]},"coverage":{"type":"object","properties":{"source_id":{"type":"string","enum":["perpetuals.instrument_observations","futures.instrument_observations"]},"exchange_supported":{"type":"boolean","enum":[true]},"instrument_eligible":{"nullable":true,"type":"boolean"},"earliest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"latest_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["source_id","exchange_supported","instrument_eligible","earliest_observed_at","latest_observed_at"],"additionalProperties":false},"completeness":{"type":"object","properties":{"status":{"type":"string","enum":["unavailable"]},"certification":{"type":"string","nullable":true,"enum":[null]},"complete_from":{"type":"string","nullable":true,"enum":[null]},"complete_through":{"type":"string","nullable":true,"enum":[null]},"complete_from_inclusive":{"type":"boolean","enum":[true]},"complete_through_inclusive":{"type":"boolean","enum":[false]},"monotonic":{"type":"boolean","enum":[false]},"monotonic_boundary":{"type":"string","enum":["complete_through"]},"revisions_possible":{"type":"boolean","enum":[true]},"certified_at":{"type":"string","nullable":true,"enum":[null]},"updated_at":{"type":"string","nullable":true,"enum":[null]},"unavailable_reason":{"type":"string","enum":["not_supported"]},"scope":{"type":"object","properties":{"endpoint_id":{"type":"string","enum":["perpetuals.instrument_observations","futures.instrument_observations"]},"source_ids":{"type":"array","items":{"type":"string"}},"exchange":{"nullable":true,"type":"string"},"instrument_name":{"nullable":true,"type":"string"}},"required":["endpoint_id","source_ids","exchange","instrument_name"],"additionalProperties":false}},"required":["status","certification","complete_from","complete_through","complete_from_inclusive","complete_through_inclusive","monotonic","monotonic_boundary","revisions_possible","certified_at","updated_at","unavailable_reason","scope"],"additionalProperties":false}},"required":["empty_reason","coverage","completeness"],"additionalProperties":false}},"required":["total","items","page","total_pages","limit","availability"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC; not the request time or a finality certificate. Resolution normally samples observations, not interval totals."},"price":{"description":"Retained normalized contract price, in the source price reference currency; not an OHLC close.","nullable":true,"type":"number"},"index":{"description":"Retained contract index/reference price. This field is a price, not a row number or instrument identifier.","nullable":true,"type":"number"},"basis":{"description":"Retained futures/perpetual basis under the source convention. Not funding paid; no percentage/fraction conversion is added by this reader.","nullable":true,"type":"number"},"funding":{"description":"Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","nullable":true,"type":"number"},"yield":{"description":"For dated futures: annualized basis in percentage points. For perpetuals: Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","nullable":true,"type":"number"},"volume":{"description":"Venue-reported rolling trading volume in USD-equivalent units. Not the volume summed over the requested resolution.","nullable":true,"type":"number"},"volume_coin":{"description":"Corresponding retained trading volume in base-asset quantity units, not USD.","nullable":true,"type":"number"},"open_interest":{"description":"Outstanding derivative exposure in USD-equivalent units; not a contract count.","nullable":true,"type":"number"},"open_interest_coin":{"description":"Outstanding derivative exposure in base-asset quantity units; not USD.","nullable":true,"type":"number"},"oi_volume24h":{"description":"Dimensionless open_interest / volume ratio rounded to four decimals. Both operands use USD-equivalent units; not a 24-hour change in open interest.","nullable":true,"type":"number"},"long_short_ratio":{"description":"Retained venue long/short ratio. Population and measurement convention are source-specific; not a liquidation-side total.","nullable":true,"type":"number"},"next_funding":{"description":"Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","nullable":true,"type":"number"},"bid":{"description":"Retained best bid price in the contract quotation convention; not bid size.","nullable":true,"type":"number"},"bid_amount":{"description":"Retained displayed quantity at the best bid, in source quantity units. Not depth beyond level 1 or a fill guarantee.","nullable":true,"type":"number"},"ask":{"description":"Retained best ask price in the contract quotation convention; not ask size.","nullable":true,"type":"number"},"ask_amount":{"description":"Retained displayed quantity at the best ask, in source quantity units. Not depth beyond level 1 or a fill guarantee.","nullable":true,"type":"number"},"expiry":{"description":"Contract expiry date in legacy DD/MM/YY format. Date only: it does not encode the exchange-native expiry hour.","nullable":true,"type":"string"}},"required":["date"],"additionalProperties":false}}},"required":["dataset_id","projection","meta","items"],"additionalProperties":false}}}},"402":{"description":"Payment Required","headers":{"payment-required":{"description":"Base64-encoded JSON with payment requirements (accepted networks, amounts, payTo address)","schema":{"type":"string"}}}}},"security":[{"X-API-Key":[]}],"summary":"Retained dated-future instrument observations","tags":["Derivative Instrument History"],"x-agentcash-auth":{"mode":"paid"},"x-payment-info":{"protocols":["x402"],"pricingMode":"fixed","price":"0.001"},"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"exchange":{"type":"string","enum":["kraken","deribit","okx","bybit","binance","bitget","bitmex","huobi"]},"instrument_name":{"type":"string","minLength":1,"maxLength":256,"description":"Exact case-sensitive legacy symbol, including expired contracts."},"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"ISO-8601 instant with Z or an explicit UTC offset."},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Inclusive, after truncation to seconds; not a whole-day shortcut."},"resolution":{"default":"native","description":"UTC observation grid, not candle aggregation.","type":"string","enum":["native","1m","5m","15m","30m","1h","2h","4h","6h","12h","1d"]},"projection":{"default":"full","type":"string","enum":["full"]},"page":{"default":1,"type":"integer","minimum":1,"maximum":9007199254740991},"limit":{"default":10,"type":"integer","minimum":1,"maximum":1440}},"required":["exchange","instrument_name","start","end"]}}}}}},"/api/v1/historical/derivs/perpetuals/{market}/{symbol}":{"get":{"operationId":"LegacyDerivativeInstrumentHistoryController_perpetuals","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["BINANCE","BITMEX","DERIBIT","OKX","DYDX","HUOBI","KRAKEN","BYBIT","BITGET","AEVO","BLITZ","COINBASE","BITFINEX","HYPERLIQUID","PARADEX","VERTEX"],"type":"string"}},{"name":"symbol","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC; not the request time or a finality certificate. Resolution normally samples observations, not interval totals."},"price":{"description":"Retained normalized contract price, in the source price reference currency; not an OHLC close.","nullable":true,"type":"number"},"index":{"description":"Retained contract index/reference price. This field is a price, not a row number or instrument identifier.","nullable":true,"type":"number"},"basis":{"description":"Retained futures/perpetual basis under the source convention. Not funding paid; no percentage/fraction conversion is added by this reader.","nullable":true,"type":"number"},"funding":{"description":"Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","nullable":true,"type":"number"},"yield":{"description":"For dated futures: annualized basis in percentage points. For perpetuals: Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","nullable":true,"type":"number"},"volume":{"description":"Venue-reported rolling trading volume in USD-equivalent units. Not the volume summed over the requested resolution.","nullable":true,"type":"number"},"volume_coin":{"description":"Corresponding retained trading volume in base-asset quantity units, not USD.","nullable":true,"type":"number"},"open_interest":{"description":"Outstanding derivative exposure in USD-equivalent units; not a contract count.","nullable":true,"type":"number"},"open_interest_coin":{"description":"Outstanding derivative exposure in base-asset quantity units; not USD.","nullable":true,"type":"number"},"oi_volume24h":{"description":"Dimensionless open_interest / volume ratio rounded to four decimals. Both operands use USD-equivalent units; not a 24-hour change in open interest.","nullable":true,"type":"number"},"long_short_ratio":{"description":"Retained venue long/short ratio. Population and measurement convention are source-specific; not a liquidation-side total.","nullable":true,"type":"number"},"next_funding":{"description":"Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","nullable":true,"type":"number"},"bid":{"description":"Retained best bid price in the contract quotation convention; not bid size.","nullable":true,"type":"number"},"bid_amount":{"description":"Retained displayed quantity at the best bid, in source quantity units. Not depth beyond level 1 or a fill guarantee.","nullable":true,"type":"number"},"ask":{"description":"Retained best ask price in the contract quotation convention; not ask size.","nullable":true,"type":"number"},"ask_amount":{"description":"Retained displayed quantity at the best ask, in source quantity units. Not depth beyond level 1 or a fill guarantee.","nullable":true,"type":"number"},"expiry":{"description":"Contract expiry date in legacy DD/MM/YY format. Date only: it does not encode the exchange-native expiry hour.","nullable":true,"type":"string"}},"required":["date"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible retained perpetual instrument history","tags":["Legacy Derivative Instrument History"]}},"/api/v1/historical/derivs/futures/{market}/{symbol}":{"get":{"operationId":"LegacyDerivativeInstrumentHistoryController_futures","parameters":[{"name":"market","required":true,"in":"path","schema":{"enum":["KRAKEN","DERIBIT","OKX","BYBIT","BINANCE","BITGET","BITMEX","HUOBI"],"type":"string"}},{"name":"symbol","required":true,"in":"path","schema":{"type":"string"}},{"name":"start","required":true,"in":"query","description":"Legacy ISO/date-only or 10/13-digit epoch.","schema":{"type":"string"}},{"name":"end","required":false,"in":"query","description":"Date-only includes the whole UTC day. Omitted end is end of tomorrow in UTC.","schema":{"type":"string"}},{"name":"granularity","required":false,"in":"query","description":"Known UTC sampling grid; omitted or -- means native.","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"integer","minimum":1},"description":"Omitted queries page 1 but omits meta.page, as in v1."},{"name":"limit","required":false,"in":"query","schema":{"type":"integer","minimum":1,"maximum":1440},"description":"Omitted queries 10 rows but uses divisor 1 for meta.total_pages, as in v1."}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"type":"object","properties":{"meta":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Total matching source rows for this window, not this page; instrument rows may share a timestamp."},"items":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of rows actually returned on this page."},"page":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991,"description":"One-based page number."},"total_pages":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Declared page count. Compatibility aliases preserve legacy omitted-limit accounting; send page and limit explicitly."}},"required":["total","items","total_pages"],"additionalProperties":false},"items":{"type":"array","items":{"type":"object","properties":{"date":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Source observation time in Unix milliseconds, UTC; not the request time or a finality certificate. Resolution normally samples observations, not interval totals."},"price":{"description":"Retained normalized contract price, in the source price reference currency; not an OHLC close.","nullable":true,"type":"number"},"index":{"description":"Retained contract index/reference price. This field is a price, not a row number or instrument identifier.","nullable":true,"type":"number"},"basis":{"description":"Retained futures/perpetual basis under the source convention. Not funding paid; no percentage/fraction conversion is added by this reader.","nullable":true,"type":"number"},"funding":{"description":"Retained funding rate in percentage points (0.01 means 0.01%, not 1%). Normally an 8-hour-equivalent source rate; historical venue normalization is preserved, not recomputed here. Not a funding cashflow or an interval sum.","nullable":true,"type":"number"},"yield":{"description":"For dated futures: annualized basis in percentage points. For perpetuals: Retained annualized funding yield in percentage points (10.95 means 10.95% per year), not a compounded APY. Source annualization/rounding is preserved; not the rate for one funding interval.","nullable":true,"type":"number"},"volume":{"description":"Venue-reported rolling trading volume in USD-equivalent units. Not the volume summed over the requested resolution.","nullable":true,"type":"number"},"volume_coin":{"description":"Corresponding retained trading volume in base-asset quantity units, not USD.","nullable":true,"type":"number"},"open_interest":{"description":"Outstanding derivative exposure in USD-equivalent units; not a contract count.","nullable":true,"type":"number"},"open_interest_coin":{"description":"Outstanding derivative exposure in base-asset quantity units; not USD.","nullable":true,"type":"number"},"oi_volume24h":{"description":"Dimensionless open_interest / volume ratio rounded to four decimals. Both operands use USD-equivalent units; not a 24-hour change in open interest.","nullable":true,"type":"number"},"long_short_ratio":{"description":"Retained venue long/short ratio. Population and measurement convention are source-specific; not a liquidation-side total.","nullable":true,"type":"number"},"next_funding":{"description":"Next funding-rate estimate in percentage points, using the retained source interval convention. Not the next settlement timestamp and not a guaranteed payment.","nullable":true,"type":"number"},"bid":{"description":"Retained best bid price in the contract quotation convention; not bid size.","nullable":true,"type":"number"},"bid_amount":{"description":"Retained displayed quantity at the best bid, in source quantity units. Not depth beyond level 1 or a fill guarantee.","nullable":true,"type":"number"},"ask":{"description":"Retained best ask price in the contract quotation convention; not ask size.","nullable":true,"type":"number"},"ask_amount":{"description":"Retained displayed quantity at the best ask, in source quantity units. Not depth beyond level 1 or a fill guarantee.","nullable":true,"type":"number"},"expiry":{"description":"Contract expiry date in legacy DD/MM/YY format. Date only: it does not encode the exchange-native expiry hour.","nullable":true,"type":"string"}},"required":["date"],"additionalProperties":false}}},"required":["meta","items"],"additionalProperties":false}}}}},"security":[{"X-API-Key":[]}],"summary":"V1-compatible retained dated-future instrument history","tags":["Legacy Derivative Instrument History"]}},"/api/v1/x402/subscriptions/purchase/premium/monthly":{"post":{"description":"Premium subscription · Monthly · 1 month of prepaid access. List price 50.00 USDC. The account-bound quote applies any unused subscription credit. Sign in and get a quote before authorizing payment. No automatic renewal. Checkout: https://v3.laevitas.ch/profile/subscription/wallet?plan=02084c27-5942-4603-ad2c-813e80fd3b16&cycle=MONTHLY","operationId":"purchasePremium1MonthSubscription","parameters":[{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription active with payment receipt"},"202":{"description":"Payment confirmation or activation pending; poll the checkout status, do not pay again"},"400":{"description":"Missing or invalid account-bound checkout, or plan/period mismatch; no payment submitted"},"402":{"description":"USDC payment required. Public probes show list pricing; a valid account-bound checkout returns the final amount.","headers":{"payment-required":{"schema":{"type":"string"},"description":"Base64 x402 v2 challenge with Base/Solana payment options and subscription discovery metadata"}}},"503":{"description":"Subscription checkout temporarily unavailable"}},"summary":"Premium · Monthly","tags":["x402 subscriptions"],"servers":[{"url":"https://apiv2.laevitas.ch"}],"security":[{"SubscriptionCheckoutToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"checkoutId":{"type":"string","format":"uuid","description":"Account quote ID."}},"required":["checkoutId"],"additionalProperties":false}}}},"x-payment-info":{"protocols":["x402"],"price":{"mode":"dynamic","currency":"USD","min":"0.01","max":"50.00"}},"x-laevitas-subscription":{"plan":"Premium","cycle":"MONTHLY","months":1,"listPriceUSDC":"50.00","autoRenew":false,"quoteUrl":"https://be.laevitas.ch/subscription/x402/quotes","dashboardUrl":"https://v3.laevitas.ch/profile/subscription/wallet?plan=02084c27-5942-4603-ad2c-813e80fd3b16&cycle=MONTHLY","catalogUrl":"https://apiv2.laevitas.ch/api/v1/x402/subscriptions/products"}}},"/api/v1/x402/subscriptions/purchase/premium/quarterly":{"post":{"description":"Premium subscription · Quarterly · 3 months of prepaid access. List price 150.00 USDC. The account-bound quote applies any unused subscription credit. Sign in and get a quote before authorizing payment. No automatic renewal. Checkout: https://v3.laevitas.ch/profile/subscription/wallet?plan=02084c27-5942-4603-ad2c-813e80fd3b16&cycle=QUARTERLY","operationId":"purchasePremium3MonthSubscription","parameters":[{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription active with payment receipt"},"202":{"description":"Payment confirmation or activation pending; poll the checkout status, do not pay again"},"400":{"description":"Missing or invalid account-bound checkout, or plan/period mismatch; no payment submitted"},"402":{"description":"USDC payment required. Public probes show list pricing; a valid account-bound checkout returns the final amount.","headers":{"payment-required":{"schema":{"type":"string"},"description":"Base64 x402 v2 challenge with Base/Solana payment options and subscription discovery metadata"}}},"503":{"description":"Subscription checkout temporarily unavailable"}},"summary":"Premium · Quarterly","tags":["x402 subscriptions"],"servers":[{"url":"https://apiv2.laevitas.ch"}],"security":[{"SubscriptionCheckoutToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"checkoutId":{"type":"string","format":"uuid","description":"Account quote ID."}},"required":["checkoutId"],"additionalProperties":false}}}},"x-payment-info":{"protocols":["x402"],"price":{"mode":"dynamic","currency":"USD","min":"0.01","max":"150.00"}},"x-laevitas-subscription":{"plan":"Premium","cycle":"QUARTERLY","months":3,"listPriceUSDC":"150.00","autoRenew":false,"quoteUrl":"https://be.laevitas.ch/subscription/x402/quotes","dashboardUrl":"https://v3.laevitas.ch/profile/subscription/wallet?plan=02084c27-5942-4603-ad2c-813e80fd3b16&cycle=QUARTERLY","catalogUrl":"https://apiv2.laevitas.ch/api/v1/x402/subscriptions/products"}}},"/api/v1/x402/subscriptions/purchase/premium/six-month":{"post":{"description":"Premium subscription · Six months · 6 months of prepaid access. List price 300.00 USDC. The account-bound quote applies any unused subscription credit. Sign in and get a quote before authorizing payment. No automatic renewal. Checkout: https://v3.laevitas.ch/profile/subscription/wallet?plan=02084c27-5942-4603-ad2c-813e80fd3b16&cycle=BIYEARLY","operationId":"purchasePremium6MonthSubscription","parameters":[{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription active with payment receipt"},"202":{"description":"Payment confirmation or activation pending; poll the checkout status, do not pay again"},"400":{"description":"Missing or invalid account-bound checkout, or plan/period mismatch; no payment submitted"},"402":{"description":"USDC payment required. Public probes show list pricing; a valid account-bound checkout returns the final amount.","headers":{"payment-required":{"schema":{"type":"string"},"description":"Base64 x402 v2 challenge with Base/Solana payment options and subscription discovery metadata"}}},"503":{"description":"Subscription checkout temporarily unavailable"}},"summary":"Premium · Six months","tags":["x402 subscriptions"],"servers":[{"url":"https://apiv2.laevitas.ch"}],"security":[{"SubscriptionCheckoutToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"checkoutId":{"type":"string","format":"uuid","description":"Account quote ID."}},"required":["checkoutId"],"additionalProperties":false}}}},"x-payment-info":{"protocols":["x402"],"price":{"mode":"dynamic","currency":"USD","min":"0.01","max":"300.00"}},"x-laevitas-subscription":{"plan":"Premium","cycle":"BIYEARLY","months":6,"listPriceUSDC":"300.00","autoRenew":false,"quoteUrl":"https://be.laevitas.ch/subscription/x402/quotes","dashboardUrl":"https://v3.laevitas.ch/profile/subscription/wallet?plan=02084c27-5942-4603-ad2c-813e80fd3b16&cycle=BIYEARLY","catalogUrl":"https://apiv2.laevitas.ch/api/v1/x402/subscriptions/products"}}},"/api/v1/x402/subscriptions/purchase/premium/yearly":{"post":{"description":"Premium subscription · Yearly · 12 months of prepaid access. List price 504.00 USDC. The account-bound quote applies any unused subscription credit. Sign in and get a quote before authorizing payment. No automatic renewal. Checkout: https://v3.laevitas.ch/profile/subscription/wallet?plan=02084c27-5942-4603-ad2c-813e80fd3b16&cycle=YEARLY","operationId":"purchasePremium12MonthSubscription","parameters":[{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription active with payment receipt"},"202":{"description":"Payment confirmation or activation pending; poll the checkout status, do not pay again"},"400":{"description":"Missing or invalid account-bound checkout, or plan/period mismatch; no payment submitted"},"402":{"description":"USDC payment required. Public probes show list pricing; a valid account-bound checkout returns the final amount.","headers":{"payment-required":{"schema":{"type":"string"},"description":"Base64 x402 v2 challenge with Base/Solana payment options and subscription discovery metadata"}}},"503":{"description":"Subscription checkout temporarily unavailable"}},"summary":"Premium · Yearly","tags":["x402 subscriptions"],"servers":[{"url":"https://apiv2.laevitas.ch"}],"security":[{"SubscriptionCheckoutToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"checkoutId":{"type":"string","format":"uuid","description":"Account quote ID."}},"required":["checkoutId"],"additionalProperties":false}}}},"x-payment-info":{"protocols":["x402"],"price":{"mode":"dynamic","currency":"USD","min":"0.01","max":"504.00"}},"x-laevitas-subscription":{"plan":"Premium","cycle":"YEARLY","months":12,"listPriceUSDC":"504.00","autoRenew":false,"quoteUrl":"https://be.laevitas.ch/subscription/x402/quotes","dashboardUrl":"https://v3.laevitas.ch/profile/subscription/wallet?plan=02084c27-5942-4603-ad2c-813e80fd3b16&cycle=YEARLY","catalogUrl":"https://apiv2.laevitas.ch/api/v1/x402/subscriptions/products"}}},"/api/v1/x402/subscriptions/purchase/enterprise/monthly":{"post":{"description":"Enterprise subscription · Monthly · 1 month of prepaid access. List price 500.00 USDC. The account-bound quote applies any unused subscription credit. Sign in and get a quote before authorizing payment. No automatic renewal. Checkout: https://v3.laevitas.ch/profile/subscription/wallet?plan=4eda686a-f9b6-4cf2-abc2-7af0a03bf399&cycle=MONTHLY","operationId":"purchaseEnterprise1MonthSubscription","parameters":[{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription active with payment receipt"},"202":{"description":"Payment confirmation or activation pending; poll the checkout status, do not pay again"},"400":{"description":"Missing or invalid account-bound checkout, or plan/period mismatch; no payment submitted"},"402":{"description":"USDC payment required. Public probes show list pricing; a valid account-bound checkout returns the final amount.","headers":{"payment-required":{"schema":{"type":"string"},"description":"Base64 x402 v2 challenge with Base/Solana payment options and subscription discovery metadata"}}},"503":{"description":"Subscription checkout temporarily unavailable"}},"summary":"Enterprise · Monthly","tags":["x402 subscriptions"],"servers":[{"url":"https://apiv2.laevitas.ch"}],"security":[{"SubscriptionCheckoutToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"checkoutId":{"type":"string","format":"uuid","description":"Account quote ID."}},"required":["checkoutId"],"additionalProperties":false}}}},"x-payment-info":{"protocols":["x402"],"price":{"mode":"dynamic","currency":"USD","min":"0.01","max":"500.00"}},"x-laevitas-subscription":{"plan":"Enterprise","cycle":"MONTHLY","months":1,"listPriceUSDC":"500.00","autoRenew":false,"quoteUrl":"https://be.laevitas.ch/subscription/x402/quotes","dashboardUrl":"https://v3.laevitas.ch/profile/subscription/wallet?plan=4eda686a-f9b6-4cf2-abc2-7af0a03bf399&cycle=MONTHLY","catalogUrl":"https://apiv2.laevitas.ch/api/v1/x402/subscriptions/products"}}},"/api/v1/x402/subscriptions/purchase/enterprise/quarterly":{"post":{"description":"Enterprise subscription · Quarterly · 3 months of prepaid access. List price 1500.00 USDC. The account-bound quote applies any unused subscription credit. Sign in and get a quote before authorizing payment. No automatic renewal. Checkout: https://v3.laevitas.ch/profile/subscription/wallet?plan=4eda686a-f9b6-4cf2-abc2-7af0a03bf399&cycle=QUARTERLY","operationId":"purchaseEnterprise3MonthSubscription","parameters":[{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription active with payment receipt"},"202":{"description":"Payment confirmation or activation pending; poll the checkout status, do not pay again"},"400":{"description":"Missing or invalid account-bound checkout, or plan/period mismatch; no payment submitted"},"402":{"description":"USDC payment required. Public probes show list pricing; a valid account-bound checkout returns the final amount.","headers":{"payment-required":{"schema":{"type":"string"},"description":"Base64 x402 v2 challenge with Base/Solana payment options and subscription discovery metadata"}}},"503":{"description":"Subscription checkout temporarily unavailable"}},"summary":"Enterprise · Quarterly","tags":["x402 subscriptions"],"servers":[{"url":"https://apiv2.laevitas.ch"}],"security":[{"SubscriptionCheckoutToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"checkoutId":{"type":"string","format":"uuid","description":"Account quote ID."}},"required":["checkoutId"],"additionalProperties":false}}}},"x-payment-info":{"protocols":["x402"],"price":{"mode":"dynamic","currency":"USD","min":"0.01","max":"1500.00"}},"x-laevitas-subscription":{"plan":"Enterprise","cycle":"QUARTERLY","months":3,"listPriceUSDC":"1500.00","autoRenew":false,"quoteUrl":"https://be.laevitas.ch/subscription/x402/quotes","dashboardUrl":"https://v3.laevitas.ch/profile/subscription/wallet?plan=4eda686a-f9b6-4cf2-abc2-7af0a03bf399&cycle=QUARTERLY","catalogUrl":"https://apiv2.laevitas.ch/api/v1/x402/subscriptions/products"}}},"/api/v1/x402/subscriptions/purchase/enterprise/six-month":{"post":{"description":"Enterprise subscription · Six months · 6 months of prepaid access. List price 3000.00 USDC. The account-bound quote applies any unused subscription credit. Sign in and get a quote before authorizing payment. No automatic renewal. Checkout: https://v3.laevitas.ch/profile/subscription/wallet?plan=4eda686a-f9b6-4cf2-abc2-7af0a03bf399&cycle=BIYEARLY","operationId":"purchaseEnterprise6MonthSubscription","parameters":[{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription active with payment receipt"},"202":{"description":"Payment confirmation or activation pending; poll the checkout status, do not pay again"},"400":{"description":"Missing or invalid account-bound checkout, or plan/period mismatch; no payment submitted"},"402":{"description":"USDC payment required. Public probes show list pricing; a valid account-bound checkout returns the final amount.","headers":{"payment-required":{"schema":{"type":"string"},"description":"Base64 x402 v2 challenge with Base/Solana payment options and subscription discovery metadata"}}},"503":{"description":"Subscription checkout temporarily unavailable"}},"summary":"Enterprise · Six months","tags":["x402 subscriptions"],"servers":[{"url":"https://apiv2.laevitas.ch"}],"security":[{"SubscriptionCheckoutToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"checkoutId":{"type":"string","format":"uuid","description":"Account quote ID."}},"required":["checkoutId"],"additionalProperties":false}}}},"x-payment-info":{"protocols":["x402"],"price":{"mode":"dynamic","currency":"USD","min":"0.01","max":"3000.00"}},"x-laevitas-subscription":{"plan":"Enterprise","cycle":"BIYEARLY","months":6,"listPriceUSDC":"3000.00","autoRenew":false,"quoteUrl":"https://be.laevitas.ch/subscription/x402/quotes","dashboardUrl":"https://v3.laevitas.ch/profile/subscription/wallet?plan=4eda686a-f9b6-4cf2-abc2-7af0a03bf399&cycle=BIYEARLY","catalogUrl":"https://apiv2.laevitas.ch/api/v1/x402/subscriptions/products"}}},"/api/v1/x402/subscriptions/purchase/enterprise/yearly":{"post":{"description":"Enterprise subscription · Yearly · 12 months of prepaid access. List price 5040.00 USDC. The account-bound quote applies any unused subscription credit. Sign in and get a quote before authorizing payment. No automatic renewal. Checkout: https://v3.laevitas.ch/profile/subscription/wallet?plan=4eda686a-f9b6-4cf2-abc2-7af0a03bf399&cycle=YEARLY","operationId":"purchaseEnterprise12MonthSubscription","parameters":[{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Subscription active with payment receipt"},"202":{"description":"Payment confirmation or activation pending; poll the checkout status, do not pay again"},"400":{"description":"Missing or invalid account-bound checkout, or plan/period mismatch; no payment submitted"},"402":{"description":"USDC payment required. Public probes show list pricing; a valid account-bound checkout returns the final amount.","headers":{"payment-required":{"schema":{"type":"string"},"description":"Base64 x402 v2 challenge with Base/Solana payment options and subscription discovery metadata"}}},"503":{"description":"Subscription checkout temporarily unavailable"}},"summary":"Enterprise · Yearly","tags":["x402 subscriptions"],"servers":[{"url":"https://apiv2.laevitas.ch"}],"security":[{"SubscriptionCheckoutToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"checkoutId":{"type":"string","format":"uuid","description":"Account quote ID."}},"required":["checkoutId"],"additionalProperties":false}}}},"x-payment-info":{"protocols":["x402"],"price":{"mode":"dynamic","currency":"USD","min":"0.01","max":"5040.00"}},"x-laevitas-subscription":{"plan":"Enterprise","cycle":"YEARLY","months":12,"listPriceUSDC":"5040.00","autoRenew":false,"quoteUrl":"https://be.laevitas.ch/subscription/x402/quotes","dashboardUrl":"https://v3.laevitas.ch/profile/subscription/wallet?plan=4eda686a-f9b6-4cf2-abc2-7af0a03bf399&cycle=YEARLY","catalogUrl":"https://apiv2.laevitas.ch/api/v1/x402/subscriptions/products"}}},"/api/v1/x402/tick-data/purchase":{"post":{"description":"One-off historical Parquet datasets. Prices depend on data type, exchange, currencies and dates. Public probes show the lowest published per-currency day rate, not the price of your dataset. Quote and confirm an account-bound order before signing. No subscription or API credit bundle required. Payment status, delivery retries and download-link renewal do not charge again.","operationId":"purchaseTickData","parameters":[{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"type":"string"}},{"name":"X-Checkout-Token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Order handed to delivery with receipt"},"201":{"description":""},"202":{"description":"Confirmation or delivery handoff pending; poll, do not repay"},"400":{"description":"Missing or invalid account checkout; no payment submitted"},"402":{"description":"USDC payment challenge; public probes require a dataset quote before payment","headers":{"payment-required":{"schema":{"type":"string"},"description":"Base64 x402 v2 challenge with Bazaar input schema"}}}},"summary":"Tick-data datasets · USDC on Base or Solana","tags":["x402 tick data"],"security":[{"TickDataCheckoutToken":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"checkoutId":{"type":"string","format":"uuid","description":"Account-bound data checkout ID."}},"required":["checkoutId"],"additionalProperties":false}}}},"x-payment-info":{"protocols":["x402"],"price":{"mode":"dynamic","currency":"USD","min":"0.50","max":"21474836.47"}},"x-laevitas-tick-data":{"catalogUrl":"https://be.laevitas.ch/data-export/catalog","quoteUrl":"https://be.laevitas.ch/data-export/quote","checkoutUrl":"https://be.laevitas.ch/data-export/x402/checkouts","dashboard":"https://v3.laevitas.ch/profile/data-orders/buy","authentication":"Laevitas account bearer token for checkout; X-Checkout-Token for payment","payment":"POST /api/v1/x402/tick-data/purchase with checkoutId and X-Checkout-Token","status":"GET /api/v1/x402/tick-data/checkouts/{id}","delivery":"Purchased files and refreshed download links remain available through your data order. No subscription or API credits required.","pricing":{"currency":"USD","minimumCents":50,"maximumCents":2147483647,"products":[{"dataType":"futures-trades","perCurrencyDayCents":300,"perCurrencyFullHistoryCents":12000,"allCurrenciesDayCents":2000},{"dataType":"futures-liquidations","perCurrencyDayCents":50,"perCurrencyFullHistoryCents":2000,"allCurrenciesDayCents":1200},{"dataType":"futures-orderbook-l2","perCurrencyDayCents":600,"perCurrencyFullHistoryCents":30000,"allCurrenciesDayCents":2800},{"dataType":"futures-stats","perCurrencyDayCents":100,"perCurrencyFullHistoryCents":4000,"allCurrenciesDayCents":1500},{"dataType":"options-trades","perCurrencyDayCents":400,"perCurrencyFullHistoryCents":16000,"allCurrenciesDayCents":2200},{"dataType":"options-stats","perCurrencyDayCents":200,"perCurrencyFullHistoryCents":8000,"allCurrenciesDayCents":1800},{"dataType":"spot-trades","perCurrencyDayCents":300,"perCurrencyFullHistoryCents":12000,"allCurrenciesDayCents":2000},{"dataType":"spot-orderbook-l2","perCurrencyDayCents":600,"perCurrencyFullHistoryCents":30000,"allCurrenciesDayCents":2800},{"dataType":"spot-stats","perCurrencyDayCents":100,"perCurrencyFullHistoryCents":4000,"allCurrenciesDayCents":1500},{"dataType":"index-prices","perCurrencyDayCents":50,"perCurrencyFullHistoryCents":2000,"allCurrenciesDayCents":1200}]},"quoteRequired":true}}}},"info":{"title":"Laevitas API V2","description":"\nProfessional market data API for crypto derivatives, spot markets, prediction markets, Hyperliquid HyperCore data, proprietary volatility surfaces, and analytics.\n\n## Authentication\n\nUse an API key for authenticated REST requests:\n\n```http\nX-API-Key: your-api-key-here\n```\n\nMost data endpoints also support x402 pay-per-request without an API key.\n\n**Subscriptions with USDC:** Premium and Enterprise can be purchased on Base or Solana for a month, a quarter, six months or a year. Access is prepaid, with no automatic renewal. [Buy a subscription](https://v3.laevitas.ch/profile/subscription/wallet) or read the [USDC subscription guide](/x402#subscriptions).\n\nThe subscription belongs to your signed-in Laevitas account; wallet sign-in does not require an email. Enterprise users generate an API key in V3 after activation. Plan and billing-period limits still apply. Subscription purchases are separate from API credit bundles.\n\nFor Claude MCP, add `https://apiv2.laevitas.ch/api/v1/mcp`, select **Sign in now → Register automatically**\nwith no custom headers, and authorize with your API key on the Laevitas page.\nDo not enter a client ID or secret manually. All OAuth clients require PKCE S256.\nConnection guide: [MCP setup](/mcp). CIMD / published client identity is not supported.\n\n| Resource | Path |\n| --- | --- |\n| OpenAPI JSON | `GET /openapi.json` |\n| x402 discovery | `GET /.well-known/x402` |\n| Changelog | `GET /api/v1/changelog` |\n| WebSocket docs | `GET /websocket` |\n\n## REST Surfaces\n\n| Surface | Examples |\n| --- | --- |\n| Instruments | Cross-market contract reference data |\n| Futures | OHLCVT, trades, tickers, orderbook, liquidations, carry |\n| Perpetuals | OHLCVT, trades, funding, open interest, orderbook, liquidations |\n| Options | OHLCVT, trades, Greeks, volatility, flow, dealer GEX |\n| Options Backtests | Strategy templates, asynchronous submission, status, combined results, cancellation |\n| Vol Surface | Proprietary surface snapshots, slices, strikes, term structure, risk |\n| Spot | OHLCVT, ticker, trades, volume, L2 orderbook, snapshots |\n| Predictions | Polymarket instruments, categories, trades, ticker history |\n| Hyperliquid - HyperCore | Node-derived fills, liquidations, positions, funding, TWAPs, resting orders, L2 books |\n| Analytics | Realized volatility and derived metrics |\n\n## Pagination\n\nBacktests are asynchronous jobs, not paginated market-data queries. Start with\n`GET /api/v1/options/backtests/strategies`, submit with `POST /api/v1/options/backtests`,\nthen poll `/{id}` and retrieve `/{id}/result`. These responses have no data/meta wrapper.\n\nPaginated endpoints return the cursor at `meta.next_cursor`. Pass that value back as the `cursor` query parameter to fetch the next page.\n\n## WebSocket Streaming\n\nReal-time streams are documented at `/websocket`.\n\n| Data | Channel pattern |\n| --- | --- |\n| Trades | `trades.{market}.{exchange}.{instrument}` |\n| OHLC ticker | `ohlc.ticker.{market}.{exchange}.{instrument}.{timeframe}` |\n| OHLCVT | `ohlc.vt.{market}.{exchange}.{instrument}.{timeframe}` |\n\nVariables: `market` is one of `perpetuals`, `futures`, `options`, or `spot`; `timeframe` is one of `1m`, `5m`, `15m`, `1h`, `4h`, or `1d`.\n\n## Quick Start\n\n```bash\ncurl \"https://apiv2.laevitas.ch/api/v1/futures/ohlcvt?exchange=deribit&instrument_name=BTC-PERPETUAL\" \\\n  -H \"X-API-Key: your-api-key-here\"\n```\n","version":"1.48.0","contact":{"name":"Laevitas Support","url":"https://laevitas.ch","email":"support@laevitas.ch"}},"tags":[{"name":"Instruments","description":"Cross-market contract reference data — tick size, lot size, leverage, expiry, margin type"},{"name":"Macro","description":"Discovery for non-crypto perpetuals — equity (NVDA, TSLA, MSTR…), commodity (GOLD, OIL, SILVER…), forex (EURUSD, GBPUSD…), and index. Pull data via /perpetuals/* with the discovered instrument names."},{"name":"Spot","description":"Spot market data — OHLCVT, ticker, trades, volume, orderbook, and snapshots"},{"name":"Futures","description":"Futures market data, reference prices, and analytics"},{"name":"Perpetuals","description":"Perpetual swap market data, funding rates, basis, and carry"},{"name":"Options","description":"Options market data, Greeks, and volatility analytics"},{"name":"Options Backtests","description":"Asynchronous multi-strategy options simulations: templates, submission, polling, results and cancellation"},{"name":"Vol Surface","description":"Proprietary volatility surface data and live portfolio risk — snapshots, slices, term structure, strikes, decomposition, scenarios, and ladders."},{"name":"Predictions","description":"Prediction market data — Polymarket events, categories, and ticker history"},{"name":"Hyperliquid - HyperCore","description":"Hyperliquid L1 native trading data from HyperCore — wallet-attributed fills, liquidations, positions, funding payments, TWAP events, resting orders, and deep HyperCore-derived L2 books."},{"name":"Analytics","description":"Computed cross-asset analytics and derived market metrics"},{"name":"Changelog","description":"Public, machine-readable API releases, historical-data corrections, incidents, and coverage changes"},{"name":"MCP","description":"Model Context Protocol endpoint for AI agent tool calls (Streamable HTTP transport)"},{"name":"OAuthLogin","description":"OAuth 2.1 login flow for the MCP endpoint"},{"name":"McpOAuth","description":"OAuth 2.1 metadata, registration, authorization, and token endpoints for MCP clients"}],"servers":[{"url":"https://apiv2.laevitas.ch","description":"Production"}],"components":{"securitySchemes":{"X-API-Key":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key for authentication. Contact support to obtain a key."},"SubscriptionCheckoutToken":{"type":"apiKey","in":"header","name":"X-Checkout-Token","description":"Account-bound token from the authenticated subscription quote. Required before any payment can be submitted."},"TickDataCheckoutToken":{"type":"apiKey","in":"header","name":"X-Checkout-Token","description":"Token from an authenticated data order. A public discovery probe cannot submit a payment."}},"schemas":{"WsPassResponseDto":{"type":"object","properties":{"expires_at":{"type":"number","example":1730412345678,"description":"New pass expiry as unix epoch milliseconds. Source of truth."},"expires_at_iso":{"type":"string","example":"2026-04-30T18:25:45.678Z","description":"Human-readable form of expires_at. Equivalent to new Date(expires_at).toISOString()."},"duration":{"type":"string","example":"hour","enum":["hour","day"],"description":"Which SKU was purchased on this call. Stacking is additive, so the resulting pass duration may exceed this single SKU."},"wallet":{"type":"string","example":"0xabcdef0123456789abcdef0123456789abcdef01","description":"Wallet that owns the pass (lowercase, EVM checksum stripped)."},"extended_from":{"type":"number","example":1730408745678,"description":"If this purchase extended an existing active pass, the previous expires_at. Omitted when no prior pass was active."}},"required":["expires_at","expires_at_iso","duration","wallet"]},"CreditTokenChallengeRequestDto":{"type":"object","properties":{"address":{"type":"string","example":"0x1234567890abcdef1234567890abcdef12345678","description":"Wallet that holds the prepaid credits. EVM 0x address or Solana base58 address."},"chain_id":{"type":"string","example":"eip155:8453","description":"CAIP-2 network the wallet signs on. Must be one of the networks x402 accepts on this server."}},"required":["address","chain_id"]},"CreditTokenChallengeInfoDto":{"type":"object","properties":{"domain":{"type":"string","example":"apiv2.laevitas.ch"},"uri":{"type":"string","example":"https://apiv2.laevitas.ch/api/v1/x402/credit-token"},"version":{"type":"string","example":"1"},"statement":{"type":"string","example":"Refresh a Laevitas x402 credit token for this wallet. This signature does not authorize any payment."},"nonce":{"type":"string","example":"9f2c7a1e5b8d4c3a6e0f1b2d3c4a5b6e"},"issuedAt":{"type":"string","example":"2026-10-02T10:00:00.000Z"},"expirationTime":{"type":"string","example":"2026-10-02T10:05:00.000Z"},"chainId":{"type":"string","example":"eip155:8453"},"type":{"type":"string","example":"eip191","enum":["eip191","ed25519"]}},"required":["domain","uri","version","statement","nonce","issuedAt","expirationTime","chainId","type"]},"CreditTokenChallengeResponseDto":{"type":"object","properties":{"info":{"description":"CAIP-122 fields; echo them back with the signature.","allOf":[{"$ref":"#/components/schemas/CreditTokenChallengeInfoDto"}]},"message":{"type":"string","description":"Exact text the wallet must sign (EIP-191 personal_sign on EVM, raw ed25519 on Solana)."},"expires_at":{"type":"string","example":"2026-10-02T10:05:00.000Z","description":"The challenge is single-use and expires here."}},"required":["info","message","expires_at"]},"CreditTokenErrorDto":{"type":"object","properties":{"error":{"type":"string","example":"nonce_invalid"},"message":{"type":"string","example":"The challenge is unknown, already used or expired. Request a new one."}},"required":["error","message"]},"CreditTokenResponseDto":{"type":"object","properties":{"credit_token":{"type":"string","description":"JWT to send as the X-Credit-Token header. Valid for 24 hours."},"wallet":{"type":"string","example":"0x1234567890abcdef1234567890abcdef12345678","description":"Lowercased wallet address."},"credits_remaining":{"type":"number","example":4200,"description":"Credits left on the wallet. Unchanged by this call."},"expires_in_seconds":{"type":"number","example":86400}},"required":["credit_token","wallet","credits_remaining","expires_in_seconds"]},"PaginationMetaEntity":{"type":"object","properties":{"next_cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Pass this value as the cursor parameter in the next request. Null indicates no more pages.","example":"eyJpZCI6MTIzNDU2NzgsInRzIjoxNjQwOTk1MjAwfQ==","nullable":true},"has_more":{"type":"boolean","description":"True when another page exists for the same filters and sort direction. This is derived with a one-bucket lookahead rather than inferred from the number of rows returned."},"empty_reason":{"type":"string","description":"Machine-readable explanation for an empty data array. classification_unavailable is explicit when this endpoint cannot safely distinguish the cause.","enum":["unsupported_exchange","ineligible_instrument","outside_retention","outside_entitlement","outside_coverage","no_matching_data","classification_unavailable"],"nullable":true},"coverage":{"type":"object","description":"Observed source coverage used for empty-response classification. Observed timestamps do not certify completeness."},"completeness":{"type":"object","description":"Gap-aware persistence-completeness metadata. When available, the half-open interval contains every persisted closed 1m source row; a missing minute stops certification. Unsupported endpoint families report status=unavailable."}},"required":["next_cursor"]},"PaginatedResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"array"}},"meta":{"$ref":"#/components/schemas/PaginationMetaEntity"}},"required":["data","meta"]},"OptionsOhlcvtEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"open":{"type":"number","description":"First open. Premium candle including synthetic mark-price bars when no trades are recorded. A price is not evidence of an execution. Premium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.","example":42150.5},"high":{"type":"number","description":"Maximum high. Premium candle including synthetic mark-price bars when no trades are recorded. A price is not evidence of an execution. Premium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.","example":42890.75},"low":{"type":"number","description":"Minimum low. Premium candle including synthetic mark-price bars when no trades are recorded. A price is not evidence of an execution. Premium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.","example":41920.25},"close":{"type":"number","description":"Last close. Premium candle including synthetic mark-price bars when no trades are recorded. A price is not evidence of an execution. Premium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.","example":42500},"vwap":{"type":"number","description":"Volume-weighted average price across the interval. When total traded volume is zero, the mean of the minute reference prices is retained.","example":42350.5},"volume":{"type":"number","description":"Traded volume (buy + sell) in the bucket, in the venue-native size unit; 0 on synthetic candles.","example":2700.8},"buy_volume":{"type":"number","description":"Buy-side volume (direction = buy)","example":1500.5},"sell_volume":{"type":"number","description":"Sell-side volume (direction = sell)","example":1200.3},"trades_count":{"type":"number","description":"Number of trades (buy + sell); 0 identifies a synthetic mark-filled candle.","example":270},"buy_trades_count":{"type":"number","description":"Number of buy trades","example":150},"sell_trades_count":{"type":"number","description":"Number of sell trades","example":120},"liquidation_short_volume":{"type":"number","description":"Volume from short liquidations (forced buy orders)","example":50.25,"nullable":true},"liquidation_long_volume":{"type":"number","description":"Volume from long liquidations (forced sell orders)","example":75.5,"nullable":true},"block_trade_buy_volume":{"type":"number","description":"Volume from block trade buys","example":100,"nullable":true},"block_trade_sell_volume":{"type":"number","description":"Volume from block trade sells","example":150,"nullable":true},"mark_price":{"type":"number","description":"Mark price at the final observed minute of the bucket; not OHLC.","example":42500.5,"nullable":true},"index_price":{"type":"number","description":"Exchange spot index at the final observed candle minute. Null when unavailable; never substituted with the option underlying pricing reference.","example":42505,"nullable":true},"days_to_expiry":{"type":"number","description":"Days until expiry (NULL for PERPETUAL)","example":90.5,"nullable":true}},"required":["date","open","high","low","close","vwap","volume","buy_volume","sell_volume","trades_count","buy_trades_count","sell_trades_count"]},"OptionsTickerDataEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"mark_price":{"type":"number","description":"Final observed mark premium. Premium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.","nullable":true},"index_price":{"type":"number","description":"Exchange spot-index price, not the expiry-specific option underlying/forward reference.","nullable":true},"bid_price":{"type":"number","description":"Final observed best bid premium. Premium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.","nullable":true},"ask_price":{"type":"number","description":"Final observed best ask premium. Premium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.","nullable":true},"bid_ask_spread":{"type":"number","description":"Final observed ask minus bid premium. Premium in the instrument price currency: BTC/ETH for inverse Deribit options, stablecoin/USD for linear products. Do not combine these without conversion.","nullable":true},"bid_size":{"type":"number","description":"Displayed bid quantity at final observation. Retained source quantity units; the API does not apply an additional contract multiplier. Not USD notional or a universal one-contract-one-coin convention.","nullable":true},"ask_size":{"type":"number","description":"Displayed ask quantity at final observation. Retained source quantity units; the API does not apply an additional contract multiplier. Not USD notional or a universal one-contract-one-coin convention.","nullable":true},"oi":{"type":"number","description":"Outstanding quantity at final observation. Retained source quantity units; the API does not apply an additional contract multiplier. Not USD notional or a universal one-contract-one-coin convention.","nullable":true},"volume_usd_24h":{"type":"number","description":"Final ticker-reported rolling 24-hour USD volume; not a sum over this bucket.","nullable":true},"bid_iv":{"type":"number","description":"Final observed bid IV. Implied volatility in percentage points: 65 means 65%, not 0.65.","nullable":true,"example":64},"ask_iv":{"type":"number","description":"Final observed ask IV. Implied volatility in percentage points: 65 means 65%, not 0.65.","nullable":true,"example":66},"mark_iv":{"type":"number","description":"Final observed mark IV. Implied volatility in percentage points: 65 means 65%, not 0.65.","nullable":true,"example":65},"iv_spread":{"type":"number","description":"Ask IV minus bid IV, in volatility percentage points.","nullable":true,"example":2}},"required":["date","mark_price","index_price","bid_price","ask_price","bid_ask_spread","bid_size","ask_size","oi","volume_usd_24h","bid_iv","ask_iv","mark_iv","iv_spread"]},"OptionsVolatilityDataEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"strike":{"type":"number","description":"Option strike price","example":70000,"nullable":true},"maturity":{"type":"string","description":"Maturity date string","example":"23OCT26","nullable":true},"days_to_expiry":{"type":"number","description":"Days until expiry","example":15.25,"nullable":true},"underlying_price":{"type":"number","description":"Option underlying pricing reference, potentially expiry-specific. Distinct from the spot index; missing references are unavailable, not substituted with each other.","example":68900,"nullable":true},"mark_iv_open":{"type":"number","description":"Mark IV at period open. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":62,"nullable":true},"mark_iv_high":{"type":"number","description":"Highest mark IV during period. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":65,"nullable":true},"mark_iv_low":{"type":"number","description":"Lowest mark IV during period. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":60,"nullable":true},"mark_iv_close":{"type":"number","description":"Mark IV at period close. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":63,"nullable":true},"bid_iv_open":{"type":"number","description":"Bid IV at period open. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":61,"nullable":true},"bid_iv_high":{"type":"number","description":"Highest bid IV during period. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":64,"nullable":true},"bid_iv_low":{"type":"number","description":"Lowest bid IV during period. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":59,"nullable":true},"bid_iv_close":{"type":"number","description":"Bid IV at period close. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":62,"nullable":true},"ask_iv_open":{"type":"number","description":"Ask IV at period open. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":63,"nullable":true},"ask_iv_high":{"type":"number","description":"Highest ask IV during period. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":66,"nullable":true},"ask_iv_low":{"type":"number","description":"Lowest ask IV during period. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":61,"nullable":true},"ask_iv_close":{"type":"number","description":"Ask IV at period close. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":64,"nullable":true},"iv_spread_open":{"type":"number","description":"IV spread (ask - bid) at period open. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":2,"nullable":true},"iv_spread_high":{"type":"number","description":"Maximum IV spread during period. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":2.5,"nullable":true},"iv_spread_low":{"type":"number","description":"Minimum IV spread during period. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":1.5,"nullable":true},"iv_spread_close":{"type":"number","description":"IV spread at period close. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":2,"nullable":true},"iv_spread_avg":{"type":"number","description":"Average IV spread during period. Implied volatility in percentage points: 65 means 65%, not 0.65.","example":2,"nullable":true},"delta":{"type":"number","description":"Delta - rate of change of option price with respect to underlying","example":0.45,"nullable":true},"gamma":{"type":"number","description":"Gamma - rate of change of delta","example":0.012,"nullable":true},"theta":{"type":"number","description":"Theta - time decay","example":-12.5,"nullable":true},"vega":{"type":"number","description":"Vega - sensitivity to volatility","example":5.2,"nullable":true},"rho":{"type":"number","description":"Rho - sensitivity to interest rate","example":2.1,"nullable":true},"ticker_updates_count":{"type":"number","description":"Number of ticker updates during period","example":250,"nullable":true}},"required":["date"]},"OptionsRefDataEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"mark_price_open":{"type":"number","description":"Mark price at time bucket start","example":62100.5},"mark_price_high":{"type":"number","description":"Highest mark price during time bucket","example":62150},"mark_price_low":{"type":"number","description":"Lowest mark price during time bucket","example":62080},"mark_price_close":{"type":"number","description":"Mark price at time bucket end","example":62110},"underlying_price":{"type":"number","description":"Exchange-reported option underlying pricing reference at the final observed minute. It may be expiry-specific and is separate from the spot index. Null when unavailable.","example":62080.5,"nullable":true},"index_price":{"type":"number","description":"Exchange spot index at the final observed minute. Null when unavailable; never substituted with the option underlying pricing reference.","nullable":true}},"required":["date","mark_price_open","mark_price_high","mark_price_low","mark_price_close"]},"BaseVolumeDataEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"volume_24h":{"type":"number","description":"Venue-reported rolling 24-hour volume at the final ticker minute (unit per route definition); not a bucket sum","example":1500.25,"nullable":true},"volume_usd_24h":{"type":"number","description":"Rolling 24-hour USD volume at the final ticker minute; not a bucket sum","example":95000000.5,"nullable":true},"buy_volume":{"type":"number","description":"Buy volume traded in the bucket (venue-native size unit)","example":750.12,"nullable":true},"sell_volume":{"type":"number","description":"Sell volume traded in the bucket (venue-native size unit)","example":680.5,"nullable":true},"volume":{"type":"number","description":"Volume traded in the bucket: buy_volume + sell_volume (venue-native size unit)","example":1430.62,"nullable":true},"buy_trades_count":{"type":"number","description":"Number of buy trades in the resolution bucket","example":245,"nullable":true},"sell_trades_count":{"type":"number","description":"Number of sell trades in the resolution bucket","example":198,"nullable":true},"trades_count":{"type":"number","description":"Total number of trades in the resolution bucket","example":443,"nullable":true}},"required":["date"]},"OptionsTradeEntity":{"type":"object","properties":{"instrument_name":{"type":"string","description":"Instrument identifier","example":"BTC-23OCT26"},"timestamp":{"type":"number","description":"Unix timestamp in milliseconds","example":1234567890123},"date":{"type":"string","description":"ISO 8601 formatted date string","example":"2023-06-15T14:30:00.000Z"},"trade_id":{"type":"string","description":"Unique trade identifier","example":"trade_123456"},"block_trade_id":{"type":"string","description":"Block trade identifier if applicable","example":"block_123"},"combo_id":{"type":"string","description":"Combo trade identifier if applicable","example":"combo_123"},"combo_trade_id":{"type":"string","description":"Combo trade ID if part of combo","example":"combo_trade_123"},"strategy":{"type":"string","description":"Trading strategy identifier","example":"strategy_1"},"direction":{"type":"string","description":"Trade direction","enum":["buy","sell"],"example":"buy"},"tick_direction":{"type":"object","description":"Tick direction indicator","example":1,"nullable":true},"amount":{"type":"number","description":"Trade amount/size","example":1.5},"price":{"type":"number","description":"Trade execution price","example":45000.5},"index_price":{"type":"object","description":"Index price at time of trade","example":45010,"nullable":true},"oi_change":{"type":"object","description":"Change in open interest","example":100,"nullable":true},"open_interest":{"type":"object","description":"Open interest after trade","example":10000,"nullable":true},"oi_before":{"type":"object","description":"Open interest before trade","example":9900,"nullable":true}},"required":["instrument_name","timestamp","date","trade_id","direction","amount","price"]},"BaseOpenInterestEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"oi_open":{"type":"number","description":"Open interest at time bucket start (base units)","example":22000.1},"oi_high":{"type":"number","description":"Highest open interest during time bucket (base units)","example":22500.3},"oi_low":{"type":"number","description":"Lowest open interest during time bucket (base units)","example":21950},"oi_close":{"type":"number","description":"Open interest at time bucket end (base units)","example":22350.5}},"required":["date","oi_open","oi_high","oi_low","oi_close"]},"OptionsFlowBucketEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"trade_count":{"type":"number","description":"Total number of trades in bucket"},"buy_count":{"type":"number","description":"Number of buy trades"},"sell_count":{"type":"number","description":"Number of sell trades"},"total_amount":{"type":"number","description":"Total trade amount. Underlying-coin quantity, not contract count or USD notional. Applies to option trade amount and its flow/summary sums; do not apply another contract multiplier."},"buy_amount":{"type":"number","description":"Buy side amount. Underlying-coin quantity, not contract count or USD notional. Applies to option trade amount and its flow/summary sums; do not apply another contract multiplier."},"sell_amount":{"type":"number","description":"Sell side amount. Underlying-coin quantity, not contract count or USD notional. Applies to option trade amount and its flow/summary sums; do not apply another contract multiplier."},"total_premium_usd":{"type":"number","description":"Total premium in USD"},"buy_premium_usd":{"type":"number","description":"Buy side premium in USD"},"sell_premium_usd":{"type":"number","description":"Sell side premium in USD"},"total_notional":{"type":"number","description":"Total notional in USD"},"buy_notional":{"type":"number","description":"Buy side notional in USD"},"sell_notional":{"type":"number","description":"Sell side notional in USD"},"call_premium_usd":{"type":"number","description":"Call option premium in USD"},"put_premium_usd":{"type":"number","description":"Put option premium in USD"},"call_count":{"type":"number","description":"Number of call option trades"},"put_count":{"type":"number","description":"Number of put option trades"},"block_trade_count":{"type":"number","description":"Number of block trades"},"block_premium_usd":{"type":"number","description":"Block trade premium in USD"},"net_oi_change":{"type":"number","description":"Net open interest change"},"avg_iv":{"type":"object","description":"Trade-count mean IV in percentage points; not premium- or quantity-weighted.","nullable":true},"avg_abs_delta":{"type":"object","description":"Mean absolute trade position delta in underlying units, already size-weighted; not mean unit-option delta.","nullable":true}},"required":["date","trade_count","buy_count","sell_count","total_amount","buy_amount","sell_amount","total_premium_usd","buy_premium_usd","sell_premium_usd","total_notional","buy_notional","sell_notional","call_premium_usd","put_premium_usd","call_count","put_count","block_trade_count","block_premium_usd","net_oi_change","avg_iv","avg_abs_delta"]},"OptionsFlowActiveStrikeEntity":{"type":"object","properties":{"instrument_name":{"type":"string","description":"Instrument name"},"trade_count":{"type":"number","description":"Number of trades on this instrument"},"premium_usd":{"type":"number","description":"Total premium in USD"},"net_oi_change":{"type":"number","description":"Net open interest change"}},"required":["instrument_name","trade_count","premium_usd","net_oi_change"]},"OptionsFlowSummaryEntity":{"type":"object","properties":{"start":{"type":"string","description":"Start of aggregation window (ISO 8601 UTC)","example":"2026-03-11T10:00:00.000Z"},"end":{"type":"string","description":"End of aggregation window (ISO 8601 UTC)","example":"2026-03-18T10:00:00.000Z"},"resolution":{"type":"string","description":"Resolution used for time buckets","example":"1h"},"total_trades":{"type":"number","description":"Total number of trades in window"},"total_premium_usd":{"type":"number","description":"Total premium across all trades in USD"},"total_notional_usd":{"type":"number","description":"Total notional across all trades in USD"},"call_premium_usd":{"type":"number","description":"Total premium for call options in USD"},"put_premium_usd":{"type":"number","description":"Total premium for put options in USD"},"buy_premium_usd":{"type":"number","description":"Total premium for buy-side trades in USD"},"sell_premium_usd":{"type":"number","description":"Total premium for sell-side trades in USD"},"net_delta":{"type":"number","description":"Sum of signed trade delta in underlying units. net_delta, net_gamma and net_vega sum trade position Greeks: each calculated Greek already includes the underlying-coin amount and buy (+1) or sell (-1) sign. Do not multiply by amount or direction again. The current calculation uses Black-Scholes with zero interest/dividend rates, the trade index-price reference, time to expiry on ACT/365, and positive mark IV with trade IV as the fallback. These are traded sensitivities, not outstanding positions or dealer GEX. Delta is underlying units, gamma is the change in delta per 1 USD underlying move, and vega is USD per one volatility percentage point. Missing pricing inputs can leave historical Greeks at zero; zero does not certify that every trade had a calculable Greek."},"net_gamma":{"type":"number","description":"Sum of signed trade gamma per 1 USD move. net_delta, net_gamma and net_vega sum trade position Greeks: each calculated Greek already includes the underlying-coin amount and buy (+1) or sell (-1) sign. Do not multiply by amount or direction again. The current calculation uses Black-Scholes with zero interest/dividend rates, the trade index-price reference, time to expiry on ACT/365, and positive mark IV with trade IV as the fallback. These are traded sensitivities, not outstanding positions or dealer GEX. Delta is underlying units, gamma is the change in delta per 1 USD underlying move, and vega is USD per one volatility percentage point. Missing pricing inputs can leave historical Greeks at zero; zero does not certify that every trade had a calculable Greek."},"net_vega":{"type":"number","description":"Sum of signed trade vega in USD per vol point. net_delta, net_gamma and net_vega sum trade position Greeks: each calculated Greek already includes the underlying-coin amount and buy (+1) or sell (-1) sign. Do not multiply by amount or direction again. The current calculation uses Black-Scholes with zero interest/dividend rates, the trade index-price reference, time to expiry on ACT/365, and positive mark IV with trade IV as the fallback. These are traded sensitivities, not outstanding positions or dealer GEX. Delta is underlying units, gamma is the change in delta per 1 USD underlying move, and vega is USD per one volatility percentage point. Missing pricing inputs can leave historical Greeks at zero; zero does not certify that every trade had a calculable Greek."},"opening_trades":{"type":"number","description":"Number of opening trades (strategy starts with Opened)"},"closing_trades":{"type":"number","description":"Number of closing trades (strategy starts with Closed)"},"net_oi_change":{"type":"number","description":"Net open interest change"},"block_trade_count":{"type":"number","description":"Number of block trades"},"block_trade_premium_usd":{"type":"number","description":"Block trade premium in USD"},"most_active_strikes":{"description":"Most active instruments by premium","type":"array","items":{"$ref":"#/components/schemas/OptionsFlowActiveStrikeEntity"}}},"required":["start","end","resolution","total_trades","total_premium_usd","total_notional_usd","call_premium_usd","put_premium_usd","buy_premium_usd","sell_premium_usd","net_delta","net_gamma","net_vega","opening_trades","closing_trades","net_oi_change","block_trade_count","block_trade_premium_usd","most_active_strikes"]},"OptionsGexCatalogEntity":{"type":"object","properties":{"currency":{"type":"string","description":"Currency. USDC-margined books carry a _USDC suffix.","example":"BTC"},"exchange":{"type":"string","description":"Venue name","example":"deribit"},"market":{"type":"number","description":"Venue market id. 0 is Deribit.","example":0},"first_date":{"type":"string","description":"Earliest available aggregate GEX timestamp","example":"2025-08-25T12:30:00.000Z"},"latest_date":{"type":"string","description":"Latest available aggregate GEX timestamp","example":"2026-06-15T10:06:00.000Z"},"row_count":{"type":"number","description":"Number of aggregate GEX rows available for this currency/venue","example":289114},"spot":{"type":"number","description":"Latest spot price used for the GEX calculation","example":65651.87},"total_gex":{"type":"number","description":"Latest total dealer gamma exposure: USD change in dealer delta for a 1% spot move, weighted by moneyness and time to expiry. Positive means dealers are net long gamma under the method used since 2026-06-01 05:09 UTC; see the GEX history methodology note for earlier values.","example":-4542768.08},"net_long_gex":{"type":"number","description":"Latest positive dealer GEX contribution","example":19984373.25},"net_short_gex":{"type":"number","description":"Latest negative dealer GEX contribution","example":-24527141.33},"regime":{"type":"string","description":"Latest dealer regime classification","example":"neutral"}},"required":["currency","exchange","market","first_date","latest_date","row_count","spot","total_gex","net_long_gex","net_short_gex","regime"]},"OptionsGexIndexEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"currency":{"type":"string","description":"Currency. USDC-margined books carry a _USDC suffix.","example":"BTC"},"exchange":{"type":"string","description":"Venue name","example":"deribit"},"market":{"type":"number","description":"Venue market id. 0 is Deribit.","example":0},"spot":{"type":"number","description":"Spot price used for the GEX calculation","example":65651.87},"total_gex":{"type":"number","description":"Total dealer gamma exposure: USD change in dealer delta for a 1% spot move (gamma × spot² × 1%), weighted by moneyness and time to expiry. Positive means dealers are net long gamma under the method used since 2026-06-01 05:09 UTC; see the GEX history methodology note for earlier values.","example":-4542768.08},"net_long_gex":{"type":"number","description":"Positive dealer GEX contribution of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":19984373.25,"nullable":true},"net_short_gex":{"type":"number","description":"Negative dealer GEX contribution of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":-24527141.33,"nullable":true},"regime":{"type":"string","description":"Dealer regime classification of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":"neutral","nullable":true}},"required":["date","currency","exchange","market","spot","total_gex","net_long_gex","net_short_gex","regime"]},"OptionsGexProfileEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"currency":{"type":"string","description":"Currency. USDC-margined books carry a _USDC suffix.","example":"BTC"},"exchange":{"type":"string","description":"Venue name","example":"deribit"},"market":{"type":"number","description":"Venue market id. 0 is Deribit.","example":0},"spot":{"type":"number","description":"Spot price used for the GEX calculation","example":65651.87},"total_gex":{"type":"number","description":"Total dealer gamma exposure: USD change in dealer delta for a 1% spot move (gamma × spot² × 1%), weighted by moneyness and time to expiry. Positive means dealers are net long gamma under the method used since 2026-06-01 05:09 UTC; see the GEX history methodology note for earlier values.","example":-4542768.08},"net_long_gex":{"type":"number","description":"Positive dealer GEX contribution of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":19984373.25,"nullable":true},"net_short_gex":{"type":"number","description":"Negative dealer GEX contribution of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":-24527141.33,"nullable":true},"regime":{"type":"string","description":"Dealer regime classification of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":"neutral","nullable":true},"profile_group":{"type":"string","description":"Profile group, usually 'all_expiries' or an expiry code","example":"all_expiries"},"strike_label":{"type":"string","description":"Original profile strike token as calculated","example":"65000"},"strike":{"type":"number","description":"Numeric strike parsed from strike_label","example":65000},"gex":{"type":"number","description":"Legacy raw interpolated GEX value at this profile strike. Use weighted_gex for the dealer-model weighted profile.","example":-1200000},"raw_gex":{"type":"number","description":"Raw interpolated GEX value at this profile strike before dealer-model weighting","example":-1200000},"weighted_gex":{"type":"number","description":"Dealer-model weighted interpolated GEX value at this profile strike. Profiles before 2026-06-18 carry no separate weighting and repeat the raw value.","example":-1037880},"min_strike":{"type":"number","description":"Minimum strike in the interpolated profile domain","example":40000},"max_strike":{"type":"number","description":"Maximum strike in the interpolated profile domain","example":90000},"interpolator":{"type":"string","description":"Interpolation method used for the profile","example":"pchip"}},"required":["date","currency","exchange","market","spot","total_gex","net_long_gex","net_short_gex","regime","profile_group","strike_label","strike","gex","raw_gex","weighted_gex","min_strike","max_strike","interpolator"]},"OptionsGexRegimeChangeEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"currency":{"type":"string","description":"Currency. USDC-margined books carry a _USDC suffix.","example":"BTC"},"exchange":{"type":"string","description":"Venue name","example":"deribit"},"market":{"type":"number","description":"Venue market id. 0 is Deribit.","example":0},"spot":{"type":"number","description":"Spot price used for the GEX calculation","example":65651.87},"total_gex":{"type":"number","description":"Total dealer gamma exposure: USD change in dealer delta for a 1% spot move (gamma × spot² × 1%), weighted by moneyness and time to expiry. Positive means dealers are net long gamma under the method used since 2026-06-01 05:09 UTC; see the GEX history methodology note for earlier values.","example":-4542768.08},"net_long_gex":{"type":"number","description":"Positive dealer GEX contribution of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":19984373.25,"nullable":true},"net_short_gex":{"type":"number","description":"Negative dealer GEX contribution of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":-24527141.33,"nullable":true},"regime":{"type":"string","description":"Dealer regime classification of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":"neutral","nullable":true},"previous_regime":{"type":"string","description":"Previous regime before the transition","example":"positive"}},"required":["date","currency","exchange","market","spot","total_gex","net_long_gex","net_short_gex","regime","previous_regime"]},"OptionsGexStrikeContributionEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"currency":{"type":"string","description":"Currency. USDC-margined books carry a _USDC suffix.","example":"BTC"},"exchange":{"type":"string","description":"Venue name","example":"deribit"},"market":{"type":"number","description":"Venue market id. 0 is Deribit.","example":0},"spot":{"type":"number","description":"Spot price used for the GEX calculation","example":65651.87},"total_gex":{"type":"number","description":"Total dealer gamma exposure: USD change in dealer delta for a 1% spot move (gamma × spot² × 1%), weighted by moneyness and time to expiry. Positive means dealers are net long gamma under the method used since 2026-06-01 05:09 UTC; see the GEX history methodology note for earlier values.","example":-4542768.08},"net_long_gex":{"type":"number","description":"Positive dealer GEX contribution of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":19984373.25,"nullable":true},"net_short_gex":{"type":"number","description":"Negative dealer GEX contribution of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":-24527141.33,"nullable":true},"regime":{"type":"string","description":"Dealer regime classification of the snapshot. Null on strike and profile detail rows; read it from gex/latest or gex/history.","example":"neutral","nullable":true},"expiry":{"type":"string","description":"Expiry code, or 'all_expiries' for the aggregate view","example":"all_expiries"},"is_aggregate":{"type":"boolean","description":"True when this row belongs to the aggregate all-expiries view","example":true},"strike_label":{"type":"string","description":"Original strike token as calculated","example":"65000"},"strike":{"type":"number","description":"Numeric strike parsed from strike_label","example":65000},"contribution":{"type":"number","description":"Legacy raw GEX contribution for this strike bucket. Use weighted_contribution to reconcile with aggregate total_gex.","example":-1500000},"pos_contribution":{"type":"number","description":"Legacy raw positive GEX contribution for this strike bucket.","example":200000},"neg_contribution":{"type":"number","description":"Legacy raw negative GEX contribution for this strike bucket.","example":-1700000},"raw_contribution":{"type":"number","description":"Raw GEX contribution before dealer-model weighting","example":-1500000},"raw_pos_contribution":{"type":"number","description":"Raw positive GEX contribution before dealer-model weighting","example":200000},"raw_neg_contribution":{"type":"number","description":"Raw negative GEX contribution before dealer-model weighting","example":-1700000},"weighted_contribution":{"type":"number","description":"Dealer-model weighted GEX contribution. Sum per-expiry weighted_contribution rows to reconcile with aggregate total_gex.","example":-1297350},"weighted_pos_contribution":{"type":"number","description":"Dealer-model weighted positive GEX contribution.","example":172980},"weighted_neg_contribution":{"type":"number","description":"Dealer-model weighted negative GEX contribution.","example":-1470330},"moneyness_weight":{"type":"number","description":"Moneyness weighting used by the dealer model","example":0.93},"expiry_weight":{"type":"number","description":"Expiry weighting used by the dealer model; zero on all_expiries rows","example":0}},"required":["date","currency","exchange","market","spot","total_gex","net_long_gex","net_short_gex","regime","expiry","is_aggregate","strike_label","strike","contribution","pos_contribution","neg_contribution","raw_contribution","raw_pos_contribution","raw_neg_contribution","weighted_contribution","weighted_pos_contribution","weighted_neg_contribution","moneyness_weight","expiry_weight"]},"OptionsGexTermStructureEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"currency":{"type":"string","description":"Currency. USDC-margined books carry a _USDC suffix.","example":"BTC"},"exchange":{"type":"string","description":"Venue name","example":"deribit"},"market":{"type":"number","description":"Venue market id. 0 is Deribit.","example":0},"expiry":{"type":"string","description":"Expiry code","example":"27JUN26"},"total_gex":{"type":"number","description":"Legacy raw total GEX contribution for this expiry. Use weighted_total_gex to reconcile with aggregate total_gex.","example":-1500000},"net_long_gex":{"type":"number","description":"Legacy raw positive GEX contribution for this expiry","example":200000},"net_short_gex":{"type":"number","description":"Legacy raw negative GEX contribution for this expiry","example":-1700000},"raw_total_gex":{"type":"number","description":"Raw total GEX contribution for this expiry before dealer-model weighting","example":-1500000},"raw_net_long_gex":{"type":"number","description":"Raw positive GEX contribution for this expiry before dealer-model weighting","example":200000},"raw_net_short_gex":{"type":"number","description":"Raw negative GEX contribution for this expiry before dealer-model weighting","example":-1700000},"weighted_total_gex":{"type":"number","description":"Dealer-model weighted total GEX contribution for this expiry. Sum this field across expiries to reconcile with snapshot_total_gex.","example":-1297350},"weighted_net_long_gex":{"type":"number","description":"Dealer-model weighted positive GEX contribution for this expiry","example":172980},"weighted_net_short_gex":{"type":"number","description":"Dealer-model weighted negative GEX contribution for this expiry","example":-1470330},"strike_count":{"type":"number","description":"Number of strike buckets contributing to this expiry","example":43},"spot":{"type":"number","description":"Spot price used for this snapshot","example":65651.87},"snapshot_total_gex":{"type":"number","description":"Full-snapshot total GEX for context","example":-4542768.08}},"required":["date","currency","exchange","market","expiry","total_gex","net_long_gex","net_short_gex","raw_total_gex","raw_net_long_gex","raw_net_short_gex","weighted_total_gex","weighted_net_long_gex","weighted_net_short_gex","strike_count","spot","snapshot_total_gex"]},"MetadataResponseEntity":{"type":"object","properties":{"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-PERPETUAL"},"start_date":{"type":"string","description":"Start date of available data (ISO 8601 format)","example":"2020-01-01T00:00:00.000Z"},"end_date":{"type":"string","description":"End date of available data (ISO 8601 format)","example":"2025-11-21T23:59:00.000Z"},"total_count":{"type":"number","description":"Total count of records available","example":1500000},"total_pages":{"type":"number","description":"ceil(total_count / page size): the request limit (default 100) where the endpoint accepts one; spot metadata always uses a fixed page size of 100","example":15000}},"required":["exchange","instrument_name","start_date","end_date","total_count","total_pages"]},"PerpetualsOhlcvtEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"open":{"type":"number","description":"First open in the bucket. Trade price, or the mark price on synthetic mark-filled minutes without executions (trades_count = 0).","example":42150.5},"high":{"type":"number","description":"Maximum high in the bucket; synthetic mark-filled minutes contribute their mark price.","example":42890.75},"low":{"type":"number","description":"Minimum low in the bucket; synthetic mark-filled minutes contribute their mark price.","example":41920.25},"close":{"type":"number","description":"Last close in the bucket; trade price or, on a synthetic mark-filled minute, the mark price.","example":42500},"vwap":{"type":"number","description":"Volume-weighted average price across the interval. When total traded volume is zero, the mean of the minute reference prices is retained.","example":42350.5},"volume":{"type":"number","description":"Traded volume (buy + sell) in the bucket, in the venue-native size unit; 0 on synthetic candles.","example":2700.8},"buy_volume":{"type":"number","description":"Buy-side volume (direction = buy)","example":1500.5},"sell_volume":{"type":"number","description":"Sell-side volume (direction = sell)","example":1200.3},"trades_count":{"type":"number","description":"Number of trades (buy + sell); 0 identifies a synthetic mark-filled candle.","example":270},"buy_trades_count":{"type":"number","description":"Number of buy trades","example":150},"sell_trades_count":{"type":"number","description":"Number of sell trades","example":120},"liquidation_short_volume":{"type":"number","description":"Volume from short liquidations (forced buy orders)","example":50.25,"nullable":true},"liquidation_long_volume":{"type":"number","description":"Volume from long liquidations (forced sell orders)","example":75.5,"nullable":true},"block_trade_buy_volume":{"type":"number","description":"Volume from block trade buys","example":100,"nullable":true},"block_trade_sell_volume":{"type":"number","description":"Volume from block trade sells","example":150,"nullable":true},"mark_price":{"type":"number","description":"Mark price at the final observed minute of the bucket; not OHLC.","example":42500.5,"nullable":true},"index_price":{"type":"number","description":"Index price at the final observed minute of the bucket; not OHLC.","example":42505,"nullable":true}},"required":["date","open","high","low","close","vwap","volume","buy_volume","sell_volume","trades_count","buy_trades_count","sell_trades_count"]},"PerpetualsTickerDataEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"mark_price":{"type":"number","description":"Mark price at the final observed minute of the bucket (quote currency).","nullable":true},"index_price":{"type":"number","description":"Exchange index price at the final observed minute of the bucket.","nullable":true},"bid_price":{"type":"number","description":"Best bid price at the final observed minute of the bucket.","nullable":true},"ask_price":{"type":"number","description":"Best ask price at the final observed minute of the bucket.","nullable":true},"bid_ask_spread":{"type":"number","description":"Ask minus bid at the final observed minute of the bucket.","nullable":true},"bid_size":{"type":"number","description":"Displayed best-bid size at the final observed minute (venue-native size unit).","nullable":true},"ask_size":{"type":"number","description":"Displayed best-ask size at the final observed minute (venue-native size unit).","nullable":true},"oi":{"type":"number","description":"Open interest at the final observed minute, in base coin (venue conventions in the route definition).","nullable":true},"volume_usd_24h":{"type":"number","description":"Venue-reported rolling 24-hour USD volume at the final observed minute; not a bucket sum.","nullable":true},"open":{"type":"number","description":"Snapshot only: first trade-candle open of the minute/bucket (mark price on synthetic candles)."},"high":{"type":"number","description":"Snapshot only: maximum trade-candle high of the minute/bucket."},"low":{"type":"number","description":"Snapshot only: minimum trade-candle low of the minute/bucket."},"close":{"type":"number","description":"Snapshot only: last trade-candle close of the minute/bucket."},"vwap":{"type":"number","description":"Snapshot only: traded-volume-weighted average price of the minute/bucket."},"buy_volume":{"type":"number","description":"Snapshot only: buy volume traded in the minute/bucket (venue-native size unit)."},"sell_volume":{"type":"number","description":"Snapshot only: sell volume traded in the minute/bucket (venue-native size unit)."},"volume":{"type":"number","description":"Snapshot only: buy_volume + sell_volume."},"buy_trades_count":{"type":"number","description":"Snapshot only: number of buy trades in the minute/bucket."},"sell_trades_count":{"type":"number","description":"Snapshot only: number of sell trades in the minute/bucket."},"trades_count":{"type":"number","description":"Snapshot only: number of trades in the minute/bucket."},"next_funding_time":{"type":"number","description":"Next funding timestamp in milliseconds. Null when the venue does not report it.","example":1733788800000,"nullable":true},"funding_rate":{"type":"number","description":"Current funding rate as a decimal per venue funding interval (e.g. 0.0001 = 0.01%). Null when the venue does not report it.","example":0.0001,"nullable":true}},"required":["date","mark_price","index_price","bid_price","ask_price","bid_ask_spread","bid_size","ask_size","oi","volume_usd_24h","next_funding_time","funding_rate"]},"PerpetualsOhlcCarryEntity":{"type":"object","properties":{"timestamp":{"type":"number","description":"UTC bucket start in Unix milliseconds","example":1733788800000},"minute":{"type":"string","description":"UTC bucket start as ISO 8601. This route has no date field.","example":"2024-12-10T00:00:00.000Z"},"funding_rate_open":{"type":"number","description":"First funding_rate in the bucket (venue-native per-interval decimal)","example":0.0001,"nullable":true},"funding_rate_high":{"type":"number","description":"Highest funding_rate during the bucket","example":0.00015,"nullable":true},"funding_rate_low":{"type":"number","description":"Lowest funding_rate during the bucket","example":0.00008,"nullable":true},"funding_rate_close":{"type":"number","description":"Last funding_rate in the bucket, as a decimal per venue funding interval (e.g. hourly on Hyperliquid, 8-hourly on Binance)","example":0.00012,"nullable":true},"funding_8h_open":{"type":"number","description":"First 8-hour-normalized funding rate (decimal) in the bucket","example":0.0003,"nullable":true},"funding_8h_high":{"type":"number","description":"Highest 8-hour-normalized funding rate during the bucket","example":0.0004,"nullable":true},"funding_8h_low":{"type":"number","description":"Lowest 8-hour-normalized funding rate during the bucket","example":0.00025,"nullable":true},"funding_8h_close":{"type":"number","description":"Last 8-hour-normalized funding rate (decimal) in the bucket","example":0.00035,"nullable":true},"basis_open":{"type":"number","description":"Observed mark − index at the first source minute with a usable index","example":25.5,"nullable":true},"basis_high":{"type":"number","description":"Synthetic upper bound: maximum of mark_high − index_low; not an observed basis","example":28.1,"nullable":true},"basis_low":{"type":"number","description":"Synthetic lower bound: minimum of mark_low − index_high; not an observed basis","example":24.2,"nullable":true},"basis_close":{"type":"number","description":"Observed mark − index at the last source minute with a usable index","example":27.1,"nullable":true},"annualized_carry":{"type":"number","description":"Annualized carry rate (%) from the 8h-normalized funding rate: funding_8h_close * 3 * 365 * 100. Null when funding_8h_close is unavailable.","example":10.95,"nullable":true}},"required":["timestamp","minute"]},"BaseBookEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"bid_price_open":{"type":"number","description":"First best bid price in the bucket","example":62000.5},"bid_price_high":{"type":"number","description":"Highest best bid price during the bucket","example":62050},"bid_price_low":{"type":"number","description":"Lowest best bid price during the bucket","example":61980},"bid_price_close":{"type":"number","description":"Last best bid price in the bucket","example":62010},"ask_price_open":{"type":"number","description":"First best ask price in the bucket","example":62010.5},"ask_price_high":{"type":"number","description":"Highest best ask price during the bucket","example":62070},"ask_price_low":{"type":"number","description":"Lowest best ask price during the bucket","example":62000},"ask_price_close":{"type":"number","description":"Last best ask price in the bucket","example":62020},"bid_size_open":{"type":"number","description":"First displayed best-bid size in the bucket (venue-native size unit)","example":55.5},"bid_size_high":{"type":"number","description":"Maximum displayed best-bid size during the bucket (venue-native size unit)","example":55.5},"bid_size_low":{"type":"number","description":"Minimum displayed best-bid size during the bucket (venue-native size unit)","example":55.5},"bid_size_close":{"type":"number","description":"Last displayed best-bid size in the bucket (venue-native size unit)","example":57.2},"ask_size_open":{"type":"number","description":"First displayed best-ask size in the bucket (venue-native size unit)","example":48.3},"ask_size_high":{"type":"number","description":"Maximum displayed best-ask size during the bucket (venue-native size unit)","example":48.3},"ask_size_low":{"type":"number","description":"Minimum displayed best-ask size during the bucket (venue-native size unit)","example":48.3},"ask_size_close":{"type":"number","description":"Last displayed best-ask size in the bucket (venue-native size unit)","example":49.1},"bid_ask_spread_open":{"type":"number","description":"First ask minus bid spread in the bucket","example":10},"bid_ask_spread_high":{"type":"number","description":"Maximum ask minus bid spread during the bucket","example":10},"bid_ask_spread_low":{"type":"number","description":"Minimum ask minus bid spread during the bucket","example":10},"bid_ask_spread_close":{"type":"number","description":"Last ask minus bid spread in the bucket","example":9.5},"total_liquidity_open":{"type":"number","description":"Bid-size plus ask-size for the first complete top-of-book observation in a 1m bucket. At coarser resolutions, this is the open from the first persisted 1m bucket.","example":120.5},"total_liquidity_high":{"type":"number","description":"Maximum bid-size plus ask-size across the complete top-of-book observations in a 1m bucket. At coarser resolutions, this is the maximum of the persisted 1m highs.","example":120.5},"total_liquidity_low":{"type":"number","description":"Minimum bid-size plus ask-size across the complete top-of-book observations in a 1m bucket. At coarser resolutions, this is the minimum of the persisted 1m lows.","example":120.5},"total_liquidity_close":{"type":"number","description":"Bid-size plus ask-size for the last complete top-of-book observation in a 1m bucket. At coarser resolutions, this is the close from the last persisted 1m bucket.","example":122.2},"total_liquidity_avg":{"type":"number","description":"Arithmetic mean of bid-size plus ask-size over complete top-of-book observations. At 1m, a source update contributes only when both sizes are present in that same update; open, low, high, close, and average use that identical sample population. Coarser resolutions use the unweighted arithmetic mean of the available persisted 1m averages and are not derived from low and high.","example":121.3}},"required":["date","bid_price_open","bid_price_high","bid_price_low","bid_price_close","ask_price_open","ask_price_high","ask_price_low","ask_price_close","bid_size_open","bid_size_high","bid_size_low","bid_size_close","ask_size_open","ask_size_high","ask_size_low","ask_size_close","bid_ask_spread_open","bid_ask_spread_high","bid_ask_spread_low","bid_ask_spread_close","total_liquidity_open","total_liquidity_high","total_liquidity_low","total_liquidity_close","total_liquidity_avg"]},"BaseL2OrderbookEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"instrument_type":{"type":"string","description":"Instrument type (future or perpetual)","example":"future"},"maturity":{"type":"string","description":"Maturity date string (null for perpetuals)","example":"23OCT26","nullable":true},"days_to_expiry":{"type":"number","description":"Days until expiry (null for perpetuals)","example":90.5,"nullable":true},"bid_liq_10_open":{"type":"number","description":"Sum of top-10 bid sizes at bucket open","example":0.301},"bid_liq_10_high":{"type":"number","description":"Highest sum of top-10 bid sizes during bucket","example":0.55},"bid_liq_10_low":{"type":"number","description":"Lowest sum of top-10 bid sizes during bucket","example":0.15},"bid_liq_10_close":{"type":"number","description":"Sum of top-10 bid sizes at bucket close","example":0.42},"bid_liq_10_avg":{"type":"number","description":"Average sum of top-10 bid sizes during bucket","example":0.35},"bid_liq_20_open":{"type":"number","description":"Sum of top-20 bid sizes at bucket open","example":0.359},"bid_liq_20_high":{"type":"number","description":"Highest sum of top-20 bid sizes during bucket","example":0.8},"bid_liq_20_low":{"type":"number","description":"Lowest sum of top-20 bid sizes during bucket","example":0.2},"bid_liq_20_close":{"type":"number","description":"Sum of top-20 bid sizes at bucket close","example":0.5},"bid_liq_20_avg":{"type":"number","description":"Average sum of top-20 bid sizes during bucket","example":0.45},"bid_liq_50_open":{"type":"number","description":"Sum of top-50 bid sizes at bucket open","example":7.831},"bid_liq_50_high":{"type":"number","description":"Highest sum of top-50 bid sizes during bucket","example":10.5},"bid_liq_50_low":{"type":"number","description":"Lowest sum of top-50 bid sizes during bucket","example":5.2},"bid_liq_50_close":{"type":"number","description":"Sum of top-50 bid sizes at bucket close","example":8.1},"bid_liq_50_avg":{"type":"number","description":"Average sum of top-50 bid sizes during bucket","example":7.5},"bid_liq_100_open":{"type":"number","description":"Sum of all 100 bid sizes at bucket open","example":12.891},"bid_liq_100_high":{"type":"number","description":"Highest sum of all 100 bid sizes during bucket","example":18},"bid_liq_100_low":{"type":"number","description":"Lowest sum of all 100 bid sizes during bucket","example":9},"bid_liq_100_close":{"type":"number","description":"Sum of all 100 bid sizes at bucket close","example":14.5},"bid_liq_100_avg":{"type":"number","description":"Average sum of all 100 bid sizes during bucket","example":13.2},"ask_liq_10_open":{"type":"number","description":"Sum of top-10 ask sizes at bucket open","example":5.375},"ask_liq_10_high":{"type":"number","description":"Highest sum of top-10 ask sizes during bucket","example":6.2},"ask_liq_10_low":{"type":"number","description":"Lowest sum of top-10 ask sizes during bucket","example":4.1},"ask_liq_10_close":{"type":"number","description":"Sum of top-10 ask sizes at bucket close","example":5.1},"ask_liq_10_avg":{"type":"number","description":"Average sum of top-10 ask sizes during bucket","example":5},"ask_liq_20_open":{"type":"number","description":"Sum of top-20 ask sizes at bucket open","example":6.398},"ask_liq_20_high":{"type":"number","description":"Highest sum of top-20 ask sizes during bucket","example":8},"ask_liq_20_low":{"type":"number","description":"Lowest sum of top-20 ask sizes during bucket","example":4.5},"ask_liq_20_close":{"type":"number","description":"Sum of top-20 ask sizes at bucket close","example":6},"ask_liq_20_avg":{"type":"number","description":"Average sum of top-20 ask sizes during bucket","example":5.8},"ask_liq_50_open":{"type":"number","description":"Sum of top-50 ask sizes at bucket open","example":18.966},"ask_liq_50_high":{"type":"number","description":"Highest sum of top-50 ask sizes during bucket","example":22},"ask_liq_50_low":{"type":"number","description":"Lowest sum of top-50 ask sizes during bucket","example":15},"ask_liq_50_close":{"type":"number","description":"Sum of top-50 ask sizes at bucket close","example":19.5},"ask_liq_50_avg":{"type":"number","description":"Average sum of top-50 ask sizes during bucket","example":18.2},"ask_liq_100_open":{"type":"number","description":"Sum of all 100 ask sizes at bucket open","example":40.834},"ask_liq_100_high":{"type":"number","description":"Highest sum of all 100 ask sizes during bucket","example":50},"ask_liq_100_low":{"type":"number","description":"Lowest sum of all 100 ask sizes during bucket","example":30},"ask_liq_100_close":{"type":"number","description":"Sum of all 100 ask sizes at bucket close","example":42},"ask_liq_100_avg":{"type":"number","description":"Average sum of all 100 ask sizes during bucket","example":39.5},"imbalance_10_open":{"type":"number","description":"Order book imbalance at depth 10 at bucket open. Range [-1,1]: negative = ask-heavy, positive = bid-heavy","example":-0.894},"imbalance_10_high":{"type":"number","description":"Highest imbalance at depth 10 during bucket","example":-0.5},"imbalance_10_low":{"type":"number","description":"Lowest imbalance at depth 10 during bucket","example":-0.95},"imbalance_10_close":{"type":"number","description":"Order book imbalance at depth 10 at bucket close","example":-0.82},"imbalance_10_avg":{"type":"number","description":"Average imbalance at depth 10 during bucket","example":-0.78},"imbalance_20_open":{"type":"number","description":"Order book imbalance at depth 20 at bucket open","example":-0.894},"imbalance_20_high":{"type":"number","description":"Highest imbalance at depth 20 during bucket","example":-0.5},"imbalance_20_low":{"type":"number","description":"Lowest imbalance at depth 20 during bucket","example":-0.95},"imbalance_20_close":{"type":"number","description":"Order book imbalance at depth 20 at bucket close","example":-0.82},"imbalance_20_avg":{"type":"number","description":"Average imbalance at depth 20 during bucket","example":-0.78},"imbalance_50_open":{"type":"number","description":"Order book imbalance at depth 50 at bucket open","example":-0.416},"imbalance_50_high":{"type":"number","description":"Highest imbalance at depth 50 during bucket","example":-0.1},"imbalance_50_low":{"type":"number","description":"Lowest imbalance at depth 50 during bucket","example":-0.6},"imbalance_50_close":{"type":"number","description":"Order book imbalance at depth 50 at bucket close","example":-0.35},"imbalance_50_avg":{"type":"number","description":"Average imbalance at depth 50 during bucket","example":-0.38},"imbalance_100_open":{"type":"number","description":"Order book imbalance at depth 100 at bucket open","example":-0.52},"imbalance_100_high":{"type":"number","description":"Highest imbalance at depth 100 during bucket","example":-0.2},"imbalance_100_low":{"type":"number","description":"Lowest imbalance at depth 100 during bucket","example":-0.7},"imbalance_100_close":{"type":"number","description":"Order book imbalance at depth 100 at bucket close","example":-0.45},"imbalance_100_avg":{"type":"number","description":"Average imbalance at depth 100 during bucket","example":-0.48},"microprice_open":{"type":"number","description":"Microprice (top-of-book size-weighted mid) at bucket open","example":89967.9},"microprice_high":{"type":"number","description":"Highest microprice during bucket","example":89975},"microprice_low":{"type":"number","description":"Lowest microprice during bucket","example":89960},"microprice_close":{"type":"number","description":"Microprice at bucket close","example":89970.5},"microprice_avg":{"type":"number","description":"Average microprice; coarser buckets average the minute averages","example":89968.2},"snapshot_count":{"type":"number","description":"Number of order-book snapshots aggregated in this bucket (summed across minutes)","example":60}},"required":["date","bid_liq_10_open","bid_liq_10_high","bid_liq_10_low","bid_liq_10_close","bid_liq_10_avg","bid_liq_20_open","bid_liq_20_high","bid_liq_20_low","bid_liq_20_close","bid_liq_20_avg","bid_liq_50_open","bid_liq_50_high","bid_liq_50_low","bid_liq_50_close","bid_liq_50_avg","bid_liq_100_open","bid_liq_100_high","bid_liq_100_low","bid_liq_100_close","bid_liq_100_avg","ask_liq_10_open","ask_liq_10_high","ask_liq_10_low","ask_liq_10_close","ask_liq_10_avg","ask_liq_20_open","ask_liq_20_high","ask_liq_20_low","ask_liq_20_close","ask_liq_20_avg","ask_liq_50_open","ask_liq_50_high","ask_liq_50_low","ask_liq_50_close","ask_liq_50_avg","ask_liq_100_open","ask_liq_100_high","ask_liq_100_low","ask_liq_100_close","ask_liq_100_avg","imbalance_10_open","imbalance_10_high","imbalance_10_low","imbalance_10_close","imbalance_10_avg","imbalance_20_open","imbalance_20_high","imbalance_20_low","imbalance_20_close","imbalance_20_avg","imbalance_50_open","imbalance_50_high","imbalance_50_low","imbalance_50_close","imbalance_50_avg","imbalance_100_open","imbalance_100_high","imbalance_100_low","imbalance_100_close","imbalance_100_avg","microprice_open","microprice_high","microprice_low","microprice_close","microprice_avg","snapshot_count"]},"BaseL2OrderbookRawEntity":{"type":"object","properties":{"timestamp":{"type":"number","description":"Unix timestamp in milliseconds","example":1769066457868},"date":{"type":"string","description":"Snapshot time as ISO 8601 UTC truncated to whole seconds; use timestamp for millisecond ordering","example":"2026-01-22T07:20:57.000Z"},"exchange":{"type":"string","description":"Exchange name","example":"bybit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTCUSDT"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"instrument_type":{"type":"string","description":"Instrument type","example":"perpetual"},"maturity":{"type":"object","description":"Maturity date string","example":"23OCT26","nullable":true},"days_to_expiry":{"type":"object","description":"Days until expiry","example":90,"nullable":true},"margin_type":{"type":"object","description":"Margin type. Null when not recorded.","example":"linear","nullable":true},"multiplier":{"type":"object","description":"Contract multiplier. Null when not recorded.","example":1,"nullable":true},"depth":{"type":"number","description":"Number of depth levels (max 100)","example":100},"bids":{"type":"array","description":"Bid levels ordered best to worst (max 100)","example":[{"price":89967.9,"size":0.169},{"price":89967.8,"size":0.002}],"items":{"type":"object","properties":{"price":{"type":"number"},"size":{"type":"number"}}}},"asks":{"type":"array","description":"Ask levels ordered best to worst (max 100)","example":[{"price":89968,"size":3.085},{"price":89968.2,"size":0.002}],"items":{"type":"object","properties":{"price":{"type":"number"},"size":{"type":"number"}}}},"bid_liquidity_10":{"type":"number","description":"Sum of top 10 bid sizes","example":0.301},"ask_liquidity_10":{"type":"number","description":"Sum of top 10 ask sizes","example":5.375},"bid_liquidity_20":{"type":"number","description":"Sum of top 20 bid sizes","example":0.359},"ask_liquidity_20":{"type":"number","description":"Sum of top 20 ask sizes","example":6.398},"bid_liquidity_50":{"type":"number","description":"Sum of top 50 bid sizes","example":7.831},"ask_liquidity_50":{"type":"number","description":"Sum of top 50 ask sizes","example":18.966},"bid_liquidity_100":{"type":"number","description":"Sum of all 100 bid sizes","example":12.891},"ask_liquidity_100":{"type":"number","description":"Sum of all 100 ask sizes","example":40.834},"imbalance_10":{"type":"number","description":"Order book imbalance at depth 10 (-1 to 1)","example":-0.894},"imbalance_20":{"type":"number","description":"Order book imbalance at depth 20 (-1 to 1)","example":-0.894},"imbalance_50":{"type":"number","description":"Order book imbalance at depth 50 (-1 to 1)","example":-0.416},"imbalance_100":{"type":"number","description":"Order book imbalance at depth 100 (-1 to 1)","example":-0.52},"microprice":{"type":"number","description":"Top-of-book size-weighted mid: (bid × ask_size + ask × bid_size) / (bid_size + ask_size)","example":89967.905}},"required":["timestamp","date","exchange","instrument_name","currency","instrument_type","depth","bids","asks","bid_liquidity_10","ask_liquidity_10","bid_liquidity_20","ask_liquidity_20","bid_liquidity_50","ask_liquidity_50","bid_liquidity_100","ask_liquidity_100","imbalance_10","imbalance_20","imbalance_50","imbalance_100","microprice"]},"FuturesOhlcrefDataEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"mark_price_open":{"type":"number","description":"Mark price at time bucket start","example":62100.5},"mark_price_high":{"type":"number","description":"Highest mark price during time bucket","example":62150},"mark_price_low":{"type":"number","description":"Lowest mark price during time bucket","example":62080},"mark_price_close":{"type":"number","description":"Mark price at time bucket end","example":62110},"underlying_price":{"type":"number","description":"Always null on perpetual and dated-futures reference prices; use index_price_* for the exchange index.","example":62080.5,"nullable":true},"index_price_open":{"type":"number","description":"Index price at time bucket start","example":62050.2,"nullable":true},"index_price_high":{"type":"number","description":"Highest index price during time bucket","example":62100.3,"nullable":true},"index_price_low":{"type":"number","description":"Lowest index price during time bucket","example":62040.1,"nullable":true},"index_price_close":{"type":"number","description":"Index price at time bucket end","example":62080.5,"nullable":true}},"required":["date","mark_price_open","mark_price_high","mark_price_low","mark_price_close"]},"FuturesTradeEntity":{"type":"object","properties":{"instrument_name":{"type":"string","description":"Instrument identifier","example":"BTC-23OCT26"},"timestamp":{"type":"number","description":"Unix timestamp in milliseconds","example":1234567890123},"date":{"type":"string","description":"Venue trade event time as 'YYYY-MM-DD HH:MM:SS.mmm' in UTC (space separator, no 'Z'; not ISO 8601). Use timestamp for machine parsing.","example":"2026-10-02 13:01:41.954"},"trade_id":{"type":"string","description":"Unique trade identifier","example":"trade_123456"},"block_trade_id":{"type":"string","description":"Block trade identifier if applicable","example":"block_123"},"combo_id":{"type":"string","description":"Combo trade identifier if applicable","example":"combo_123"},"combo_trade_id":{"type":"string","description":"Combo trade ID if part of combo","example":"combo_trade_123"},"strategy":{"type":"string","description":"Trading strategy identifier","example":"strategy_1"},"direction":{"type":"string","description":"Trade direction","enum":["buy","sell"],"example":"buy"},"tick_direction":{"type":"object","description":"Tick direction indicator","example":1,"nullable":true},"amount":{"type":"number","description":"Trade amount in the venue-native unit: USD on Deribit inverse, USDT notional on Binance USDT-M; other venues unverified. Not converted across venues.","example":50},"price":{"type":"number","description":"Trade execution price","example":45000.5},"index_price":{"type":"object","description":"Index price at time of trade","example":45010,"nullable":true},"oi_change":{"type":"object","description":"Change in open interest","example":100,"nullable":true},"open_interest":{"type":"object","description":"Open interest after the trade as reported by the venue (USD on Deribit inverse). Null when the venue reports no trade-level open interest.","example":806346290,"nullable":true},"oi_before":{"type":"object","description":"Open interest before trade","example":9900,"nullable":true},"maturity":{"type":"object","description":"Maturity code, or 'PERPETUAL' for perpetual swaps","example":"25DEC26"},"days_to_expiry":{"type":"object","description":"Fractional days to expiry (dated futures). Omitted when not applicable.","example":84.8},"basis":{"type":"object","description":"Trade price minus index price. Null when no usable index price is attached.","example":23.07,"nullable":true},"funding":{"type":"object","description":"Perpetual funding rate attached to the trade, as a decimal. Omitted when not reported.","example":0.00005811}},"required":["instrument_name","timestamp","date","trade_id","direction","amount","price"]},"LiquidationEntity":{"type":"object","properties":{"instrument_name":{"type":"string","description":"Instrument identifier","example":"BTCUSDT"},"timestamp":{"type":"number","description":"Unix timestamp in milliseconds","example":1234567890123},"date":{"type":"string","description":"ISO 8601 UTC event time derived from timestamp","example":"2025-01-15T14:30:00.000Z"},"exchange":{"type":"string","description":"Exchange name","example":"binance"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"direction":{"type":"string","description":"Liquidation order direction (buy = short squeeze, sell = long liquidation)","enum":["buy","sell"],"example":"sell"},"position_side":{"type":"string","description":"Position side being liquidated","enum":["long","short"],"example":"long"},"category":{"type":"string","description":"Liquidation category","example":"forced"},"price":{"type":"number","description":"Execution price","example":68187.4},"amount":{"type":"number","description":"Venue-native liquidation quantity (contracts or coin depending on venue; per-venue convention unverified). Use amount_base or amount_usd to compare venues.","example":0.075},"amount_base":{"type":"object","description":"Amount in base currency","example":0.075,"nullable":true},"amount_usd":{"type":"object","description":"USD value: price × amount_base. min_amount_usd filters on this field.","example":5114.05,"nullable":true},"mark_price":{"type":"object","description":"Mark price at time of liquidation","example":68187.5,"nullable":true},"index_price":{"type":"object","description":"Index price at time of liquidation","example":68222.5,"nullable":true},"margin_type":{"type":"string","description":"Margin type","example":"linear"},"maturity":{"type":"object","description":"Maturity date (null for perpetuals)","example":"23OCT26","nullable":true},"days_to_expiry":{"type":"object","description":"Days to expiry (null for perpetuals)","example":90,"nullable":true},"trade_id":{"type":"object","description":"Trade identifier","nullable":true},"order_id":{"type":"object","description":"Order identifier","nullable":true}},"required":["instrument_name","timestamp","date","exchange","currency","direction","position_side","category","price","amount"]},"ObservedDataCoverageEntity":{"type":"object","properties":{"source_id":{"type":"string","description":"Stable identifier for the endpoint source mapping used to classify this response.","example":"perpetuals.liquidations"},"exchange_supported":{"type":"object","description":"Whether the requested exchange is served by this endpoint.","example":true},"instrument_eligible":{"type":"object","description":"Whether the exact exchange/instrument/product selector exists in authoritative instrument metadata or historical rows. Null when no instrument selector was supplied or eligibility was not evaluated.","example":true,"nullable":true},"earliest_observed_at":{"type":"object","description":"Earliest stored row observed for the selected endpoint scope. This is an observed-history boundary, not a completeness watermark.","example":"2025-09-26T13:13:29.578Z","nullable":true},"latest_observed_at":{"type":"object","description":"Latest stored row observed for the selected endpoint scope. This is an observed-history boundary, not a completeness watermark or maximum-lag guarantee.","example":"2026-08-07T08:10:00.000Z","nullable":true}},"required":["source_id","exchange_supported"]},"DataAvailabilityPaginationMetaEntity":{"type":"object","properties":{"next_cursor":{"type":"string","description":"Pagination cursor for fetching the next page of results. Pass this value as the cursor parameter in the next request. Null indicates no more pages.","example":"eyJpZCI6MTIzNDU2NzgsInRzIjoxNjQwOTk1MjAwfQ==","nullable":true},"has_more":{"type":"boolean","description":"True when another page exists for the same filters and sort direction. This is derived with a one-bucket lookahead rather than inferred from the number of rows returned."},"empty_reason":{"type":"string","description":"Machine-readable explanation when data is empty. Null when rows are returned. outside_retention means the endpoint keeps a rolling retention window and the requested interval ends before it; outside_entitlement means the rows exist but the requested interval starts before the history the API key is entitled to (see entitlement.required_product); outside_coverage means the interval ends before the earliest stored row; no_matching_data means the selector is eligible and the interval overlaps observed coverage, but no stored rows matched all request filters.","enum":["unsupported_exchange","ineligible_instrument","outside_retention","outside_entitlement","outside_coverage","no_matching_data","classification_unavailable"],"nullable":true,"example":"no_matching_data"},"coverage":{"description":"Observed source coverage used to classify an empty response. Its timestamps are not source-completeness watermarks.","allOf":[{"$ref":"#/components/schemas/ObservedDataCoverageEntity"}]},"completeness":{"type":"object","description":"Gap-aware persistence-completeness interval for closed 1m source rows. Every minute in the half-open interval is persisted; a missing minute stops certification. complete_through is the exclusive monotonic boundary, and published corrections or backfills may still revise earlier values.","example":{"status":"available","certification":"contiguous_persisted_minutes","complete_from":"2026-08-08T06:20:00.000Z","complete_through":"2026-08-08T06:25:00.000Z","complete_from_inclusive":true,"complete_through_inclusive":false,"monotonic":true,"monotonic_boundary":"complete_through","revisions_possible":true,"certified_at":"2026-08-08T06:20:06.000Z","updated_at":"2026-08-08T06:25:06.000Z","unavailable_reason":null,"scope":{"endpoint_id":"perpetuals.ohlcvt","source_ids":["perpetuals.ohlcvt"],"exchange":"deribit","instrument_name":"BTC-PERPETUAL"}}},"entitlement":{"type":"object","description":"History the API key may query, derived from its plan. history_months is null when unrestricted. Present only on deployments that publish entitlement metadata.","example":{"history_months":3,"source":"plan","required_product":null}},"generation":{"type":"object","description":"For endpoints whose stored series changed meaning at boundary_at: the labels of each generation and which one the requested interval falls in.","example":{"boundary_at":"2026-09-03T00:00:00.000Z","before":"large_trades_only","after":"full_raw","requested":"after"}}},"required":["next_cursor"]},"FuturesOhlcvtEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"open":{"type":"number","description":"First open in the bucket. Trade price, or the mark price on synthetic mark-filled minutes without executions (trades_count = 0).","example":42150.5},"high":{"type":"number","description":"Maximum high in the bucket; synthetic mark-filled minutes contribute their mark price.","example":42890.75},"low":{"type":"number","description":"Minimum low in the bucket; synthetic mark-filled minutes contribute their mark price.","example":41920.25},"close":{"type":"number","description":"Last close in the bucket; trade price or, on a synthetic mark-filled minute, the mark price.","example":42500},"vwap":{"type":"number","description":"Volume-weighted average price across the interval. When total traded volume is zero, the mean of the minute reference prices is retained.","example":42350.5},"volume":{"type":"number","description":"Traded volume (buy + sell) in the bucket, in the venue-native size unit; 0 on synthetic candles.","example":2700.8},"buy_volume":{"type":"number","description":"Buy-side volume (direction = buy)","example":1500.5},"sell_volume":{"type":"number","description":"Sell-side volume (direction = sell)","example":1200.3},"trades_count":{"type":"number","description":"Number of trades (buy + sell); 0 identifies a synthetic mark-filled candle.","example":270},"buy_trades_count":{"type":"number","description":"Number of buy trades","example":150},"sell_trades_count":{"type":"number","description":"Number of sell trades","example":120},"liquidation_short_volume":{"type":"number","description":"Volume from short liquidations (forced buy orders)","example":50.25,"nullable":true},"liquidation_long_volume":{"type":"number","description":"Volume from long liquidations (forced sell orders)","example":75.5,"nullable":true},"block_trade_buy_volume":{"type":"number","description":"Volume from block trade buys","example":100,"nullable":true},"block_trade_sell_volume":{"type":"number","description":"Volume from block trade sells","example":150,"nullable":true},"mark_price":{"type":"number","description":"Mark price at the final observed minute of the bucket; not OHLC.","example":42500.5,"nullable":true},"index_price":{"type":"number","description":"Index price at the final observed minute of the bucket; not OHLC.","example":42505,"nullable":true},"days_to_expiry":{"type":"number","description":"Fractional days until expiry for dated futures, taken from one source minute of the bucket (not necessarily its close). For perpetual instruments the field is not applicable and may be omitted or returned as null; clients should treat those forms as equivalent.","example":90.5,"nullable":true}},"required":["date","open","high","low","close","vwap","volume","buy_volume","sell_volume","trades_count","buy_trades_count","sell_trades_count"]},"FuturesTickerDataEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"mark_price":{"type":"number","description":"Mark price at the final observed minute of the bucket (quote currency).","nullable":true},"index_price":{"type":"number","description":"Exchange index price at the final observed minute of the bucket.","nullable":true},"bid_price":{"type":"number","description":"Best bid price at the final observed minute of the bucket.","nullable":true},"ask_price":{"type":"number","description":"Best ask price at the final observed minute of the bucket.","nullable":true},"bid_ask_spread":{"type":"number","description":"Ask minus bid at the final observed minute of the bucket.","nullable":true},"bid_size":{"type":"number","description":"Displayed best-bid size at the final observed minute (venue-native size unit).","nullable":true},"ask_size":{"type":"number","description":"Displayed best-ask size at the final observed minute (venue-native size unit).","nullable":true},"oi":{"type":"number","description":"Open interest at the final observed minute, in base coin (venue conventions in the route definition).","nullable":true},"volume_usd_24h":{"type":"number","description":"Venue-reported rolling 24-hour USD volume at the final observed minute; not a bucket sum.","nullable":true},"open":{"type":"number","description":"Snapshot only: first trade-candle open of the minute/bucket (mark price on synthetic candles)."},"high":{"type":"number","description":"Snapshot only: maximum trade-candle high of the minute/bucket."},"low":{"type":"number","description":"Snapshot only: minimum trade-candle low of the minute/bucket."},"close":{"type":"number","description":"Snapshot only: last trade-candle close of the minute/bucket."},"vwap":{"type":"number","description":"Snapshot only: traded-volume-weighted average price of the minute/bucket."},"buy_volume":{"type":"number","description":"Snapshot only: buy volume traded in the minute/bucket (venue-native size unit)."},"sell_volume":{"type":"number","description":"Snapshot only: sell volume traded in the minute/bucket (venue-native size unit)."},"volume":{"type":"number","description":"Snapshot only: buy_volume + sell_volume."},"buy_trades_count":{"type":"number","description":"Snapshot only: number of buy trades in the minute/bucket."},"sell_trades_count":{"type":"number","description":"Snapshot only: number of sell trades in the minute/bucket."},"trades_count":{"type":"number","description":"Snapshot only: number of trades in the minute/bucket."},"days_to_expiry":{"type":"number","description":"Fractional days until expiry at the final observed minute of the bucket."}},"required":["date","mark_price","index_price","bid_price","ask_price","bid_ask_spread","bid_size","ask_size","oi","volume_usd_24h"]},"FuturesOhlcCarryEntity":{"type":"object","properties":{"timestamp":{"type":"number","description":"UTC bucket start in Unix milliseconds","example":1733788800000},"minute":{"type":"string","description":"UTC bucket start as ISO 8601. This route has no date field.","example":"2024-12-10T00:00:00.000Z"},"basis_open":{"type":"number","description":"Observed mark − index at the first source minute with a usable index","example":25.5,"nullable":true},"basis_high":{"type":"number","description":"Synthetic upper bound: maximum of mark_high − index_low; not an observed basis","example":28.1,"nullable":true},"basis_low":{"type":"number","description":"Synthetic lower bound: minimum of mark_low − index_high; not an observed basis","example":24.2,"nullable":true},"basis_close":{"type":"number","description":"Observed mark − index at the last source minute with a usable index","example":27.1,"nullable":true},"days_to_expiry":{"type":"number","description":"Fractional days until expiry at the last source minute of the bucket","example":45.5,"nullable":true},"annualized_carry":{"type":"number","description":"Annualized carry (%): basis_close / final index price × 365 / days_to_expiry × 100. Null when the index or days_to_expiry is missing or non-positive.","example":12.5,"nullable":true}},"required":["timestamp","minute"]},"VolSurfaceEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"maturity":{"type":"string","description":"Maturity date string","example":"23OCT26"},"days_to_expiry":{"type":"number","description":"Days until expiry","example":25.5},"underlying_price":{"type":"number","description":"Underlying asset price","example":103722.83},"atm_iv":{"type":"number","description":"At-the-money implied volatility (call with delta closest to 0.5)","example":47.62,"nullable":true},"call_25d_iv":{"type":"number","description":"25-delta call implied volatility","example":43.8,"nullable":true},"put_25d_iv":{"type":"number","description":"25-delta put implied volatility","example":52.1,"nullable":true},"skew_25d":{"type":"number","description":"25-delta skew (put_25d_iv - call_25d_iv); positive means puts are richer","example":8.3,"nullable":true},"butterfly_25d":{"type":"number","description":"25-delta butterfly ((call_25d_iv + put_25d_iv) / 2 - atm_iv)","example":0.33,"nullable":true},"call_10d_iv":{"type":"number","description":"10-delta call implied volatility","example":40.1,"nullable":true},"put_10d_iv":{"type":"number","description":"10-delta put implied volatility","example":58.3,"nullable":true},"skew_10d":{"type":"number","description":"10-delta skew (put_10d_iv - call_10d_iv); positive means puts are richer","example":18.2,"nullable":true},"butterfly_10d":{"type":"number","description":"10-delta butterfly ((call_10d_iv + put_10d_iv) / 2 - atm_iv)","example":1.58,"nullable":true}},"required":["date","exchange","currency","maturity","days_to_expiry","underlying_price"]},"TermStructureEntity":{"type":"object","properties":{"date":{"type":"string","description":"ISO 8601 timestamp for this data point (present in time-series mode only)","example":"2026-02-01T12:00:00.000Z","nullable":true},"tenor":{"type":"number","description":"Constant-maturity tenor in days","example":30},"atm_iv":{"type":"number","description":"Interpolated ATM implied volatility at this tenor","example":38.55,"nullable":true},"call_25d_iv":{"type":"number","description":"Interpolated 25-delta call implied volatility at this tenor","example":36.2,"nullable":true},"put_25d_iv":{"type":"number","description":"Interpolated 25-delta put implied volatility at this tenor","example":41.9,"nullable":true},"skew_25d":{"type":"number","description":"25-delta skew (put_25d_iv - call_25d_iv); positive means puts are richer","example":5.7,"nullable":true},"butterfly_25d":{"type":"number","description":"25-delta butterfly ((call_25d_iv + put_25d_iv) / 2 - atm_iv)","example":0.5,"nullable":true},"call_10d_iv":{"type":"number","description":"Interpolated 10-delta call implied volatility at this tenor","example":33.1,"nullable":true},"put_10d_iv":{"type":"number","description":"Interpolated 10-delta put implied volatility at this tenor","example":48.5,"nullable":true},"skew_10d":{"type":"number","description":"10-delta skew (put_10d_iv - call_10d_iv); positive means puts are richer","example":15.4,"nullable":true},"butterfly_10d":{"type":"number","description":"10-delta butterfly ((call_10d_iv + put_10d_iv) / 2 - atm_iv)","example":2.25,"nullable":true}},"required":["tenor"]},"SpotOhlcvtEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"instrument_name":{"type":"string","description":"Instrument name","example":"BTC-23OCT26"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"open":{"type":"number","description":"Open of the bucket (first stored minute). Flat zero-volume candles carry a price without a trade, so this is not evidence of an execution","example":42150.5},"high":{"type":"number","description":"Highest price in the bucket (maximum of the minute highs)","example":42890.75},"low":{"type":"number","description":"Lowest price in the bucket (minimum of the minute lows)","example":41920.25},"close":{"type":"number","description":"Close of the bucket (last stored minute)","example":42500},"vwap":{"type":"number","description":"Base-volume-weighted average price; a bucket with zero volume reports the mean of its minute VWAP values","example":42350.5},"volume":{"type":"number","description":"Total volume in base currency (buy + sell)","example":2700.8},"buy_volume":{"type":"number","description":"Buy-side volume in base currency","example":1500.5},"sell_volume":{"type":"number","description":"Sell-side volume in base currency","example":1200.3},"quote_volume":{"type":"number","description":"Total volume in quote currency (buy + sell)","example":114500000},"buy_quote_volume":{"type":"number","description":"Buy-side volume in quote currency","example":63500000},"sell_quote_volume":{"type":"number","description":"Sell-side volume in quote currency","example":51000000},"trades_count":{"type":"number","description":"Total number of trades (buy + sell)","example":270},"buy_trades_count":{"type":"number","description":"Number of buy trades","example":150},"sell_trades_count":{"type":"number","description":"Number of sell trades","example":120},"first_trade_id":{"type":"string","description":"First trade ID in the time bucket","example":"trade_100001"},"last_trade_id":{"type":"string","description":"Last trade ID in the time bucket","example":"trade_100270"},"data_source":{"type":"string","description":"Data source identifier","example":"rest"},"quote_currency":{"type":"string","description":"Quote currency","example":"USDT"}},"required":["date","open","high","low","close","vwap","volume","buy_volume","sell_volume","quote_volume","buy_quote_volume","sell_quote_volume","trades_count","buy_trades_count","sell_trades_count","first_trade_id","last_trade_id","data_source","quote_currency"]},"RealizedVolatilityEntity":{"type":"object","properties":{"date":{"type":"string","description":"Date in ISO 8601 format (UTC)","example":"2024-12-10T00:00:00.000Z","format":"date-time"},"exchange":{"type":"string","description":"Exchange name","example":"deribit"},"currency":{"type":"string","description":"Base currency","example":"BTC"},"instrument_name":{"type":"string","description":"Full instrument identifier","example":"BTC-PERPETUAL"},"frequency":{"type":"string","description":"Sampling frequency used to compute realised volatility","example":"daily"},"window_days":{"type":"number","description":"Realised volatility lookback window in days","example":30},"estimator":{"type":"string","description":"Realised volatility estimator","example":"close_to_close"},"rv_annualized":{"type":"number","description":"Annualized realised volatility, expressed as a percentage (e.g. 38.76 = 38.76% annualised vol).","example":38.76},"sample_count":{"type":"number","description":"Number of samples used to compute the metric","example":30}},"required":["date","exchange","currency","instrument_name","frequency","window_days","estimator","rv_annualized","sample_count"]},"VolSurfaceCatalogEntity":{"type":"object","properties":{"exchange":{"type":"string","example":"deribit"},"currency":{"type":"string","example":"BTC"},"margin":{"type":"string","example":"inverse","enum":["inverse","linear"]},"model":{"type":"string","example":"svi"},"date":{"type":"object","example":"2026-06-08T12:00:00.000Z","format":"date-time"},"index_price":{"type":"object","example":104000.25},"n_slices":{"type":"object","example":10},"n_forward_knots":{"type":"object","example":7}},"required":["exchange","currency","margin","model","date","index_price","n_slices","n_forward_knots"]},"VolSurfaceSnapshotEntity":{"type":"object","properties":{"date":{"type":"object","example":"2026-06-08T12:00:00.000Z","format":"date-time"},"exchange":{"type":"string","example":"deribit"},"currency":{"type":"string","example":"BTC"},"margin":{"type":"string","example":"inverse","enum":["inverse","linear"]},"model":{"type":"string","example":"svi"},"index_price":{"type":"object","example":104000.25},"n_slices":{"type":"object","example":10},"n_forward_knots":{"type":"object","example":7},"calendar_arb_pairs_checked":{"type":"object","example":9},"calendar_arb_violating_pairs":{"type":"object","example":0},"calendar_arb_in_range_violations":{"type":"object","example":0},"calendar_arb_max_excess":{"type":"object","example":0},"forward_curve":{"type":"object","description":"Forward curve JSON decoded when possible."}},"required":["date","exchange","currency","margin","model","index_price","n_slices","n_forward_knots","calendar_arb_pairs_checked","calendar_arb_violating_pairs","calendar_arb_in_range_violations","calendar_arb_max_excess"]},"VolSurfaceSliceEntity":{"type":"object","properties":{"date":{"type":"object","example":"2026-06-08T12:00:00.000Z","format":"date-time"},"exchange":{"type":"string","example":"deribit"},"currency":{"type":"string","example":"BTC"},"margin":{"type":"string","example":"inverse","enum":["inverse","linear"]},"model":{"type":"string","example":"svi"},"model_params":{"type":"object","description":"Model-native parameter JSON decoded when possible."},"expiry":{"type":"object","example":"2026-06-26T08:00:00.000Z","format":"date-time"}},"required":["date","exchange","currency","margin","model","expiry"]},"VolSurfaceTermStructureRowEntity":{"type":"object","properties":{"date":{"type":"object","example":"2026-06-08T12:00:00.000Z","format":"date-time"},"exchange":{"type":"string","example":"deribit"},"currency":{"type":"string","example":"BTC"},"margin":{"type":"string","example":"inverse","enum":["inverse","linear"]},"tenor_days":{"type":"object","example":30}},"required":["date","exchange","currency","margin","tenor_days"]},"VolSurfaceStrikeEntity":{"type":"object","properties":{"date":{"type":"object","example":"2026-06-08T12:00:00.000Z","format":"date-time"},"exchange":{"type":"string","example":"deribit"},"currency":{"type":"string","example":"BTC"},"margin":{"type":"string","example":"inverse","enum":["inverse","linear"]},"expiry":{"type":"object","example":"2026-06-26T08:00:00.000Z","format":"date-time"},"instrument":{"type":"string","example":"BTC-26JUN26-100000-C"},"strike":{"type":"object","example":100000},"option_type":{"type":"string","example":"C","enum":["C","P"]}},"required":["date","exchange","currency","margin","expiry","instrument","strike","option_type"]},"VolSurfaceRiskPositionDto":{"type":"object","properties":{"instrument":{"type":"string","description":"Instrument identifier.","example":"BTC-26JUN26-100000-C"},"kind":{"type":"string","description":"Position kind. Empty defaults to option in the engine.","enum":["option","perpetual","future","spot"],"default":"option"},"exchange":{"type":"string","description":"Exchange. Defaults from the request if omitted.","example":"deribit"},"currency":{"type":"string","description":"Base currency. Defaults from the request if omitted.","example":"BTC"},"margin":{"type":"string","description":"Margin book. Spot must be linear; options/perps/futures default to inverse when omitted by the engine.","enum":["inverse","linear"],"example":"inverse"},"strike":{"type":"number","description":"Option strike in USD. Required for option positions.","example":100000},"expiry":{"type":"string","description":"Option or dated future expiry. Accepts ISO 8601 (2026-06-26T08:00:00Z or 2026-06-26) or any exchange-native date code: DDMMMYY (26JUN26), YYMMDD (260626), YYYYMMDD (20260626). Date-only forms resolve to 08:00 UTC settlement. Omit on an option to derive it from the instrument name.","example":"26JUN26"},"option_type":{"type":"string","description":"Option type. Required for option positions.","enum":["C","P"],"example":"C"},"quantity":{"type":"number","description":"Signed position size; positive is long, negative is short. Options: contract count, scaled by the contract multiplier into underlying units. Perpetual, future and spot: base-coin amount.","example":2.5},"entry_price":{"type":"number","description":"Entry price for PnL. Options: venue option price, in coin for inverse and USD for linear; when omitted the entry is 0, so unrealized PnL equals the full mark value. Perpetual, future and spot: USD price; when omitted mark_price is used and PnL is 0.","example":0.075},"entry_spot":{"type":"number","description":"Entry spot in USD, used to convert inverse PnL.","example":96000},"mark_price":{"type":"number","description":"Current mark price in USD. Required for perpetual, future and spot positions; ignored for options.","example":104000},"funding_pnl_usd":{"type":"number","description":"Caller-supplied realized funding PnL in USD.","example":-12.5},"funding_pnl_coin":{"type":"number","description":"Caller-supplied realized funding PnL in coin.","example":-0.00012}},"required":["instrument","quantity"]},"VolSurfaceRiskDecomposeRequestDto":{"type":"object","properties":{"exchange":{"type":"string","description":"Exchange used for risk request routing.","example":"deribit"},"currency":{"type":"string","description":"Base currency used for risk request routing.","example":"BTC"},"positions":{"description":"Portfolio positions to price or risk-analyze.","type":"array","items":{"$ref":"#/components/schemas/VolSurfaceRiskPositionDto"}},"timeout_ms":{"type":"number","description":"Risk request timeout in milliseconds.","default":5000,"minimum":100,"maximum":30000}},"required":["exchange","currency","positions"]},"VolSurfaceScenarioShockDto":{"type":"object","properties":{"name":{"type":"string","description":"Scenario name.","example":"Crash"},"spot_shift_pct":{"type":"number","description":"Spot shift in percent (-20 means -20%); must be above -100. The forward moves with spot and the smile keeps its shape in moneyness.","example":-20},"level_shift_vol":{"type":"number","description":"Volatility shift in vol points, exact at ATM (5 raises ATM IV by 5 points); other strikes move consistently with the fitted smile.","example":15,"default":0},"skew_shift":{"type":"number","description":"Added to the smile correlation parameter (rho), kept within (-1, 1). Negative steepens put skew. Not in vol points.","example":-0.15,"default":0},"curvature_shift":{"type":"number","description":"Added to the smile curvature parameter (sigma for SVI, nu for SABR). Not in vol points.","example":0,"default":0},"time_decay_days":{"type":"number","description":"Calendar days elapsed, on a 365-day year.","example":1,"default":0}},"required":["spot_shift_pct"]},"VolSurfaceRiskScenarioRequestDto":{"type":"object","properties":{"exchange":{"type":"string","description":"Exchange used for risk request routing.","example":"deribit"},"currency":{"type":"string","description":"Base currency used for risk request routing.","example":"BTC"},"positions":{"description":"Portfolio positions to price or risk-analyze.","type":"array","items":{"$ref":"#/components/schemas/VolSurfaceRiskPositionDto"}},"timeout_ms":{"type":"number","description":"Risk request timeout in milliseconds.","default":5000,"minimum":100,"maximum":30000},"shock":{"description":"Scenario shock definition.","allOf":[{"$ref":"#/components/schemas/VolSurfaceScenarioShockDto"}]}},"required":["exchange","currency","positions","shock"]},"VolSurfaceRiskLadderRequestDto":{"type":"object","properties":{"exchange":{"type":"string","description":"Exchange used for risk request routing.","example":"deribit"},"currency":{"type":"string","description":"Base currency used for risk request routing.","example":"BTC"},"positions":{"description":"Portfolio positions to price or risk-analyze.","type":"array","items":{"$ref":"#/components/schemas/VolSurfaceRiskPositionDto"}},"timeout_ms":{"type":"number","description":"Risk request timeout in milliseconds.","default":5000,"minimum":100,"maximum":30000},"spot_shifts_pct":{"description":"Spot-shift grid rows in percent.","example":[-20,-10,-5,0,5,10,20],"type":"array","items":{"type":"number"}},"vol_shifts":{"description":"Parallel vol-shift grid columns in vol points.","example":[-10,-5,0,5,10],"type":"array","items":{"type":"number"}},"skew_shift":{"type":"number","description":"Skew shock applied to every cell: added to the smile correlation parameter (rho), not in vol points.","example":0,"default":0},"curvature_shift":{"type":"number","description":"Curvature shock applied to every cell: added to the smile curvature parameter (sigma for SVI, nu for SABR), not in vol points.","example":0,"default":0},"time_decay_days":{"type":"number","description":"Calendar days elapsed in every cell, on a 365-day year.","example":0,"default":0}},"required":["exchange","currency","positions","spot_shifts_pct","vol_shifts"]},"ErrorResponseDto":{"type":"object","properties":{"statusCode":{"type":"number","description":"HTTP status code","example":400},"message":{"description":"Error message(s). Can be a string or array of validation errors","example":["symbol must be a string","exchange is required"],"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"error":{"type":"string","description":"Error type identifier","example":"Bad Request"},"timestamp":{"type":"string","description":"Timestamp when the error occurred","example":"2024-01-01T12:00:00Z","format":"date-time"},"path":{"type":"string","description":"API request path that caused the error","example":"/api/v1/ohlc/price"}},"required":["statusCode","message","error"]},"UnauthorizedErrorDto":{"type":"object","properties":{"statusCode":{"type":"number","description":"HTTP 401 status code","example":401,"default":401},"message":{"description":"Unauthorized error message","example":"Invalid API key","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"default":"Unauthorized"},"error":{"type":"string","description":"Error type","example":"Unauthorized","default":"Unauthorized"},"timestamp":{"type":"string","description":"Timestamp when the error occurred","example":"2024-01-01T12:00:00Z","format":"date-time"},"path":{"type":"string","description":"API request path that caused the error","example":"/api/v1/ohlc/price"}},"required":["statusCode","message","error"]},"RateLimitErrorDto":{"type":"object","properties":{"statusCode":{"type":"number","description":"HTTP 429 status code","example":429,"default":429},"message":{"description":"Rate limit error message","example":"Rate limit exceeded. Please retry after 60 seconds","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"default":"Too Many Requests"},"error":{"type":"string","description":"Error type","example":"Too Many Requests","default":"Too Many Requests"},"timestamp":{"type":"string","description":"Timestamp when the error occurred","example":"2024-01-01T12:00:00Z","format":"date-time"},"path":{"type":"string","description":"API request path that caused the error","example":"/api/v1/ohlc/price"},"retryAfter":{"type":"number","description":"Number of seconds to wait before retrying","example":60},"limit":{"type":"number","description":"Current rate limit quota","example":1000},"remaining":{"type":"number","description":"Number of requests remaining in current window","example":0}},"required":["statusCode","message","error"]},"ValidationErrorDto":{"type":"object","properties":{"statusCode":{"type":"number","description":"HTTP 400 status code","example":400,"default":400},"message":{"description":"Validation error messages","example":["symbol must be a string","interval must be one of: 1m, 5m, 15m, 30m, 1h, 4h, 6h, 1d"],"type":"array","items":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"error":{"type":"string","description":"Error type","example":"Bad Request","default":"Bad Request"},"timestamp":{"type":"string","description":"Timestamp when the error occurred","example":"2024-01-01T12:00:00Z","format":"date-time"},"path":{"type":"string","description":"API request path that caused the error","example":"/api/v1/ohlc/price"}},"required":["statusCode","message","error"]},"ServerErrorDto":{"type":"object","properties":{"statusCode":{"type":"number","description":"HTTP 500 status code","example":500,"default":500},"message":{"description":"Internal server error message","example":"An unexpected error occurred. Please try again later.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"default":"Internal Server Error"},"error":{"type":"string","description":"Error type","example":"Internal Server Error","default":"Internal Server Error"},"timestamp":{"type":"string","description":"Timestamp when the error occurred","example":"2024-01-01T12:00:00Z","format":"date-time"},"path":{"type":"string","description":"API request path that caused the error","example":"/api/v1/ohlc/price"},"errorId":{"type":"string","description":"Error tracking ID for support reference","example":"ERR-123456-ABCD"}},"required":["statusCode","message","error"]},"BacktestRequest":{"type":"object","properties":{"exchange":{"type":"string","enum":["deribit"]},"currency":{"type":"string","enum":["BTC","ETH","BTC_USDC","ETH_USDC","SOL","XRP","AVAX","TRX","HYPE"],"description":"Deribit product: BTC/ETH are inverse; BTC_USDC/ETH_USDC and altcoins are USDC-settled. See strategies.products for capital currency and contract sizes."},"start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"initial_capital":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":1000000000,"description":"One shared balance in the product collateral currency: BTC/ETH for inverse products, USDC for linear products."},"capital_model":{"type":"string","enum":["shared"]},"margin_model":{"type":"string","enum":["research_stress_v1"]},"resolution":{"description":"Simulation/valuation/risk interval; defaults to 1m. Entries remain scheduled on whole UTC hours.","type":"string","enum":["1m","1h"]},"equity_interval":{"description":"Equity-curve reporting interval; defaults to 1h plus execution/terminal points. Does not change simulation/risk frequency.","type":"string","enum":["1m","1h"]},"execution_model":{"type":"string","enum":["bid_ask","mark"]},"fees":{"type":"object","properties":{"trade_rate":{"type":"number","minimum":0,"maximum":0.1},"trade_premium_cap":{"type":"number","minimum":0,"maximum":1},"settlement_rate":{"type":"number","minimum":0,"maximum":0.1},"settlement_premium_cap":{"type":"number","minimum":0,"maximum":1}},"required":["trade_rate","trade_premium_cap","settlement_rate","settlement_premium_cap"],"additionalProperties":false},"slippage_bps":{"type":"number","minimum":0,"maximum":1000},"missing_entry_policy":{"type":"string","enum":["fail","skip"],"description":"Scheduled entries of flat components only. After entry retries are exhausted, fail stops the job; skip records a rejected batch. Applies to missing contracts/quotes, missing or insufficient displayed liquidity and insufficient margin. Margin failures are immediate, not retried. Rolls of held positions are governed by unfilled_roll_policy instead."},"entry_retry_minutes":{"description":"Entry retry budget in minutes, default 120 at both resolutions. Every simultaneous entry leg must fill together on a fresh observed minute; at 1h resolution the engine reads the following minutes only while an entry is pending, then returns to the hourly grid. Zero disables retries (one attempt at the scheduled hour). Original schedule and expiry targets remain fixed.","type":"integer","minimum":0,"maximum":120},"unfilled_roll_policy":{"description":"What happens when a scheduled roll of held positions cannot fully execute within its 120-minute retry window, at either resolution. stop (default) ends the simulation there with completion_status partial, termination roll_unfilled and the positions reported open. hold_position keeps the held positions unchanged, records the roll in skipped_rolls and continues: they are valued, risk-checked and settled as usual, and the component tries again at its next scheduled roll.","type":"string","enum":["stop","hold_position"]},"missing_held_quote_policy":{"description":"Defaults to carry_forward on REST, MCP and dashboard at both resolutions. Missing observations carry the last valid earlier valuation with its original timestamp, without a gap-duration failure. No stale fills or risk decisions. Scheduled rolls wait for fresh data up to their retry budget, then return a partial report; missing terminal observations preserve open positions. Explicit fail and minute-only skip_short_gaps remain strict opt-ins.","type":"string","enum":["fail","skip_short_gaps","carry_forward"]},"carry_forward_warning_minutes":{"description":"Consecutive-gap warning threshold, default 60 minutes. Reporting only: longer gaps continue with flagged last-observed valuations, never fabricated executions.","type":"integer","minimum":1,"maximum":1440},"max_carry_forward_minutes":{"description":"Deprecated compatibility alias for carry_forward_warning_minutes in v1.8. It is a warning threshold, not a failure limit. The new field wins when both are supplied.","type":"integer","minimum":1,"maximum":1440},"risk_limits":{"type":"object","properties":{"stop_loss":{"type":"number","minimum":0,"exclusiveMinimum":true},"take_profit":{"type":"number","minimum":0,"exclusiveMinimum":true}},"additionalProperties":false},"components":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,39}$"},"first_entry_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"First entry at any whole UTC hour within the run. Subsequent rolls retain this UTC hour independently per component."},"roll_every_days":{"type":"integer","minimum":1,"maximum":365,"description":"Days between entries, at the first entry UTC hour."},"expiry_days":{"type":"integer","minimum":1,"maximum":365,"description":"Target UTC calendar-date offset from each entry date, at 08:00 UTC; exact unless expiry_selection is explicitly nearest_listed."},"expiry_selection":{"description":"Defaults to exact for compatibility. nearest_listed chooses the expiry closest to the original target among contracts observed at entry; an equal-distance tie chooses the later expiry. If the initial catalogue is absent, entry retries may discover it at their actual observation time. No quote/filter/liquidity fallback to a different expiry.","type":"string","enum":["exact","nearest_listed"]},"legs":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-zA-Z][a-zA-Z0-9_-]{0,39}$"},"option_type":{"type":"string","enum":["C","P"]},"side":{"type":"string","enum":["buy","sell"]},"quantity":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":10000},"strike_rank":{"type":"integer","minimum":1,"maximum":8,"description":"Orders strikes within a component: every leg with a higher rank gets a strictly higher strike, and legs sharing a rank share one strike. A call butterfly is rank 1 (low), 2 (middle, two legs or double quantity), 3 (high). Selections must be consistent with this order, e.g. call deltas decreasing and put deltas increasing in absolute value as the rank rises; otherwise no ladder exists and the entry is rejected with detail NO_ASCENDING_LADDER."},"selection":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string","enum":["atm"]}},"required":["kind"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["moneyness"]},"value":{"type":"string","enum":["OTM","ITM"]}},"required":["kind","value"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["delta"]},"value":{"type":"number","minimum":0,"maximum":1}},"required":["kind","value"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["strike"]},"value":{"type":"number","minimum":0,"exclusiveMinimum":true,"description":"Numeric strike, e.g. 1.06. Deribit instrument names write decimal strikes with a d separator (XRP_USDC-26SEP26-1d06-C is strike 1.06); pass the number here, not the name fragment."}},"required":["kind","value"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["strike_distance"]},"value":{"type":"number","minimum":0,"maximum":10}},"required":["kind","value"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["vega"]},"value":{"type":"number","minimum":0}},"required":["kind","value"],"additionalProperties":false},{"type":"object","properties":{"kind":{"type":"string","enum":["gamma"]},"value":{"type":"number","minimum":0}},"required":["kind","value"],"additionalProperties":false}]},"filters":{"type":"object","properties":{"min_open_interest":{"type":"number","minimum":0},"min_volume":{"type":"number","minimum":0},"max_spread_fraction":{"type":"number","minimum":0,"maximum":1},"min_abs_delta":{"type":"number","minimum":0,"maximum":1},"max_abs_delta":{"type":"number","minimum":0,"maximum":1},"max_abs_gamma":{"type":"number","minimum":0},"min_vega":{"type":"number","minimum":0},"max_vega":{"type":"number","minimum":0}},"additionalProperties":false}},"required":["id","option_type","side","quantity","strike_rank","selection"],"additionalProperties":false}},"risk_limits":{"type":"object","properties":{"stop_loss":{"type":"number","minimum":0,"exclusiveMinimum":true},"take_profit":{"type":"number","minimum":0,"exclusiveMinimum":true}},"additionalProperties":false}},"required":["id","first_entry_at","roll_every_days","expiry_days","legs"],"additionalProperties":false}}},"required":["exchange","currency","start","end","initial_capital","capital_model","margin_model","fees","slippage_bps","missing_entry_policy","components"],"additionalProperties":false},"BacktestJob":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^bt_[a-f0-9]{64}$"},"status":{"type":"string","enum":["queued","running","cancel_requested","completed","failed","cancelled"]},"progress":{"type":"number","minimum":0,"maximum":100,"description":"Completion percentage, not remaining runtime."},"engine_version":{"type":"string"},"build_sha":{"description":"Worker build once claimed, otherwise submitting API build. Inspect build_sha_source; a queued job has no known worker build.","nullable":true,"type":"string","pattern":"^[a-f0-9]{40}$"},"build_sha_source":{"type":"string","enum":["worker","submission","unavailable"]},"submission_build_sha":{"nullable":true,"type":"string","pattern":"^[a-f0-9]{40}$"},"worker_build_sha":{"nullable":true,"type":"string","pattern":"^[a-f0-9]{40}$"},"submitted_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"completion_status":{"type":"string","enum":["partial","full_period"]},"termination":{"type":"string"},"expires_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$","description":"Upper retention bound; bounded recent-result storage may evict a job earlier."},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"coordinate":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"}]}}},"required":["code","message"],"additionalProperties":false}},"required":["job_id","status","progress","engine_version","submitted_at","expires_at"],"additionalProperties":false},"BacktestResultResponse":{"type":"object","properties":{"job_id":{"type":"string","pattern":"^bt_[a-f0-9]{64}$"},"result":{"type":"object","properties":{"engine_version":{"type":"string"},"build_sha":{"nullable":true,"type":"string","pattern":"^[a-f0-9]{40}$"},"currency":{"type":"string","description":"Collateral currency. Monetary amounts use this currency unless labelled otherwise."},"capital_model":{"type":"string","enum":["shared"]},"margin_model":{"type":"string","enum":["research_stress_v1"]},"requested_start":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"requested_end":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"completed_through":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"termination":{"type":"string","enum":["end","end_with_open_positions","roll_unfilled","margin_call","stop_loss","take_profit"]},"completion_status":{"description":"A completed processing job can contain a partial simulation; always inspect completed_through.","type":"string","enum":["partial","full_period"]},"open_positions":{"type":"array","items":{"type":"object","properties":{"position_id":{"type":"string"},"component_id":{"type":"string"},"leg_id":{"type":"string"},"instrument":{"type":"string"},"signed_quantity":{"type":"number"},"opened_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expiry_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"entry_price":{"type":"number"},"entry_fee":{"type":"number"},"mark_price":{"type":"number"},"mark_observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"valuation_status":{"type":"string","enum":["observed","carried_forward"]},"marked_value":{"type":"number"},"unrealized_pnl_before_fees":{"type":"number"}},"required":["position_id","component_id","leg_id","instrument","signed_quantity","opened_at","expiry_at","entry_price","entry_fee","mark_price","mark_observed_at","marked_value","unrealized_pnl_before_fees"],"additionalProperties":false}},"unfilled_exit":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"code":{"type":"string"},"message":{"type":"string"},"coordinate":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"}]}}},"required":["timestamp","code","message"],"additionalProperties":false},"termination_detail":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"equity_before_exit":{"type":"number"},"initial_margin_before_exit":{"type":"number"},"maintenance_margin_before_exit":{"type":"number"}},"required":["timestamp","equity_before_exit","initial_margin_before_exit","maintenance_margin_before_exit"],"additionalProperties":false},"summary":{"type":"object","properties":{"initial_capital":{"type":"number"},"ending_equity":{"type":"number"},"net_pnl":{"type":"number"},"total_fees":{"type":"number"},"return_fraction":{"type":"number"},"max_drawdown_fraction":{"type":"number"},"executions":{"type":"integer","minimum":0,"maximum":9007199254740991},"rejected_entries":{"type":"integer","minimum":0,"maximum":9007199254740991},"component_pnl":{"type":"object","additionalProperties":{"type":"number"}},"longest_gap_minutes":{"type":"integer","minimum":0,"maximum":9007199254740991},"settlement_minute_executions":{"type":"integer","minimum":0,"maximum":9007199254740991},"settlement_minute_spread_cost":{"nullable":true,"type":"number"},"spread_cost_vs_mid":{"description":"Sum of spread_cost_vs_mid over every open/close fill that has one. Null when no fill carries it (mark model or no two-sided quote).","nullable":true,"type":"number"},"spread_cost_executions":{"description":"Open/close fills included in spread_cost_vs_mid.","type":"integer","minimum":0,"maximum":9007199254740991}},"required":["initial_capital","ending_equity","net_pnl","total_fees","return_fraction","max_drawdown_fraction","executions","rejected_entries","component_pnl"],"additionalProperties":false},"equity":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"valuation_status":{"type":"string","enum":["observed","carried_forward","flat_no_positions"]},"stale_price_timestamps":{"type":"object","additionalProperties":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"risk_observed":{"type":"boolean"},"margin_observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"cash":{"type":"number"},"option_value":{"type":"number"},"index_price":{"nullable":true,"type":"number"},"index_price_observed_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"index_price_status":{"type":"string","enum":["observed","carried_forward","unavailable"]},"equity":{"type":"number"},"pnl":{"type":"number"},"initial_margin":{"type":"number"},"maintenance_margin":{"type":"number"},"component_pnl":{"type":"object","additionalProperties":{"type":"number"}},"open_positions":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["timestamp","cash","option_value","equity","pnl","initial_margin","maintenance_margin","component_pnl","open_positions"],"additionalProperties":false}},"executions":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"component_id":{"type":"string"},"leg_id":{"type":"string"},"position_id":{"type":"string"},"instrument":{"type":"string"},"event":{"type":"string","enum":["open","close","settlement"]},"execution_basis":{"type":"string","enum":["historical_bid_ask","modeled_mark","official_delivery"]},"reason":{"type":"string","enum":["scheduled_entry","roll","expiry","end","stop_loss","take_profit","margin_call"]},"signed_quantity":{"type":"number","description":"Signed contracts: positive buy, negative sell."},"price":{"type":"number","description":"Quoted price in collateral per base unit. Cashflow also includes the contract_size in assumptions.product; signed_quantity is contracts."},"premium_cashflow":{"type":"number"},"fee":{"type":"number"},"cash_after":{"type":"number"},"realized_pnl":{"nullable":true,"type":"number"},"source_timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"scheduled_timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"settlement_minute":{"type":"boolean"},"bid_ask_spread":{"description":"Ask minus bid of the filled instrument at the fill minute, in price units. On every open/close fill; null when the quote is not two-sided. Absent on settlements.","nullable":true,"type":"number"},"spread_cost_vs_mid":{"description":"Half the quoted spread times quantity and contract size, in collateral: the give-up of a bid/ask fill against mid, before slippage and fees. Null for mark fills or without a two-sided quote.","nullable":true,"type":"number"},"index_price":{"type":"number"},"delta":{"nullable":true,"type":"number"},"liquidity":{"nullable":true,"description":"Null for official expiry settlement, which consumes no book size.","type":"object","properties":{"model":{"type":"string","enum":["displayed_l1_all_or_none"]},"side":{"type":"string","enum":["bid","ask"]},"size_unit":{"type":"string","enum":["contracts"]},"displayed_quantity":{"type":"number"},"available_before":{"type":"number"},"available_after":{"type":"number"}},"required":["model","side","size_unit","displayed_quantity","available_before","available_after"],"additionalProperties":false}},"required":["sequence","timestamp","component_id","leg_id","position_id","instrument","event","execution_basis","reason","signed_quantity","price","premium_cashflow","fee","cash_after","realized_pnl","source_timestamp","liquidity"],"additionalProperties":false}},"rejections":{"type":"array","items":{"type":"object","properties":{"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"scheduled_timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"attempts":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"component_ids":{"type":"array","items":{"type":"string"}},"reason":{"type":"string","enum":["NO_MATCHING_CONTRACT","INSUFFICIENT_MARGIN","MISSING_LIQUIDITY","INSUFFICIENT_LIQUIDITY"]},"contract_selection":{"type":"object","properties":{"target_expiry_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"expiry_selection":{"type":"string","enum":["exact","nearest_listed"]},"selected_expiry_at":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"detail":{"type":"string","enum":["EXPIRY_NOT_OBSERVED","STRATEGY_FILTERS_UNSATISFIED"]},"selection_failure":{"description":"Why STRATEGY_FILTERS_UNSATISFIED: which part of the strike ladder failed.","type":"string","enum":["NO_ELIGIBLE_CONTRACT","NO_COMMON_STRIKE","NO_ASCENDING_LADDER"]},"strike_rank":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"leg_ids":{"description":"The legs to change.","type":"array","items":{"type":"string"}},"message":{"type":"string"}},"required":["target_expiry_at","expiry_selection","selected_expiry_at","detail"],"additionalProperties":false},"liquidity_shortfalls":{"type":"array","items":{"type":"object","properties":{"instrument":{"type":"string"},"side":{"type":"string","enum":["bid","ask"]},"requested_quantity":{"type":"number"},"displayed_quantity":{"nullable":true,"type":"number"},"available_quantity":{"nullable":true,"type":"number"},"reason":{"type":"string","enum":["MISSING_LIQUIDITY","INSUFFICIENT_LIQUIDITY"]}},"required":["instrument","side","requested_quantity","displayed_quantity","available_quantity","reason"],"additionalProperties":false}}},"required":["timestamp","component_ids","reason"],"additionalProperties":false}},"skipped_rolls":{"description":"Rolls given up under unfilled_roll_policy hold_position; the held positions stayed open.","type":"array","items":{"type":"object","properties":{"component_id":{"type":"string"},"scheduled_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"abandoned_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"attempts":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"last_failure_code":{"type":"string"},"coordinate":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"}]}}},"required":["component_id","scheduled_at","abandoned_at","attempts","last_failure_code"],"additionalProperties":false}},"execution_delays":{"type":"array","items":{"type":"object","properties":{"component_id":{"type":"string"},"scheduled_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"executed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"reason":{"type":"string"},"action":{"type":"string","enum":["entry","roll"]},"attempts":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991}},"required":["component_id","scheduled_at","executed_at","reason"],"additionalProperties":false}},"data_quality":{"type":"object","properties":{"status":{"type":"string","enum":["no_skipped_observations","completed_with_gaps"]},"warnings":{"type":"array","items":{"type":"string"}},"skipped_minutes":{"type":"integer","minimum":0,"maximum":9007199254740991},"carried_forward_minutes":{"type":"integer","minimum":0,"maximum":9007199254740991},"longest_gap_minutes":{"type":"integer","minimum":0,"maximum":9007199254740991},"evaluated_steps":{"type":"integer","minimum":0,"maximum":9007199254740991},"gap_limit_minutes":{"nullable":true,"description":"Null for carry-forward (no duration failure); total skip-policy allowance for strict skip_short_gaps. Historical v1.7 results may contain their then-enforced carry limit.","type":"integer","minimum":0,"maximum":9007199254740991},"gaps":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"to_exclusive":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"resumed_at":{"nullable":true,"description":"Null if the gap is still open at the simulation stop; no later observation was used.","type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"missing_minutes":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"instruments":{"type":"array","items":{"type":"string"}},"reason":{"type":"string","enum":["MISSING_HELD_SNAPSHOT"]}},"required":["from","to_exclusive","resumed_at","missing_minutes","instruments","reason"],"additionalProperties":false}}},"required":["status","warnings","skipped_minutes","evaluated_steps","gap_limit_minutes","gaps"],"additionalProperties":false},"assumptions":{"type":"object","additionalProperties":{},"description":"Execution, fees, scheduling, research margin and missing-data assumptions."},"provenance":{"type":"object","additionalProperties":{},"description":"Retained-input fingerprints and historical delivery-price evidence."},"view":{"description":"Read-time projection. Compact arrays are paginated; follow each section next_offset. Summary always covers the entire stored result.","type":"object","additionalProperties":{}}},"required":["engine_version","currency","capital_model","margin_model","requested_start","requested_end","completed_through","termination","summary","equity","executions","rejections","data_quality","assumptions","provenance"],"additionalProperties":false}},"required":["job_id","result"],"additionalProperties":false},"BacktestStrategies":{"type":"object","properties":{"engine_version":{"type":"string"},"build_sha":{"nullable":true,"type":"string","pattern":"^[a-f0-9]{40}$"},"currencies":{"type":"array","items":{"type":"string"}},"products":{"type":"array","items":{"type":"object","properties":{"currency":{"type":"string"},"underlying":{"type":"string"},"instrument_prefix":{"type":"string"},"collateral_currency":{"type":"string","enum":["BTC","ETH","USDC"]},"margin_type":{"type":"string","enum":["inverse","linear"]},"contract_size":{"type":"number","minimum":0,"exclusiveMinimum":true},"quantity_step":{"type":"number","minimum":0,"exclusiveMinimum":true},"delivery_index":{"type":"string"}},"required":["currency","underlying","instrument_prefix","collateral_currency","margin_type","contract_size","quantity_step","delivery_index"],"additionalProperties":false}},"exchanges":{"type":"array","items":{"type":"string"}},"valuation_interval":{"type":"string"},"supported_resolutions":{"type":"array","items":{"type":"string"}},"default_resolution":{"type":"string"},"default_equity_interval":{"type":"string"},"max_minute_equity_points":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"data_gap_policy":{"type":"object","properties":{"default_1m":{"type":"string"},"default_1h":{"type":"string"},"max_consecutive_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"max_missing_fraction_of_requested_steps":{"type":"number"},"minimum_total_allowance_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"limits_apply_to":{"type":"string"},"default_max_carry_forward_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"default_carry_forward_warning_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"carry_forward_limit_action":{"type":"string","enum":["warning_only"]},"maximum_max_carry_forward_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"default_entry_retry_minutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"exhausted_roll_policy":{"type":"string"},"entry_policy":{"type":"string"},"maintenance_handling":{"type":"string"},"actions_during_gaps":{"type":"string"},"critical_scheduled_observations":{"type":"string"}},"required":["default_1m","default_1h","max_consecutive_minutes","max_missing_fraction_of_requested_steps","minimum_total_allowance_minutes","actions_during_gaps","critical_scheduled_observations"],"additionalProperties":false},"execution_models":{"type":"array","items":{"type":"string"}},"default_execution_model":{"type":"string"},"scheduling":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]}},"liquidity":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"boolean"}]}},"capital_model":{"type":"string","enum":["shared"]},"max_days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"max_components":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"max_legs":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"request_schema":{"type":"object","additionalProperties":{}},"unfilled_roll_policies":{"type":"array","items":{"type":"string"}},"default_unfilled_roll_policy":{"type":"string"},"instrument_naming":{"type":"string"},"account_limits":{"type":"object","properties":{"outstanding_jobs_per_account":{"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"capacity_error":{"type":"string"}},"required":["outstanding_jobs_per_account","capacity_error"],"additionalProperties":false},"history_entitlement":{"description":"The calling account’s history window. Starts before earliest_start are refused with 403.","type":"object","properties":{"earliest_start":{"nullable":true,"description":"Earliest start this account may request, or null when unrestricted.","type":"string"},"lookback_months":{"nullable":true,"type":"integer","exclusiveMinimum":true,"maximum":9007199254740991},"rule":{"type":"string"}},"required":["earliest_start","lookback_months","rule"],"additionalProperties":false},"capabilities":{"type":"object","additionalProperties":{"type":"boolean"}},"templates":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"legs":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"option_type":{"type":"string","enum":["C","P"]},"side":{"type":"string","enum":["buy","sell"]},"strike_rank":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"quantity_multiplier":{"type":"number"}},"required":["id","option_type","side","strike_rank","quantity_multiplier"],"additionalProperties":false}}},"required":["id","legs"],"additionalProperties":false}}},"required":["engine_version","currencies","products","exchanges","valuation_interval","supported_resolutions","default_resolution","default_equity_interval","max_minute_equity_points","data_gap_policy","execution_models","default_execution_model","scheduling","liquidity","capital_model","max_days","max_components","max_legs","request_schema","capabilities","templates"],"additionalProperties":false},"BacktestHttpError":{"type":"object","properties":{"statusCode":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"message":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"error":{"type":"string"},"code":{"description":"For example BACKTEST_CAPACITY on admission limits.","type":"string"}},"required":["statusCode","message"],"additionalProperties":false}}},"externalDocs":{"description":"Laevitas API documentation","url":"https://apiv2.laevitas.ch/redoc"}}