NAV
JavaScript Python cURL

Laevitas API V2 v1.8.0

Scroll down for code samples, example requests and responses. Select a language for code samples from the tabs above or the mobile navigation menu.

WebSocket Streaming API

For real-time data streams, see the WebSocket Documentation.

Available channels:

Description Channel
Live trades trades.{market}.{exchange}.{instrument}
OHLC ticker ohlc.ticker.{market}.{exchange}.{instrument}.{timeframe}
OHLC VT ohlc.vt.{market}.{exchange}.{instrument}.{timeframe}
variable Examples
market perpetuals, futures, options
exchange supported exchange (e.g., binance, okx, deribit, bybit, hyperliquid)
instrument instrument name (e.g., BTC-PERPETUAL, ETH-30JUN23-2000-C)
timeframe 1m, 5m, 15m, 1h, 4h, 1d

Authentication

All requests require an API key in the header: http X-API-Key: your-api-key-here

Quick Start

curl -X GET "https://apiv2.laevitas.ch/futures/ohlcvt?exchange=deribit&instrument_name=BTC-PERPETUAL" -H "X-API-Key: your-api-key-here"

Python Example: Fetch Metadata and OHLCVT Data

This example shows how to fetch metadata first to get data availability, then query OHLCVT data for BTC-PERPETUAL on Deribit:

import requests
from datetime import datetime

API_KEY = "your-api-key-here"
BASE_URL = "https://apiv2.laevitas.ch"
HEADERS = {"X-API-Key": API_KEY}

# Step 1: Fetch metadata to get start date and data availability
metadata_response = requests.get(
    f"{BASE_URL}/perpetuals/metadata",
    headers=HEADERS,
    params={
        "exchange": "deribit",
        "instrument_name": "BTC-PERPETUAL",
        "limit": 100
    }
)
metadata = metadata_response.json()

print(f"Instrument: {metadata['instrument_name']}")
print(f"Exchange: {metadata['exchange']}")
print(f"Data available from: {metadata['start_date']}")
print(f"Data available until: {metadata['end_date']}")
print(f"Total records: {metadata['total_count']:,}")
print(f"Total pages (limit=100): {metadata['total_pages']:,}")

# Step 2: Fetch OHLCVT data using the start date from metadata
ohlcvt_response = requests.get(
    f"{BASE_URL}/perpetuals/ohlcvt",
    headers=HEADERS,
    params={
        "exchange": "deribit",
        "instrument_name": "BTC-PERPETUAL",
        "resolution": "1h",
        "start": metadata['start_date'],
        "limit": 100
    }
)
ohlcvt_data = ohlcvt_response.json()

print(f"\nFetched {len(ohlcvt_data['data'])} OHLCVT records")
print(f"First record timestamp: {ohlcvt_data['data'][0]['minute']}")

# Step 3: Paginate through data using cursor
next_cursor = ohlcvt_data['meta']['next_cursor']
if next_cursor:
    next_page_response = requests.get(
        f"{BASE_URL}/perpetuals/ohlcvt",
        headers=HEADERS,
        params={
            "exchange": "deribit",
            "instrument_name": "BTC-PERPETUAL",
            "resolution": "1h",
            "start": metadata['start_date'],
            "cursor": next_cursor,
            "limit": 100
        }
    )
    next_page_data = next_page_response.json()
    print(f"Next page has {len(next_page_data['data'])} records")

Available Data

Perpetuals

Futures

Options

Supported Exchanges

Binance, OKX, Deribit, Bybit, Hyperliquid (futures only)

Response Format

All endpoints return paginated JSON responses with cursor-based navigation for large datasets.

Rate Limiting

Default: 240 requests per 60 seconds per API key

Support

Base URLs:

Authentication

Futures

Futures market data, reference prices, and analytics

Futures Catalog

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/catalog',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/catalog', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/catalog \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/catalog

Returns a list of available futures instruments.

Parameters

Name In Type Required Description
exchange query string false Filter by exchange (e.g., deribit, binance, okx, bybit, hyperliquid)

Example responses

200 Response

[
  {
    "instrument_name": "BNBUSD_251226",
    "exchange": "binance"
  },
  {
    "instrument_name": "BNBUSD_260327",
    "exchange": "binance"
  },
  {
    "instrument_name": "BTC-25DEC26",
    "exchange": "deribit"
  }
]

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures Metadata

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/metadata?exchange=deribit&instrument_name=BTC-25DEC26',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/metadata', params={
  'exchange': 'deribit',  'instrument_name': 'BTC-25DEC26'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/metadata?exchange=deribit&instrument_name=BTC-25DEC26 \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/metadata

Returns metadata for a specific futures instrument including data availability, total record count, and pagination information.

Parameters

Name In Type Required Description
exchange query string true Exchange name
limit query number false Number of records per page for pagination calculation
instrument_name query string true Instrument name

Example responses

200 Response

{
  "exchange": "deribit",
  "instrument_name": "BTC-PERPETUAL",
  "start_date": "2020-01-01T00:00:00.000Z",
  "end_date": "2025-11-21T23:59:00.000Z",
  "total_count": 1500000,
  "total_pages": 15000
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK Metadata successfully retrieved MetadataResponseEntity
400 Bad Request Bad Request - Invalid parameters or no data found None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures OHLCVT Market Data

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/ohlcvt',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/ohlcvt', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/ohlcvt \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/ohlcvt

Retrieves Open, High, Low, Close, Volume, and Trade statistics for futures and perpetual contracts.

Key Features: - Historical trade-based OHLC candlestick data - Buy/sell volume breakdown - Trade count statistics - Liquidation and block trade volume tracking - Mark and index price references - Support for multiple resolutions (1m, 5m, 1h) - Filter by instrument type (perpetual vs dated futures)

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid)
instrument_name query string false Full futures instrument identifier (e.g., BTC-25DEC26, ETH-25DEC26)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK OHLCVT data successfully retrieved Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures Level 1

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/level1',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/level1', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/level1 \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/level1

Returns level 1 order book data for futures instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid)
instrument_name query string false Full futures instrument identifier (e.g., BTC-25DEC26, ETH-25DEC26)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures L2 Orderbook

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/orderbook',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/orderbook', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/orderbook \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/orderbook

Returns aggregated L2 orderbook depth metrics for futures instruments.

Key Features: - Bid/ask liquidity at 4 depth levels (10, 20, 50, 100 levels) - Order book imbalance metrics (OHLC + average) per depth - Microprice (liquidity-weighted mid-price) - Snapshot count per time bucket - Support for multiple resolutions (1m, 5m, 15m, 1h, 4h, 1d)

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid)
instrument_name query string false Full futures instrument identifier (e.g., BTC-25DEC26, ETH-25DEC26)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "data": [
    {
      "date": "2026-01-22 07:20:00",
      "exchange": "deribit",
      "instrument_name": "BTC-25DEC26",
      "currency": "BTC",
      "instrument_type": "future",
      "maturity": "25DEC26",
      "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK L2 orderbook data successfully retrieved Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures L2 Orderbook Raw Snapshots

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/orderbook-raw',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/orderbook-raw', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/orderbook-raw \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/orderbook-raw

Returns raw L2 orderbook snapshots for futures instruments with full bid/ask arrays.

Key Features: - Full bid/ask price levels (up to 100 levels each) - Pre-computed liquidity at 4 depth levels (10, 20, 50, 100) - Order book imbalance per depth - Microprice (liquidity-weighted mid-price) - Individual snapshots (not aggregated) — 30-day data retention

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string false Exchange name (e.g., deribit, binance)
instrument_name query string false Full futures instrument identifier (e.g., BTC-25DEC26). Either instrument_name or currency is required.
currency query string false Base currency (e.g. BTC, ETH). Returns trades across ALL dated futures for this currency. Either currency or instrument_name is required.
direction query string false Filter by trade direction (aggressor side)
block_only query boolean false If true, only return trades with a block_trade_id (block trades).
min_amount query number false Minimum trade amount (in contracts). Filters out dust trades.
strategy query string false Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread).
maturity query string false Filter by maturity date (e.g. 25DEC26). Only for dated futures.
sort query string false Sort field. Default: timestamp.
sort_dir query string false Sort direction. Defaults to ASC for instrument mode, DESC for currency mode.
top_n query number false Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned.

Enumerated Values

Parameter Value
direction buy
direction sell
strategy COLLAR_WITH_FUTURE
strategy COMBO_CALENDAR_SPREAD
strategy COMBO_HEDGE_ROLL_TO_FUTURE
strategy COMBO_HEDGE_ROLL_TO_PERP
strategy COMBO_PERP_VS_FUTURE
strategy COMBO_ROLL_BACK
strategy COMBO_ROLL_FORWARD
strategy COVERED_CALL_WITH_FUTURE
strategy Closed COMBO_CALENDAR_SPREAD
strategy Closed COMBO_PERP_VS_FUTURE_UNWIND
strategy Closed SHORT_PROTECTIVE_PUT_WITH_FUTURE
strategy Opened COMBO_CALENDAR_SPREAD
strategy Opened COMBO_PERP_VS_FUTURE_SPREAD
strategy SHORT_FUTURE
sort timestamp
sort amount
sort price
sort_dir ASC
sort_dir DESC

Example responses

200 Response

{
  "data": [
    {
      "timestamp": 1769066457868,
      "date": "2026-01-22T07:20:57.000Z",
      "exchange": "deribit",
      "instrument_name": "BTC-25DEC26",
      "currency": "BTC",
      "instrument_type": "future",
      "maturity": "25DEC26",
      "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK Raw L2 orderbook snapshots successfully retrieved Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures Volume Stats

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/volume',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/volume', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/volume \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/volume

Returns rolling 24h volume metrics (base and USD) for futures instruments filtered by currency with optional aggregation and interval bucketing.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid)
instrument_name query string false Full futures instrument identifier (e.g., BTC-25DEC26, ETH-25DEC26)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK Successfully retrieved futures volume data Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures Trades Summary

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/trades/summary?exchange=deribit&currency=BTC&group_by=exchange',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/trades/summary', params={
  'exchange': 'deribit',  'currency': 'BTC',  'group_by': 'exchange'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/trades/summary?exchange=deribit&currency=BTC&group_by=exchange \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/trades/summary

Returns aggregated trade statistics for dated futures grouped by a chosen axis. One compact call replaces scanning individual trades. Returns grouped stats: trade_count, volume, buy/sell_volume, net_oi_change, block stats, avg_price, vwap. Group by: exchange, instrument_name, maturity, direction, or strategy.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string true Exchange name (e.g., deribit, binance)
currency query string true Base currency (e.g. BTC, ETH)
group_by query string true Axis to group results by
direction query string false Filter by trade direction
block_only query boolean false If true, only include block trades.
min_amount query number false Minimum trade amount (in contracts).
strategy query string false Filter by strategy label. Accepts comma-separated values.
maturity query string false Filter by maturity date (e.g. 25DEC26).

Enumerated Values

Parameter Value
group_by exchange
group_by instrument_name
group_by maturity
group_by direction
group_by strategy
direction buy
direction sell
strategy COLLAR_WITH_FUTURE
strategy COMBO_CALENDAR_SPREAD
strategy COMBO_HEDGE_ROLL_TO_FUTURE
strategy COMBO_HEDGE_ROLL_TO_PERP
strategy COMBO_PERP_VS_FUTURE
strategy COMBO_ROLL_BACK
strategy COMBO_ROLL_FORWARD
strategy COVERED_CALL_WITH_FUTURE
strategy Closed COMBO_CALENDAR_SPREAD
strategy Closed COMBO_PERP_VS_FUTURE_UNWIND
strategy Closed SHORT_PROTECTIVE_PUT_WITH_FUTURE
strategy Opened COMBO_CALENDAR_SPREAD
strategy Opened COMBO_PERP_VS_FUTURE_SPREAD
strategy SHORT_FUTURE

Example responses

200 Response

{
  "data": [
    {
      "group_key": "25DEC26",
      "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
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures Trade History

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/trades',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/trades', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/trades \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/trades

Returns futures trades with full trade details. Supports two modes: (1) instrument mode — provide instrument_name for a single dated future, (2) currency mode — provide currency (e.g. BTC) for ALL dated futures trades across all instruments. Additional filters: direction, block_only, min_amount, strategy, maturity, sort, sort_dir. Use top_n for quick top-trades scanning.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string false Exchange name (e.g., deribit, binance)
instrument_name query string false Full futures instrument identifier (e.g., BTC-25DEC26). Either instrument_name or currency is required.
currency query string false Base currency (e.g. BTC, ETH). Returns trades across ALL dated futures for this currency. Either currency or instrument_name is required.
direction query string false Filter by trade direction (aggressor side)
block_only query boolean false If true, only return trades with a block_trade_id (block trades).
min_amount query number false Minimum trade amount (in contracts). Filters out dust trades.
strategy query string false Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread).
maturity query string false Filter by maturity date (e.g. 25DEC26). Only for dated futures.
sort query string false Sort field. Default: timestamp.
sort_dir query string false Sort direction. Defaults to ASC for instrument mode, DESC for currency mode.
top_n query number false Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned.

Enumerated Values

Parameter Value
direction buy
direction sell
strategy COLLAR_WITH_FUTURE
strategy COMBO_CALENDAR_SPREAD
strategy COMBO_HEDGE_ROLL_TO_FUTURE
strategy COMBO_HEDGE_ROLL_TO_PERP
strategy COMBO_PERP_VS_FUTURE
strategy COMBO_ROLL_BACK
strategy COMBO_ROLL_FORWARD
strategy COVERED_CALL_WITH_FUTURE
strategy Closed COMBO_CALENDAR_SPREAD
strategy Closed COMBO_PERP_VS_FUTURE_UNWIND
strategy Closed SHORT_PROTECTIVE_PUT_WITH_FUTURE
strategy Opened COMBO_CALENDAR_SPREAD
strategy Opened COMBO_PERP_VS_FUTURE_SPREAD
strategy SHORT_FUTURE
sort timestamp
sort amount
sort price
sort_dir ASC
sort_dir DESC

Example responses

200 Response

{
  "data": [
    {
      "instrument_name": "BTC-25DEC26",
      "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-25DEC26",
      "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-25DEC26",
      "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=="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures Open Interest

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/open-interest',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/open-interest', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/open-interest \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/open-interest

Aggregates open interest across the selected instrument or currency using the requested resolution.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid)
instrument_name query string false Full futures instrument identifier (e.g., BTC-25DEC26, ETH-25DEC26)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures Ticker History

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/ticker-history',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/ticker-history', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/ticker-history \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/ticker-history

Returns historical ticker data for futures instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid)
instrument_name query string false Full futures instrument identifier (e.g., BTC-25DEC26, ETH-25DEC26)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures Carry

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/carry',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/carry', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/carry \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/carry

Returns carry/basis data (mark price minus index price) for dated futures instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid)
instrument_name query string false Full futures instrument identifier (e.g., BTC-25DEC26, ETH-25DEC26)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures Reference Prices

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/reference-price',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/reference-price', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/reference-price \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/reference-price

Returns reference price data for futures instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid)
instrument_name query string false Full futures instrument identifier (e.g., BTC-25DEC26, ETH-25DEC26)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures Snapshot

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/snapshot?exchange=deribit',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/snapshot', params={
  'exchange': 'deribit'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/snapshot?exchange=deribit \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/snapshot

Returns a snapshot of all futures instruments for a given exchange at a single minute. If no date is provided, returns the latest available snapshot. Currency is optional.

Parameters

Name In Type Required Description
exchange query string true Exchange name (e.g., deribit, binance, okx, bybit). Required.
date query string(date-time) false Exact date/time for the snapshot in ISO 8601 format (UTC). If omitted, returns the latest available snapshot.
resolution query string false Time resolution for the snapshot. At 1m (default), returns raw minute-level data. At higher resolutions (5m, 1h, etc.), data is aggregated into the specified bucket.
currency query string false Base currency filter (e.g., BTC, ETH)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "data": [
    {
      "date": "2025-11-04 11:00:00",
      "exchange": "deribit",
      "instrument_name": "BTC-25DEC26",
      "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-25DEC26",
      "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"
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Futures Liquidation History

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/futures/liquidations',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/futures/liquidations', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/futures/liquidations \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/futures/liquidations

Returns individual forced liquidation events for dated futures. Supports filtering by direction, position side, and minimum USD amount. Data available for binance, bybit, and okx exchanges.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit, hyperliquid)
instrument_name query string false Full futures instrument identifier (e.g., BTC-25DEC26, ETH-25DEC26)
direction query string false Filter by liquidation order direction (buy = short squeeze, sell = long liquidation)
position_side query string false Filter by position side being liquidated
min_amount_usd query number false Minimum liquidation value in USD. Filters out small liquidations.
sort query string false Sort field. Default: timestamp.
sort_dir query string false Sort direction. Defaults to DESC (newest/largest first).

Enumerated Values

Parameter Value
direction buy
direction sell
position_side long
position_side short
sort timestamp
sort amount_usd
sort price
sort_dir ASC
sort_dir DESC

Example responses

200 Response

{
  "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"
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Options

Options market data, Greeks, and volatility analytics

Options Catalog

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/catalog',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/catalog', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/catalog \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/catalog

Returns a list of available options instruments.

Parameters

Name In Type Required Description
exchange query string false Filter by exchange (e.g., deribit, binance, okx, bybit, hyperliquid)

Example responses

200 Response

[
  {
    "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"
  }
]

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Options Metadata

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/metadata?exchange=deribit&instrument_name=BTC-27FEB26-80000-C',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/metadata', params={
  'exchange': 'deribit',  'instrument_name': 'BTC-27FEB26-80000-C'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/metadata?exchange=deribit&instrument_name=BTC-27FEB26-80000-C \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/metadata

Returns metadata for a specific options instrument including data availability, total record count, and pagination information.

Parameters

Name In Type Required Description
exchange query string true Exchange name
limit query number false Number of records per page for pagination calculation
instrument_name query string true Instrument name

Example responses

200 Response

{
  "exchange": "deribit",
  "instrument_name": "BTC-PERPETUAL",
  "start_date": "2020-01-01T00:00:00.000Z",
  "end_date": "2025-11-21T23:59:00.000Z",
  "total_count": 1500000,
  "total_pages": 15000
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK Metadata successfully retrieved MetadataResponseEntity
400 Bad Request Bad Request - Invalid parameters or no data found None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Options OHLC Market Data

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/ohlcvt',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/ohlcvt', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/ohlcvt \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/ohlcvt

Returns open, high, low, close, volume, and trade statistics for a specific option instrument aggregated by the requested resolution.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full options instrument identifier (e.g., BTC-27FEB26-80000-C, ETH-25DEC26-4000-P)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK OHLCVT data successfully retrieved Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Options Volume Stats

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/volume',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/volume', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/volume \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/volume

Returns rolling 24h volume metrics (base and USD) for options instruments filtered by currency with optional aggregation and interval bucketing.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full options instrument identifier (e.g., BTC-27FEB26-80000-C, ETH-25DEC26-4000-P)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK Successfully retrieved options volume data Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Options Trades Summary

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/trades/summary?exchange=deribit&currency=BTC&group_by=exchange',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/trades/summary', params={
  'exchange': 'deribit',  'currency': 'BTC',  'group_by': 'exchange'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/trades/summary?exchange=deribit&currency=BTC&group_by=exchange \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/trades/summary

Returns aggregated trade statistics for options grouped by a chosen axis. One compact call replaces scanning individual trades. Returns grouped stats: trade_count, volume, buy/sell_volume, premium_usd, buy/sell_premium_usd, notional, net_oi_change, net_delta/gamma/vega, block_trade_count. Group by: exchange, instrument_name, strike, maturity, option_type, direction, or strategy.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string true Exchange name (e.g., deribit)
currency query string true Base currency (e.g. BTC, ETH)
group_by query string true Axis to group results by
min_premium_usd query number false Minimum premium in USD. Filters dust trades.
min_notional query number false Minimum notional value in USD.
direction query string false Filter by trade direction
block_only query boolean false If true, only include block trades.
opening_only query boolean false If true, only include opening trades (strategy starts with Opened).
option_type query string false Filter by option type: C (call) or P (put)
maturity query string false Filter by maturity date (e.g. 25DEC26)
strategy query string false Filter by strategy label. Accepts comma-separated values.

Enumerated Values

Parameter Value
group_by exchange
group_by instrument_name
group_by strike
group_by maturity
group_by option_type
group_by direction
group_by strategy
direction buy
direction sell
option_type C
option_type P
strategy BEAR_CALL_SPREAD
strategy BEAR_DIAGONAL_SPREAD (Calls)
strategy BEAR_DIAGONAL_SPREAD (Puts)
strategy BEAR_PUT_SPREAD
strategy BOX_SPREAD
strategy BULL_CALL_SPREAD
strategy BULL_DIAGONAL_SPREAD (Calls)
strategy BULL_DIAGONAL_SPREAD (Puts)
strategy BULL_PUT_SPREAD
strategy CALL_CALENDAR
strategy CALL_ROLL_BACK/DOWN
strategy CALL_ROLL_BACK/UP
strategy CALL_ROLL_FORWARD/UP
strategy COLLAR_WITH_FUTURE
strategy COMBO_CALL_BUTTERFLY
strategy COMBO_CALL_CALENDAR
strategy COMBO_CALL_DIAGONAL
strategy COMBO_CALL_LADDER
strategy COMBO_CALL_RATIO_SPREAD_1X2
strategy COMBO_CALL_RATIO_SPREAD_1X3
strategy COMBO_CALL_SPREAD
strategy COMBO_DIAGONAL_STRADDLE_CALENDAR
strategy COMBO_IRON_CONDOR
strategy COMBO_PUT_BUTTERFLY
strategy COMBO_PUT_CALENDAR
strategy COMBO_PUT_DIAGONAL
strategy COMBO_PUT_RATIO_SPREAD_1X2
strategy COMBO_PUT_RATIO_SPREAD_1X3
strategy COMBO_PUT_RATIO_SPREAD_2X3
strategy COMBO_PUT_SPREAD
strategy COMBO_RISK_REVERSAL
strategy COMBO_RISK_REVERSAL_ITM
strategy COMBO_STRADDLE
strategy COMBO_STRANGLE
strategy COVERED_CALL_WITH_FUTURE
strategy CUSTOM_STRATEGY
strategy Close_CALL/Open_PUT
strategy Closed BEAR_CALL_SPREAD
strategy Closed BEAR_DIAGONAL_SPREAD (Calls)
strategy Closed BEAR_DIAGONAL_SPREAD (Puts)
strategy Closed BEAR_PUT_SPREAD
strategy Closed BULL_CALL_SPREAD
strategy Closed BULL_DIAGONAL_SPREAD (Calls)
strategy Closed BULL_DIAGONAL_SPREAD (Puts)
strategy Closed BULL_PUT_SPREAD
strategy Closed COMBO_CALL_LADDER
strategy Closed COMBO_CALL_RATIO_SPREAD_1X3
strategy Closed COMBO_CALL_SPREAD
strategy Closed COMBO_DIAGONAL_STRADDLE_CALENDAR
strategy Closed COMBO_IRON_CONDOR
strategy Closed COMBO_PUT_SPREAD
strategy Closed COMBO_STRANGLE
strategy Closed LONG_CALL
strategy Closed LONG_PUT
strategy Closed LONG_RATIO_CALL_SPREAD
strategy Closed LONG_RISK_REVERSAL
strategy Closed LONG_STRADDLE
strategy Closed REVERSE_CALL_CALENDAR
strategy Closed REVERSE_PUT_CALENDAR
strategy Closed SHORT_CALL
strategy Closed SHORT_PROTECTIVE_PUT_WITH_FUTURE
strategy Closed SHORT_PUT
strategy Closed SHORT_RATIO_PUT_SPREAD
strategy Closed SHORT_STRADDLE
strategy Closed SHORT_STRANGLE
strategy HEDGED_OPTIONS_STRATEGY
strategy LONG_CALL
strategy LONG_CALL_BUTTERFLY
strategy LONG_IRON_CONDOR
strategy LONG_PUT
strategy LONG_PUT_BUTTERFLY
strategy LONG_PUT_LADDER
strategy LONG_RATIO_CALL_SPREAD
strategy LONG_RATIO_PUT_SPREAD
strategy LONG_RISK_REVERSAL
strategy LONG_STRADDLE
strategy LONG_STRANGLE
strategy Opened BEAR_CALL_SPREAD
strategy Opened BEAR_DIAGONAL_SPREAD (Calls)
strategy Opened BEAR_DIAGONAL_SPREAD (Puts)
strategy Opened BEAR_PUT_SPREAD
strategy Opened BULL_CALL_SPREAD
strategy Opened BULL_DIAGONAL_SPREAD (Calls)
strategy Opened BULL_DIAGONAL_SPREAD (Puts)
strategy Opened BULL_PUT_SPREAD
strategy Opened CALL_CALENDAR
strategy Opened COLLAR_WITH_FUTURE
strategy Opened COMBO_CALL_BUTTERFLY
strategy Opened COMBO_CALL_CALENDAR
strategy Opened COMBO_CALL_DIAGONAL
strategy Opened COMBO_CALL_LADDER
strategy Opened COMBO_CALL_RATIO_SPREAD_1X2
strategy Opened COMBO_CALL_RATIO_SPREAD_1X3
strategy Opened COMBO_CALL_SPREAD
strategy Opened COMBO_DIAGONAL_STRADDLE_CALENDAR
strategy Opened COMBO_IRON_CONDOR
strategy Opened COMBO_PUT_CALENDAR
strategy Opened COMBO_PUT_DIAGONAL
strategy Opened COMBO_PUT_RATIO_SPREAD_1X2
strategy Opened COMBO_PUT_RATIO_SPREAD_1X3
strategy Opened COMBO_PUT_SPREAD
strategy Opened COMBO_RISK_REVERSAL
strategy Opened COMBO_STRADDLE
strategy Opened COMBO_STRANGLE
strategy Opened LONG_CALL
strategy Opened LONG_CALL_BUTTERFLY
strategy Opened LONG_PUT
strategy Opened LONG_PUT_BUTTERFLY
strategy Opened LONG_RATIO_CALL_SPREAD
strategy Opened LONG_STRADDLE
strategy Opened LONG_STRANGLE
strategy Opened PUT_CALENDAR
strategy Opened REVERSE_CALL_CALENDAR
strategy Opened REVERSE_PUT_CALENDAR
strategy Opened SHORT_CALL
strategy Opened SHORT_CALL_BUTTERFLY
strategy Opened SHORT_PUT
strategy Opened SHORT_RATIO_CALL_SPREAD
strategy Opened SHORT_RISK_REVERSAL
strategy Opened SHORT_STRADDLE
strategy Opened SHORT_STRANGLE
strategy PROTECTIVE_PUT_WITH_FUTURE
strategy PUT_CALENDAR
strategy PUT_ROLL_BACK/UP
strategy PUT_ROLL_FORWARD/DOWN
strategy PUT_ROLL_FORWARD/UP
strategy REVERSE_CALL_CALENDAR
strategy REVERSE_PUT_CALENDAR
strategy ROLL_BACK
strategy ROLL_DOWN
strategy ROLL_FORWARD
strategy ROLL_UP
strategy SHORT_CALL
strategy SHORT_CALL_CONDOR
strategy SHORT_COLLAR_WITH_FUTURE
strategy SHORT_IRON_CONDOR
strategy SHORT_PROTECTIVE_PUT_WITH_FUTURE
strategy SHORT_PUT
strategy SHORT_PUT_BUTTERFLY
strategy SHORT_PUT_CONDOR
strategy SHORT_RATIO_CALL_SPREAD
strategy SHORT_RATIO_PUT_SPREAD
strategy SHORT_RISK_REVERSAL
strategy SHORT_STRADDLE
strategy SHORT_STRANGLE

Example responses

200 Response

{
  "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
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Options Trade History

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/trades',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/trades', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/trades \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/trades

Returns 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. Additional filters: min_premium_usd, min_notional, direction, strategy, block_only, opening_only, option_type, maturity, sort, sort_dir.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string false Exchange name (e.g., deribit, binance)
instrument_name query string false Full options instrument identifier (e.g., BTC-27FEB26-80000-C). Either instrument_name or currency is required.
currency query string false Base currency (e.g. BTC, ETH). Returns trades across ALL instruments for this currency. Either currency or instrument_name is required.
min_premium_usd query number false Minimum premium in USD. Filters out dust trades.
min_notional query number false Minimum notional value in USD.
direction query string false Filter by trade direction (aggressor side)
strategy query string false Filter by strategy label. Accepts comma-separated values (e.g. SHORT_CALL,LONG_PUT).
block_only query boolean false If true, only return trades with a block_trade_id (block trades).
opening_only query boolean false If true, only return trades where strategy starts with "Opened" (new positions).
option_type query string false Filter by option type: C (call) or P (put)
maturity query string false Filter by maturity date (e.g. 25DEC26)
sort query string false Sort field. Default: timestamp.
sort_dir query string false Sort direction. Defaults to DESC for currency-level queries (newest/largest first), ASC for instrument-level queries.
top_n query number false Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned.

Enumerated Values

Parameter Value
direction buy
direction sell
strategy BEAR_CALL_SPREAD
strategy BEAR_DIAGONAL_SPREAD (Calls)
strategy BEAR_DIAGONAL_SPREAD (Puts)
strategy BEAR_PUT_SPREAD
strategy BOX_SPREAD
strategy BULL_CALL_SPREAD
strategy BULL_DIAGONAL_SPREAD (Calls)
strategy BULL_DIAGONAL_SPREAD (Puts)
strategy BULL_PUT_SPREAD
strategy CALL_CALENDAR
strategy CALL_ROLL_BACK/DOWN
strategy CALL_ROLL_BACK/UP
strategy CALL_ROLL_FORWARD/UP
strategy COLLAR_WITH_FUTURE
strategy COMBO_CALL_BUTTERFLY
strategy COMBO_CALL_CALENDAR
strategy COMBO_CALL_DIAGONAL
strategy COMBO_CALL_LADDER
strategy COMBO_CALL_RATIO_SPREAD_1X2
strategy COMBO_CALL_RATIO_SPREAD_1X3
strategy COMBO_CALL_SPREAD
strategy COMBO_DIAGONAL_STRADDLE_CALENDAR
strategy COMBO_IRON_CONDOR
strategy COMBO_PUT_BUTTERFLY
strategy COMBO_PUT_CALENDAR
strategy COMBO_PUT_DIAGONAL
strategy COMBO_PUT_RATIO_SPREAD_1X2
strategy COMBO_PUT_RATIO_SPREAD_1X3
strategy COMBO_PUT_RATIO_SPREAD_2X3
strategy COMBO_PUT_SPREAD
strategy COMBO_RISK_REVERSAL
strategy COMBO_RISK_REVERSAL_ITM
strategy COMBO_STRADDLE
strategy COMBO_STRANGLE
strategy COVERED_CALL_WITH_FUTURE
strategy CUSTOM_STRATEGY
strategy Close_CALL/Open_PUT
strategy Closed BEAR_CALL_SPREAD
strategy Closed BEAR_DIAGONAL_SPREAD (Calls)
strategy Closed BEAR_DIAGONAL_SPREAD (Puts)
strategy Closed BEAR_PUT_SPREAD
strategy Closed BULL_CALL_SPREAD
strategy Closed BULL_DIAGONAL_SPREAD (Calls)
strategy Closed BULL_DIAGONAL_SPREAD (Puts)
strategy Closed BULL_PUT_SPREAD
strategy Closed COMBO_CALL_LADDER
strategy Closed COMBO_CALL_RATIO_SPREAD_1X3
strategy Closed COMBO_CALL_SPREAD
strategy Closed COMBO_DIAGONAL_STRADDLE_CALENDAR
strategy Closed COMBO_IRON_CONDOR
strategy Closed COMBO_PUT_SPREAD
strategy Closed COMBO_STRANGLE
strategy Closed LONG_CALL
strategy Closed LONG_PUT
strategy Closed LONG_RATIO_CALL_SPREAD
strategy Closed LONG_RISK_REVERSAL
strategy Closed LONG_STRADDLE
strategy Closed REVERSE_CALL_CALENDAR
strategy Closed REVERSE_PUT_CALENDAR
strategy Closed SHORT_CALL
strategy Closed SHORT_PROTECTIVE_PUT_WITH_FUTURE
strategy Closed SHORT_PUT
strategy Closed SHORT_RATIO_PUT_SPREAD
strategy Closed SHORT_STRADDLE
strategy Closed SHORT_STRANGLE
strategy HEDGED_OPTIONS_STRATEGY
strategy LONG_CALL
strategy LONG_CALL_BUTTERFLY
strategy LONG_IRON_CONDOR
strategy LONG_PUT
strategy LONG_PUT_BUTTERFLY
strategy LONG_PUT_LADDER
strategy LONG_RATIO_CALL_SPREAD
strategy LONG_RATIO_PUT_SPREAD
strategy LONG_RISK_REVERSAL
strategy LONG_STRADDLE
strategy LONG_STRANGLE
strategy Opened BEAR_CALL_SPREAD
strategy Opened BEAR_DIAGONAL_SPREAD (Calls)
strategy Opened BEAR_DIAGONAL_SPREAD (Puts)
strategy Opened BEAR_PUT_SPREAD
strategy Opened BULL_CALL_SPREAD
strategy Opened BULL_DIAGONAL_SPREAD (Calls)
strategy Opened BULL_DIAGONAL_SPREAD (Puts)
strategy Opened BULL_PUT_SPREAD
strategy Opened CALL_CALENDAR
strategy Opened COLLAR_WITH_FUTURE
strategy Opened COMBO_CALL_BUTTERFLY
strategy Opened COMBO_CALL_CALENDAR
strategy Opened COMBO_CALL_DIAGONAL
strategy Opened COMBO_CALL_LADDER
strategy Opened COMBO_CALL_RATIO_SPREAD_1X2
strategy Opened COMBO_CALL_RATIO_SPREAD_1X3
strategy Opened COMBO_CALL_SPREAD
strategy Opened COMBO_DIAGONAL_STRADDLE_CALENDAR
strategy Opened COMBO_IRON_CONDOR
strategy Opened COMBO_PUT_CALENDAR
strategy Opened COMBO_PUT_DIAGONAL
strategy Opened COMBO_PUT_RATIO_SPREAD_1X2
strategy Opened COMBO_PUT_RATIO_SPREAD_1X3
strategy Opened COMBO_PUT_SPREAD
strategy Opened COMBO_RISK_REVERSAL
strategy Opened COMBO_STRADDLE
strategy Opened COMBO_STRANGLE
strategy Opened LONG_CALL
strategy Opened LONG_CALL_BUTTERFLY
strategy Opened LONG_PUT
strategy Opened LONG_PUT_BUTTERFLY
strategy Opened LONG_RATIO_CALL_SPREAD
strategy Opened LONG_STRADDLE
strategy Opened LONG_STRANGLE
strategy Opened PUT_CALENDAR
strategy Opened REVERSE_CALL_CALENDAR
strategy Opened REVERSE_PUT_CALENDAR
strategy Opened SHORT_CALL
strategy Opened SHORT_CALL_BUTTERFLY
strategy Opened SHORT_PUT
strategy Opened SHORT_RATIO_CALL_SPREAD
strategy Opened SHORT_RISK_REVERSAL
strategy Opened SHORT_STRADDLE
strategy Opened SHORT_STRANGLE
strategy PROTECTIVE_PUT_WITH_FUTURE
strategy PUT_CALENDAR
strategy PUT_ROLL_BACK/UP
strategy PUT_ROLL_FORWARD/DOWN
strategy PUT_ROLL_FORWARD/UP
strategy REVERSE_CALL_CALENDAR
strategy REVERSE_PUT_CALENDAR
strategy ROLL_BACK
strategy ROLL_DOWN
strategy ROLL_FORWARD
strategy ROLL_UP
strategy SHORT_CALL
strategy SHORT_CALL_CONDOR
strategy SHORT_COLLAR_WITH_FUTURE
strategy SHORT_IRON_CONDOR
strategy SHORT_PROTECTIVE_PUT_WITH_FUTURE
strategy SHORT_PUT
strategy SHORT_PUT_BUTTERFLY
strategy SHORT_PUT_CONDOR
strategy SHORT_RATIO_CALL_SPREAD
strategy SHORT_RATIO_PUT_SPREAD
strategy SHORT_RISK_REVERSAL
strategy SHORT_STRADDLE
strategy SHORT_STRANGLE
option_type C
option_type P
sort timestamp
sort premium_usd
sort notional
sort amount
sort_dir ASC
sort_dir DESC

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Enumerated Values

Property Value
direction buy
direction sell

Options Flow Summary

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/flow?exchange=deribit&currency=BTC',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/flow', params={
  'exchange': 'deribit',  'currency': 'BTC'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/flow?exchange=deribit&currency=BTC \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/flow

Returns an aggregated flow summary for a currency including total trades, premium breakdowns (call/put, buy/sell), net Greeks (delta, gamma, vega), opening/closing counts, block trade stats, most active strikes, and notable trades. One call returns everything pre-computed.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string true Exchange name (e.g., deribit)
currency query string true Base currency (e.g. BTC, ETH). Required.
resolution query string false Time bucket resolution for aggregation.
min_premium_usd query number false Minimum premium_usd per trade to include in aggregation. Filters dust before aggregating.
top_n query number false Number of notable trades to return. Default 10.

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "summary": {
    "total_trades": 0,
    "total_premium_usd": 0,
    "total_notional_usd": 0,
    "call_premium_usd": 0,
    "put_premium_usd": 0,
    "buy_premium_usd": 0,
    "sell_premium_usd": 0,
    "net_delta": 0,
    "net_gamma": 0,
    "net_vega": 0,
    "opening_trades": 0,
    "closing_trades": 0,
    "net_oi_change": 0,
    "block_trade_count": 0,
    "block_trade_premium_usd": 0,
    "most_active_strikes": [
      {
        "instrument_name": "string",
        "trade_count": 0,
        "premium_usd": 0,
        "net_oi_change": 0
      }
    ]
  },
  "notable_trades": [
    {
      "instrument_name": "BTC-25DEC26",
      "timestamp": 1234567890123,
      "date": "2023-06-15T14:30:00.000Z",
      "trade_id": "trade_123456",
      "block_trade_id": "block_123",
      "combo_id": "combo_123",
      "combo_trade_id": "combo_trade_123",
      "strategy": "strategy_1",
      "direction": "buy",
      "tick_direction": 1,
      "amount": 1.5,
      "price": 45000.5,
      "index_price": 45010,
      "oi_change": 100,
      "open_interest": 10000,
      "oi_before": 9900
    }
  ]
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK Flow summary successfully retrieved Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Status Code 200

Name Type Required Restrictions Description
» summary OptionsFlowSummaryEntity false none none
»» total_trades number true none Total number of trades in window
»» total_premium_usd number true none Total premium across all trades in USD
»» total_notional_usd number true none Total notional across all trades in USD
»» call_premium_usd number true none Total premium for call options in USD
»» put_premium_usd number true none Total premium for put options in USD
»» buy_premium_usd number true none Total premium for buy-side trades in USD
»» sell_premium_usd number true none Total premium for sell-side trades in USD
»» net_delta number true none Net delta across all trades
»» net_gamma number true none Net gamma across all trades
»» net_vega number true none Net vega across all trades
»» opening_trades number true none Number of opening trades (strategy starts with Opened)
»» closing_trades number true none Number of closing trades (strategy starts with Closed)
»» net_oi_change number true none Net open interest change
»» block_trade_count number true none Number of block trades
»» block_trade_premium_usd number true none Block trade premium in USD
»» most_active_strikes [OptionsFlowActiveStrikeEntity] true none Most active instruments by premium
»»» instrument_name string true none Instrument name
»»» trade_count number true none Number of trades on this instrument
»»» premium_usd number true none Total premium in USD
»»» net_oi_change number true none Net open interest change
» notable_trades [OptionsTradeEntity] false none none
»» instrument_name string true none Instrument identifier
»» timestamp number true none Unix timestamp in milliseconds
»» date string true none ISO 8601 formatted date string
»» trade_id string true none Unique trade identifier
»» block_trade_id string false none Block trade identifier if applicable
»» combo_id string false none Combo trade identifier if applicable
»» combo_trade_id string false none Combo trade ID if part of combo
»» strategy string false none Trading strategy identifier
»» direction string true none Trade direction
»» tick_direction object¦null false none Tick direction indicator
»» amount number true none Trade amount/size
»» price number true none Trade execution price
»» index_price object¦null false none Index price at time of trade
»» oi_change object¦null false none Change in open interest
»» open_interest object¦null false none Open interest after trade
»» oi_before object¦null false none Open interest before trade

Enumerated Values

Property Value
direction buy
direction sell

Options Open Interest

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/open-interest',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/open-interest', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/open-interest \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/open-interest

Aggregates open interest across the selected instrument or currency using the requested resolution.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full options instrument identifier (e.g., BTC-27FEB26-80000-C, ETH-25DEC26-4000-P)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Options Level 1

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/level1',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/level1', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/level1 \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/level1

Returns level 1 order book data for options instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full options instrument identifier (e.g., BTC-27FEB26-80000-C, ETH-25DEC26-4000-P)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Options Volatility & Greeks

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/volatility',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/volatility', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/volatility \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/volatility

Returns implied volatility and Greeks data for options instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full options instrument identifier (e.g., BTC-27FEB26-80000-C, ETH-25DEC26-4000-P)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Options Ticker History

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/ticker-history',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/ticker-history', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/ticker-history \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/ticker-history

Returns historical ticker data for options instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full options instrument identifier (e.g., BTC-27FEB26-80000-C, ETH-25DEC26-4000-P)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Options Reference Prices

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/reference-price',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/reference-price', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/reference-price \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/reference-price

Returns reference price data for options instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full options instrument identifier (e.g., BTC-27FEB26-80000-C, ETH-25DEC26-4000-P)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Options Snapshot

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/snapshot?exchange=deribit&currency=BTC',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/snapshot', params={
  'exchange': 'deribit',  'currency': 'BTC'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/snapshot?exchange=deribit&currency=BTC \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/snapshot

Returns a snapshot of all options instruments for a given exchange and currency at a single minute. If no date is provided, returns the latest available snapshot. Currency is required due to the large dataset size.

Parameters

Name In Type Required Description
exchange query string true Exchange name (e.g., deribit, binance, okx, bybit). Required.
date query string(date-time) false Exact date/time for the snapshot in ISO 8601 format (UTC). If omitted, returns the latest available snapshot.
resolution query string false Time resolution for the snapshot. At 1m (default), returns raw minute-level data. At higher resolutions (5m, 1h, etc.), data is aggregated into the specified bucket.
currency query string true Base currency (e.g., BTC, ETH). Required for options due to large dataset size.

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "data": [
    {
      "date": "2025-11-04 11:00:00",
      "exchange": "deribit",
      "instrument_name": "BTC-27FEB26-80000-C",
      "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-27FEB26-80000-C",
      "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"
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Vol Surface By Expiry

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/vol-surface/by-expiry?exchange=deribit&currency=BTC',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/vol-surface/by-expiry', params={
  'exchange': 'deribit',  'currency': 'BTC'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/vol-surface/by-expiry?exchange=deribit&currency=BTC \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/vol-surface/by-expiry

Returns ATM IV, 25-delta skew, and 25-delta butterfly across all real expiries for a given exchange and currency at a single point in time. If no date is provided, returns the latest available snapshot. Uses delta-proximity to find ATM (delta closest to 0.5) and 25-delta options.

Parameters

Name In Type Required Description
exchange query string true Exchange name (e.g., deribit, binance, okx, bybit). Required.
currency query string true Base currency (e.g., BTC, ETH). Required for vol-surface queries.
date query string(date-time) false Exact date/time for the snapshot in ISO 8601 format (UTC). If omitted, returns the latest available snapshot.
resolution query string false Time resolution for the snapshot. At 1m (default), returns raw minute-level data. At higher resolutions (5m, 1h, etc.), data is aggregated into the specified bucket.

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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
    },
    {
      "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
    },
    {
      "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
    }
  ],
  "meta": {
    "date": "2025-11-04T11:00:00.000Z",
    "next_date": "2025-11-04T11:01:00.000Z"
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Vol Surface By Tenor

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/vol-surface/by-tenor?exchange=deribit&currency=BTC',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/vol-surface/by-tenor', params={
  'exchange': 'deribit',  'currency': 'BTC'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/vol-surface/by-tenor?exchange=deribit&currency=BTC \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/vol-surface/by-tenor

Returns ATM IV, 25-delta skew, and 25-delta butterfly interpolated to fixed constant-maturity tenors (1d, 7d, 14d, 30d, 60d, 90d, 180d, 365d). Uses linear interpolation in total variance space. Flat extrapolation at edges.

Parameters

Name In Type Required Description
exchange query string true Exchange name (e.g., deribit, binance, okx, bybit). Required.
currency query string true Base currency (e.g., BTC, ETH). Required for vol-surface queries.
date query string(date-time) false Exact date/time for the snapshot in ISO 8601 format (UTC). If omitted, returns the latest available snapshot.
resolution query string false Time resolution for the snapshot. At 1m (default), returns raw minute-level data. At higher resolutions (5m, 1h, etc.), data is aggregated into the specified bucket.

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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
    },
    {
      "tenor": 7,
      "atm_iv": 40.43,
      "call_25d_iv": 38.1,
      "put_25d_iv": 43.9,
      "skew_25d": 5.8,
      "butterfly_25d": 0.57
    },
    {
      "tenor": 14,
      "atm_iv": 38.66,
      "call_25d_iv": 36.5,
      "put_25d_iv": 41.8,
      "skew_25d": 5.3,
      "butterfly_25d": 0.49
    },
    {
      "tenor": 30,
      "atm_iv": 38.55,
      "call_25d_iv": 36.2,
      "put_25d_iv": 41.9,
      "skew_25d": 5.7,
      "butterfly_25d": 0.5
    },
    {
      "tenor": 60,
      "atm_iv": 39.92,
      "call_25d_iv": 37.4,
      "put_25d_iv": 43.1,
      "skew_25d": 5.7,
      "butterfly_25d": 0.33
    },
    {
      "tenor": 90,
      "atm_iv": 41.3,
      "call_25d_iv": 38.8,
      "put_25d_iv": 44.5,
      "skew_25d": 5.7,
      "butterfly_25d": 0.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
    },
    {
      "tenor": 365,
      "atm_iv": 47.15,
      "call_25d_iv": 44.3,
      "put_25d_iv": 50.8,
      "skew_25d": 6.5,
      "butterfly_25d": 0.4
    }
  ],
  "meta": {
    "date": "2025-11-04T11:00:00.000Z",
    "next_date": "2025-11-04T11:01:00.000Z"
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Vol Surface By Time

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/options/vol-surface/by-time?exchange=deribit&currency=BTC&maturity=25DEC26',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/options/vol-surface/by-time', params={
  'exchange': 'deribit',  'currency': 'BTC',  'maturity': '25DEC26'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/options/vol-surface/by-time?exchange=deribit&currency=BTC&maturity=25DEC26 \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/options/vol-surface/by-time

Returns a paginated time-series of ATM IV, 25-delta skew, and 25-delta butterfly for the specified exchange and currency. Filter by maturity to track one expiry across time. Uses cursor-based pagination.

Parameters

Name In Type Required Description
exchange query string true Exchange name (e.g., deribit, binance, okx, bybit). Required.
currency query string true Base currency (e.g., BTC, ETH). Required for vol-surface queries.
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
maturity query string true Maturity to query (e.g., 25DEC26). Required for vol-surface history due to large dataset size.
resolution query string false Time resolution for aggregation. Default 1m.
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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
    },
    {
      "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
    },
    {
      "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
    }
  ],
  "meta": {
    "next_cursor": "eyJtaW51dGUiOiIyMDI1LTExLTA0IDExOjAwOjAwIn0="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals

Perpetuals Catalog

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/catalog',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/catalog', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/catalog \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/catalog

Returns a list of available perpetual instruments.

Parameters

Name In Type Required Description
exchange query string false Filter by exchange (e.g., deribit, binance, okx, bybit, hyperliquid)

Example responses

200 Response

[
  {
    "instrument_name": "0G-USDT-SWAP",
    "exchange": "okx"
  },
  {
    "instrument_name": "0GUSDT",
    "exchange": "binance"
  },
  {
    "instrument_name": "1000000BOBUSDT",
    "exchange": "binance"
  }
]

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals Metadata

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/metadata?exchange=deribit&instrument_name=BTC-PERPETUAL',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/metadata', params={
  'exchange': 'deribit',  'instrument_name': 'BTC-PERPETUAL'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/metadata?exchange=deribit&instrument_name=BTC-PERPETUAL \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/metadata

Returns metadata for a specific perpetual instrument including data availability, total record count, and pagination information.

Parameters

Name In Type Required Description
exchange query string true Exchange name
limit query number false Number of records per page for pagination calculation
instrument_name query string true Instrument name

Example responses

200 Response

{
  "exchange": "deribit",
  "instrument_name": "BTC-PERPETUAL",
  "start_date": "2020-01-01T00:00:00.000Z",
  "end_date": "2025-11-21T23:59:00.000Z",
  "total_count": 1500000,
  "total_pages": 15000
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK Metadata successfully retrieved MetadataResponseEntity
400 Bad Request Bad Request - Invalid parameters or no data found None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals OHLCVT Market Data

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/ohlcvt',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/ohlcvt', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/ohlcvt \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/ohlcvt

Retrieves Open, High, Low, Close, Volume, and Trade statistics for perpetual contracts.

Key Features: - Historical trade-based OHLC candlestick data - Buy/sell volume breakdown - Trade count statistics - Liquidation and block trade volume tracking - Mark and index price references - Support for multiple resolutions (1m, 5m, 1h)

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK OHLCVT data successfully retrieved Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals Level 1

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/level1',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/level1', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/level1 \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/level1

Returns level 1 order book data for perpetual instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals L2 Orderbook

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/orderbook',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/orderbook', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/orderbook \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/orderbook

Returns aggregated L2 orderbook depth metrics for perpetual instruments.

Key Features: - Bid/ask liquidity at 4 depth levels (10, 20, 50, 100 levels) - Order book imbalance metrics (OHLC + average) per depth - Microprice (liquidity-weighted mid-price) - Snapshot count per time bucket - Support for multiple resolutions (1m, 5m, 15m, 1h, 4h, 1d)

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK L2 orderbook data successfully retrieved Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals L2 Orderbook Raw Snapshots

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/orderbook-raw',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/orderbook-raw', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/orderbook-raw \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/orderbook-raw

Returns raw L2 orderbook snapshots for perpetual instruments with full bid/ask arrays.

Key Features: - Full bid/ask price levels (up to 100 levels each) - Pre-computed liquidity at 4 depth levels (10, 20, 50, 100) - Order book imbalance per depth - Microprice (liquidity-weighted mid-price) - Individual snapshots (not aggregated) — 30-day data retention

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string false Exchange name (e.g., deribit, binance)
instrument_name query string false Full perpetual instrument identifier (e.g., BTC-PERPETUAL). Either instrument_name or currency is required.
currency query string false Base currency (e.g. BTC, ETH). Returns trades across ALL perpetuals for this currency. Either currency or instrument_name is required.
direction query string false Filter by trade direction (aggressor side)
block_only query boolean false If true, only return trades with a block_trade_id (block trades).
min_amount query number false Minimum trade amount (in contracts). Filters out dust trades.
strategy query string false Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread).
sort query string false Sort field. Default: timestamp.
sort_dir query string false Sort direction. Defaults to ASC for instrument mode, DESC for currency mode.
top_n query number false Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned.

Enumerated Values

Parameter Value
direction buy
direction sell
strategy COLLAR_WITH_FUTURE
strategy COMBO_HEDGE_ROLL_TO_FUTURE
strategy COMBO_HEDGE_ROLL_TO_PERP
strategy COMBO_PERP_VS_FUTURE
strategy Closed COMBO_PERP_VS_FUTURE_UNWIND
strategy Closed LONG_PERP
strategy Closed SHORT_PERP
strategy HEDGED_OPTIONS_STRATEGY
strategy LONG_PERP
strategy Opened COLLAR_WITH_FUTURE
strategy Opened COMBO_PERP_VS_FUTURE_SPREAD
strategy Opened LONG_PERP
strategy Opened SHORT_PERP
strategy PROTECTIVE_PUT_WITH_FUTURE
strategy SHORT_COLLAR_WITH_FUTURE
strategy SHORT_PERP
strategy SHORT_PROTECTIVE_PUT_WITH_FUTURE
sort timestamp
sort amount
sort price
sort_dir ASC
sort_dir DESC

Example responses

200 Response

{
  "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK Raw L2 orderbook snapshots successfully retrieved Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals Volume Stats

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/volume',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/volume', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/volume \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/volume

Returns rolling 24h volume metrics (base and USD) for perpetual instruments filtered by currency with optional aggregation and interval bucketing.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK Successfully retrieved perpetuals volume data Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals Trades Summary

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/trades/summary?exchange=deribit&currency=BTC&group_by=exchange',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/trades/summary', params={
  'exchange': 'deribit',  'currency': 'BTC',  'group_by': 'exchange'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/trades/summary?exchange=deribit&currency=BTC&group_by=exchange \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/trades/summary

Returns aggregated trade statistics for perpetual swaps grouped by a chosen axis. One compact call replaces scanning individual trades. Returns grouped stats: trade_count, volume, buy/sell_volume, net_oi_change, block stats, avg_price, vwap. Group by: exchange, instrument_name, direction, or strategy.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string true Exchange name (e.g., deribit, binance)
currency query string true Base currency (e.g. BTC, ETH)
group_by query string true Axis to group results by
direction query string false Filter by trade direction
block_only query boolean false If true, only include block trades.
min_amount query number false Minimum trade amount (in contracts).
strategy query string false Filter by strategy label. Accepts comma-separated values.

Enumerated Values

Parameter Value
group_by exchange
group_by instrument_name
group_by direction
group_by strategy
direction buy
direction sell
strategy COLLAR_WITH_FUTURE
strategy COMBO_HEDGE_ROLL_TO_FUTURE
strategy COMBO_HEDGE_ROLL_TO_PERP
strategy COMBO_PERP_VS_FUTURE
strategy Closed COMBO_PERP_VS_FUTURE_UNWIND
strategy Closed LONG_PERP
strategy Closed SHORT_PERP
strategy HEDGED_OPTIONS_STRATEGY
strategy LONG_PERP
strategy Opened COLLAR_WITH_FUTURE
strategy Opened COMBO_PERP_VS_FUTURE_SPREAD
strategy Opened LONG_PERP
strategy Opened SHORT_PERP
strategy PROTECTIVE_PUT_WITH_FUTURE
strategy SHORT_COLLAR_WITH_FUTURE
strategy SHORT_PERP
strategy SHORT_PROTECTIVE_PUT_WITH_FUTURE

Example responses

200 Response

{
  "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
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals Trade History

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/trades',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/trades', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/trades \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/trades

Returns perpetual trades with full trade details. Supports two modes: (1) instrument mode — provide instrument_name for a single perpetual, (2) currency mode — provide currency (e.g. BTC) for ALL perpetual trades across all instruments. Additional filters: direction, block_only, min_amount, strategy, sort, sort_dir. Use top_n for quick top-trades scanning.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string false Exchange name (e.g., deribit, binance)
instrument_name query string false Full perpetual instrument identifier (e.g., BTC-PERPETUAL). Either instrument_name or currency is required.
currency query string false Base currency (e.g. BTC, ETH). Returns trades across ALL perpetuals for this currency. Either currency or instrument_name is required.
direction query string false Filter by trade direction (aggressor side)
block_only query boolean false If true, only return trades with a block_trade_id (block trades).
min_amount query number false Minimum trade amount (in contracts). Filters out dust trades.
strategy query string false Filter by strategy label. Accepts comma-separated values (e.g. calendar_spread).
sort query string false Sort field. Default: timestamp.
sort_dir query string false Sort direction. Defaults to ASC for instrument mode, DESC for currency mode.
top_n query number false Return top N trades by the sort field (DESC). Overrides limit and sort_dir. No pagination cursor returned.

Enumerated Values

Parameter Value
direction buy
direction sell
strategy COLLAR_WITH_FUTURE
strategy COMBO_HEDGE_ROLL_TO_FUTURE
strategy COMBO_HEDGE_ROLL_TO_PERP
strategy COMBO_PERP_VS_FUTURE
strategy Closed COMBO_PERP_VS_FUTURE_UNWIND
strategy Closed LONG_PERP
strategy Closed SHORT_PERP
strategy HEDGED_OPTIONS_STRATEGY
strategy LONG_PERP
strategy Opened COLLAR_WITH_FUTURE
strategy Opened COMBO_PERP_VS_FUTURE_SPREAD
strategy Opened LONG_PERP
strategy Opened SHORT_PERP
strategy PROTECTIVE_PUT_WITH_FUTURE
strategy SHORT_COLLAR_WITH_FUTURE
strategy SHORT_PERP
strategy SHORT_PROTECTIVE_PUT_WITH_FUTURE
sort timestamp
sort amount
sort price
sort_dir ASC
sort_dir DESC

Example responses

200 Response

{
  "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=="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals Open Interest

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/open-interest',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/open-interest', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/open-interest \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/open-interest

Aggregates open interest across the selected perpetual instrument or currency using the requested resolution.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals Ticker History

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/ticker-history',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/ticker-history', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/ticker-history \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/ticker-history

Returns historical ticker data for perpetual instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals Carry

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/carry',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/carry', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/carry \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/carry

Returns carry data including funding rates and basis for perpetual instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals Reference Prices

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/reference-price',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/reference-price', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/reference-price \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/reference-price

Returns reference price data for perpetual instruments.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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="
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals Snapshot

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/snapshot?exchange=deribit',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/snapshot', params={
  'exchange': 'deribit'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/snapshot?exchange=deribit \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/snapshot

Returns a snapshot of all perpetual instruments for a given exchange at a single minute. If no date is provided, returns the latest available snapshot. Currency is optional.

Parameters

Name In Type Required Description
exchange query string true Exchange name (e.g., deribit, binance, okx, bybit). Required.
date query string(date-time) false Exact date/time for the snapshot in ISO 8601 format (UTC). If omitted, returns the latest available snapshot.
resolution query string false Time resolution for the snapshot. At 1m (default), returns raw minute-level data. At higher resolutions (5m, 1h, etc.), data is aggregated into the specified bucket.
currency query string false Base currency filter (e.g., BTC, ETH)

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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"
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Perpetuals Liquidation History

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/perpetuals/liquidations',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/perpetuals/liquidations', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/perpetuals/liquidations \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/perpetuals/liquidations

Returns individual forced liquidation events for perpetual swaps. Supports filtering by direction, position side, and minimum USD amount. Data available for binance, bybit, and okx exchanges.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string false Exchange name (e.g., deribit, binance, okx, bybit)
instrument_name query string false Full instrument identifier (e.g., BTC-PERPETUAL, BTC-29MAR24-70000-C)
direction query string false Filter by liquidation order direction (buy = short squeeze, sell = long liquidation)
position_side query string false Filter by position side being liquidated
min_amount_usd query number false Minimum liquidation value in USD. Filters out small liquidations.
sort query string false Sort field. Default: timestamp.
sort_dir query string false Sort direction. Defaults to DESC (newest/largest first).

Enumerated Values

Parameter Value
direction buy
direction sell
position_side long
position_side short
sort timestamp
sort amount_usd
sort price
sort_dir ASC
sort_dir DESC

Example responses

200 Response

{
  "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"
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none Inline
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Predictions

Predictions Catalog

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/predictions/catalog',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/predictions/catalog', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/predictions/catalog \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/predictions/catalog

Returns a list of available prediction market instruments. Supports filtering by exchange, category, event_slug, and keyword search.

Parameters

Name In Type Required Description
exchange query string false Filter by exchange
category query string false Filter by market category (e.g., crypto, politics, sports)
event_slug query string false Filter by event slug (parent event grouping)
keyword query string false Keyword search to filter instruments by name (case-insensitive partial match)

Example responses

200 Response

{
  "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"
    }
  ]
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Predictions Categories

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/predictions/categories',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/predictions/categories', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/predictions/categories \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/predictions/categories

Returns a list of all prediction market categories with instrument counts.

Parameters

Name In Type Required Description
exchange query string false Filter by exchange

Example responses

200 Response

[
  {
    "category": "crypto",
    "count": 45
  },
  {
    "category": "politics",
    "count": 32
  },
  {
    "category": "sports",
    "count": 18
  }
]

401 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Predictions Metadata

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/predictions/metadata?instrument_name=will-bitcoin-reach-250000-by-december-31-2026-YES',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/predictions/metadata', params={
  'instrument_name': 'will-bitcoin-reach-250000-by-december-31-2026-YES'
}, headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/predictions/metadata?instrument_name=will-bitcoin-reach-250000-by-december-31-2026-YES \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/predictions/metadata

Returns metadata for a specific prediction instrument including data availability, total record count, and pagination information.

Parameters

Name In Type Required Description
exchange query string false Exchange name
limit query number false Number of records per page for pagination calculation
instrument_name query string true Instrument name

Example responses

200 Response

{
  "exchange": "deribit",
  "instrument_name": "BTC-PERPETUAL",
  "start_date": "2020-01-01T00:00:00.000Z",
  "end_date": "2025-11-21T23:59:00.000Z",
  "total_count": 1500000,
  "total_pages": 15000
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK Metadata successfully retrieved MetadataResponseEntity
400 Bad Request Bad Request - Invalid parameters or no data found None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Predictions OHLCVT Market Data

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/predictions/ohlcvt',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/predictions/ohlcvt', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/predictions/ohlcvt \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/predictions/ohlcvt

Retrieves Open, High, Low, Close, Volume, Trades data for prediction market instruments. Prices represent probabilities (0.0-1.0).

Key Features: - Historical probability-based OHLC candlestick data - Buy/sell volume breakdown - Trade count statistics - Support for multiple resolutions (1m, 5m, 15m, 1h, 4h, 1d)

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name
instrument_name query string false Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)
category query string false Filter by market category (e.g., crypto, politics, sports)
event_slug query string false Filter by event slug (parent event grouping)
outcome query string false Filter by outcome side

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d
outcome YES
outcome NO

Example responses

200 Response

{
  "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK OHLCVT data successfully retrieved None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Predictions Ticker History

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/predictions/ticker-history',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/predictions/ticker-history', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/predictions/ticker-history \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/predictions/ticker-history

Returns historical ticker data for prediction instruments including probability OHLC, bid/ask spread, and liquidity metrics.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name
instrument_name query string false Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)
category query string false Filter by market category (e.g., crypto, politics, sports)
event_slug query string false Filter by event slug (parent event grouping)
outcome query string false Filter by outcome side

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d
outcome YES
outcome NO

Example responses

200 Response

{
  "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
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Predictions Trade History

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/predictions/trades',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/predictions/trades', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/predictions/trades \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/predictions/trades

Returns individual prediction market trades with price (probability), size, side, and outcome information. Supports cursor-based pagination.

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
exchange query string false Exchange name
instrument_name query string false Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)
category query string false Filter by market category (e.g., crypto, politics, sports)
event_slug query string false Filter by event slug (parent event grouping)
outcome query string false Filter by outcome side

Enumerated Values

Parameter Value
outcome YES
outcome NO

Example responses

200 Response

{
  "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
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Predictions L2 Orderbook Raw Snapshots

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/predictions/orderbook-raw',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/predictions/orderbook-raw', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/predictions/orderbook-raw \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/predictions/orderbook-raw

Returns raw L2 orderbook snapshots for prediction instruments with full bid/ask arrays.

Key Features: - Full bid/ask price levels - Pre-computed liquidity at 3 depth levels (10, 20, 50) - Order book imbalance per depth - Microprice (liquidity-weighted mid-price)

Parameters

Name In Type Required Description
start query string(date-time) false Start date in ISO 8601 format (UTC)
end query string(date-time) false End date in ISO 8601 format (UTC)
limit query number false Maximum number of records to return (1-1000)
cursor query string false Pagination cursor for fetching the next page of results. Use the value returned in meta.next_cursor from the previous response.
resolution query string false Time resolution for bucketing results
exchange query string false Exchange name
instrument_name query string false Full prediction instrument identifier (e.g., will-bitcoin-reach-250000-by-december-31-2026-YES)
category query string false Filter by market category (e.g., crypto, politics, sports)
event_slug query string false Filter by event slug (parent event grouping)
outcome query string false Filter by outcome side

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d
outcome YES
outcome NO

Example responses

200 Response

{
  "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 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK Raw L2 orderbook snapshots successfully retrieved None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

Predictions Snapshot

Code samples


const headers = {
  'Accept':'application/json',
  'X-API-Key':'API_KEY'
};

fetch('/api/v1/predictions/snapshot',
{
  method: 'GET',

  headers: headers
})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests
headers = {
  'Accept': 'application/json',
  'X-API-Key': 'API_KEY'
}

r = requests.get('/api/v1/predictions/snapshot', headers = headers)

print(r.json())

# You can also use wget
curl -X GET /api/v1/predictions/snapshot \
  -H 'Accept: application/json' \
  -H 'X-API-Key: API_KEY'

GET /api/v1/predictions/snapshot

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.

Parameters

Name In Type Required Description
exchange query string false Exchange name
date query string(date-time) false Exact date/time for the snapshot in ISO 8601 format (UTC). If omitted, returns the latest available snapshot.
resolution query string false Time resolution for the snapshot. At 1m (default), returns raw minute-level data. At higher resolutions (5m, 1h, etc.), data is aggregated into the specified bucket.
category query string false Filter by market category (e.g., crypto, politics, sports)
event_slug query string false Filter by event slug

Enumerated Values

Parameter Value
resolution 1m
resolution 5m
resolution 15m
resolution 1h
resolution 4h
resolution 1d

Example responses

200 Response

{
  "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"
  }
}

400 Response

{
  "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 Response

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized"
}

429 Response

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests"
}

Responses

Status Meaning Description Schema
200 OK none None
400 Bad Request Bad Request - Invalid parameters None
401 Unauthorized Unauthorized - Invalid or missing API key None
429 Too Many Requests Too Many Requests - Rate limit exceeded None

Response Schema

McpEndpoint

McpEndpointController_handlePost

Code samples


fetch('/api/v1/mcp',
{
  method: 'POST'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests

r = requests.post('/api/v1/mcp')

print(r.json())

# You can also use wget
curl -X POST /api/v1/mcp

POST /api/v1/mcp

Responses

Status Meaning Description Schema
201 Created none None

McpEndpointController_handleGet

Code samples


fetch('/api/v1/mcp',
{
  method: 'GET'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests

r = requests.get('/api/v1/mcp')

print(r.json())

# You can also use wget
curl -X GET /api/v1/mcp

GET /api/v1/mcp

Responses

Status Meaning Description Schema
200 OK none None

McpEndpointController_handleDelete

Code samples


fetch('/api/v1/mcp',
{
  method: 'DELETE'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests

r = requests.delete('/api/v1/mcp')

print(r.json())

# You can also use wget
curl -X DELETE /api/v1/mcp

DELETE /api/v1/mcp

Responses

Status Meaning Description Schema
200 OK none None

OAuthLogin

OAuthLoginController_showLoginPage

Code samples


fetch('/oauth/login',
{
  method: 'GET'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests

r = requests.get('/oauth/login')

print(r.json())

# You can also use wget
curl -X GET /oauth/login

GET /oauth/login

Responses

Status Meaning Description Schema
200 OK none None

OAuthLoginController_handleLogin

Code samples


fetch('/oauth/login',
{
  method: 'POST'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests

r = requests.post('/oauth/login')

print(r.json())

# You can also use wget
curl -X POST /oauth/login

POST /oauth/login

Responses

Status Meaning Description Schema
201 Created none None

McpOAuth

McpOAuthController_getProtectedResourceMetadata

Code samples


fetch('/.well-known/oauth-protected-resource',
{
  method: 'GET'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests

r = requests.get('/.well-known/oauth-protected-resource')

print(r.json())

# You can also use wget
curl -X GET /.well-known/oauth-protected-resource

GET /.well-known/oauth-protected-resource

Responses

Status Meaning Description Schema
200 OK none None

McpOAuthController_getAuthorizationServerMetadata

Code samples


fetch('/.well-known/oauth-authorization-server',
{
  method: 'GET'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests

r = requests.get('/.well-known/oauth-authorization-server')

print(r.json())

# You can also use wget
curl -X GET /.well-known/oauth-authorization-server

GET /.well-known/oauth-authorization-server

Responses

Status Meaning Description Schema
200 OK none None

McpOAuthController_registerClient

Code samples


fetch('/oauth/register',
{
  method: 'POST'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests

r = requests.post('/oauth/register')

print(r.json())

# You can also use wget
curl -X POST /oauth/register

POST /oauth/register

Responses

Status Meaning Description Schema
201 Created none None

McpOAuthController_authorize

Code samples


fetch('/oauth/authorize',
{
  method: 'GET'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests

r = requests.get('/oauth/authorize')

print(r.json())

# You can also use wget
curl -X GET /oauth/authorize

GET /oauth/authorize

Responses

Status Meaning Description Schema
200 OK none None

McpOAuthController_handleProviderCallback

Code samples


fetch('/oauth/callback',
{
  method: 'GET'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests

r = requests.get('/oauth/callback')

print(r.json())

# You can also use wget
curl -X GET /oauth/callback

GET /oauth/callback

Responses

Status Meaning Description Schema
200 OK none None

McpOAuthController_exchangeToken

Code samples


fetch('/oauth/token',
{
  method: 'POST'

})
.then(function(res) {
    return res.json();
}).then(function(body) {
    console.log(body);
});

import requests

r = requests.post('/oauth/token')

print(r.json())

# You can also use wget
curl -X POST /oauth/token

POST /oauth/token

Responses

Status Meaning Description Schema
200 OK none None

Schemas

PaginationMetaEntity

{
  "next_cursor": "eyJpZCI6MTIzNDU2NzgsInRzIjoxNjQwOTk1MjAwfQ=="
}

Properties

Name Type Required Restrictions Description
next_cursor string¦null true none 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.

PaginatedResponse

{
  "data": [
    []
  ],
  "meta": {
    "next_cursor": "eyJpZCI6MTIzNDU2NzgsInRzIjoxNjQwOTk1MjAwfQ=="
  }
}

Properties

Name Type Required Restrictions Description
data [array] true none none
meta PaginationMetaEntity true none none

OptionsOhlcvtEntity

{
  "date": "2024-12-10T00:00:00.000Z",
  "exchange": "deribit",
  "instrument_name": "BTC-25DEC26",
  "currency": "BTC",
  "open": 42150.5,
  "high": 42890.75,
  "low": 41920.25,
  "close": 42500,
  "vwap": 42350.5,
  "volume": 2700.8,
  "buy_volume": 1500.5,
  "sell_volume": 1200.3,
  "trades_count": 270,
  "buy_trades_count": 150,
  "sell_trades_count": 120,
  "liquidation_short_volume": 50.25,
  "liquidation_long_volume": 75.5,
  "block_trade_buy_volume": 100,
  "block_trade_sell_volume": 150,
  "mark_price": 42500.5,
  "index_price": 42505,
  "days_to_expiry": 90.5
}

Properties

Name Type Required Restrictions Description
date string(date-time) true none Date in ISO 8601 format (UTC)
exchange string false none Exchange name
instrument_name string false none Instrument name
currency string false none Base currency
open number true none Opening trade price in the time bucket
high number true none Highest trade price in the time bucket
low number true none Lowest trade price in the time bucket
close number true none Closing trade price in the time bucket
vwap number true none Volume Weighted Average Price (VWAP)
volume number true none Total volume (buy + sell)
buy_volume number true none Buy-side volume (direction = buy)
sell_volume number true none Sell-side volume (direction = sell)
trades_count number true none Total number of trades (buy + sell)
buy_trades_count number true none Number of buy trades
sell_trades_count number true none Number of sell trades
liquidation_short_volume number¦null false none Volume from short liquidations (forced buy orders)
liquidation_long_volume number¦null false none Volume from long liquidations (forced sell orders)
block_trade_buy_volume number¦null false none Volume from block trade buys
block_trade_sell_volume number¦null false none Volume from block trade sells
mark_price number¦null false none Mark price at bar close (for reference)
index_price number¦null false none Index price at bar close (for reference)
days_to_expiry number¦null false none Days until expiry (NULL for PERPETUAL)

BaseVolumeDataEntity

{
  "date": "2024-12-10T00:00:00.000Z",
  "exchange": "deribit",
  "instrument_name": "BTC-25DEC26",
  "currency": "BTC",
  "volume_24h": 1500.25,
  "volume_usd_24h": 95000000.5,
  "buy_volume": 750.12,
  "sell_volume": 680.5,
  "volume": 1430.62,
  "buy_trades_count": 245,
  "sell_trades_count": 198,
  "trades_count": 443
}

Properties

Name Type Required Restrictions Description
date string(date-time) true none Date in ISO 8601 format (UTC)
exchange string false none Exchange name
instrument_name string false none Instrument name
currency string false none Base currency
volume_24h number true none 24-hour rolling volume (base currency)
volume_usd_24h number¦null false none 24-hour rolling volume in USD terms
buy_volume number¦null false none Buy volume in the resolution bucket
sell_volume number¦null false none Sell volume in the resolution bucket
volume number¦null false none Total volume (buy + sell) in the resolution bucket
buy_trades_count number¦null false none Number of buy trades in the resolution bucket
sell_trades_count number¦null false none Number of sell trades in the resolution bucket
trades_count number¦null false none Total number of trades in the resolution bucket

OptionsTradeEntity

{
  "instrument_name": "BTC-25DEC26",
  "timestamp": 1234567890123,
  "date": "2023-06-15T14:30:00.000Z",
  "trade_id": "trade_123456",
  "block_trade_id": "block_123",
  "combo_id": "combo_123",
  "combo_trade_id": "combo_trade_123",
  "strategy": "strategy_1",
  "direction": "buy",
  "tick_direction": 1,
  "amount": 1.5,
  "price": 45000.5,
  "index_price": 45010,
  "oi_change": 100,
  "open_interest": 10000,
  "oi_before": 9900
}

Properties

Name Type Required Restrictions Description
instrument_name string true none Instrument identifier
timestamp number true none Unix timestamp in milliseconds
date string true none ISO 8601 formatted date string
trade_id string true none Unique trade identifier
block_trade_id string false none Block trade identifier if applicable
combo_id string false none Combo trade identifier if applicable
combo_trade_id string false none Combo trade ID if part of combo
strategy string false none Trading strategy identifier
direction string true none Trade direction
tick_direction object¦null false none Tick direction indicator
amount number true none Trade amount/size
price number true none Trade execution price
index_price object¦null false none Index price at time of trade
oi_change object¦null false none Change in open interest
open_interest object¦null false none Open interest after trade
oi_before object¦null false none Open interest before trade

Enumerated Values

Property Value
direction buy
direction sell

BaseOpenInterestEntity

{
  "date": "2024-12-10T00:00:00.000Z",
  "exchange": "deribit",
  "instrument_name": "BTC-25DEC26",
  "currency": "BTC",
  "oi_open": 22000.1,
  "oi_high": 22500.3,
  "oi_low": 21950,
  "oi_close": 22350.5
}

Properties

Name Type Required Restrictions Description
date string(date-time) true none Date in ISO 8601 format (UTC)
exchange string false none Exchange name
instrument_name string false none Instrument name
currency string false none Base currency
oi_open number true none Open interest at time bucket start (base units)
oi_high number true none Highest open interest during time bucket (base units)
oi_low number true none Lowest open interest during time bucket (base units)
oi_close number true none Open interest at time bucket end (base units)

OptionsFlowBucketEntity

{
  "date": "2024-12-10T00:00:00.000Z",
  "trade_count": 0,
  "buy_count": 0,
  "sell_count": 0,
  "total_amount": 0,
  "buy_amount": 0,
  "sell_amount": 0,
  "total_premium_usd": 0,
  "buy_premium_usd": 0,
  "sell_premium_usd": 0,
  "total_notional": 0,
  "buy_notional": 0,
  "sell_notional": 0,
  "call_premium_usd": 0,
  "put_premium_usd": 0,
  "call_count": 0,
  "put_count": 0,
  "block_trade_count": 0,
  "block_premium_usd": 0,
  "net_oi_change": 0,
  "avg_iv": {},
  "avg_abs_delta": {}
}

Properties

Name Type Required Restrictions Description
date string(date-time) true none Date in ISO 8601 format (UTC)
trade_count number true none Total number of trades in bucket
buy_count number true none Number of buy trades
sell_count number true none Number of sell trades
total_amount number true none Total trade amount (contracts)
buy_amount number true none Buy side amount (contracts)
sell_amount number true none Sell side amount (contracts)
total_premium_usd number true none Total premium in USD
buy_premium_usd number true none Buy side premium in USD
sell_premium_usd number true none Sell side premium in USD
total_notional number true none Total notional in USD
buy_notional number true none Buy side notional in USD
sell_notional number true none Sell side notional in USD
call_premium_usd number true none Call option premium in USD
put_premium_usd number true none Put option premium in USD
call_count number true none Number of call option trades
put_count number true none Number of put option trades
block_trade_count number true none Number of block trades
block_premium_usd number true none Block trade premium in USD
net_oi_change number true none Net open interest change
avg_iv object¦null true none Average implied volatility
avg_abs_delta object¦null true none Average absolute delta

OptionsFlowActiveStrikeEntity

{
  "instrument_name": "string",
  "trade_count": 0,
  "premium_usd": 0,
  "net_oi_change": 0
}

Properties

Name Type Required Restrictions Description
instrument_name string true none Instrument name
trade_count number true none Number of trades on this instrument
premium_usd number true none Total premium in USD
net_oi_change number true none Net open interest change

OptionsFlowSummaryEntity

{
  "total_trades": 0,
  "total_premium_usd": 0,
  "total_notional_usd": 0,
  "call_premium_usd": 0,
  "put_premium_usd": 0,
  "buy_premium_usd": 0,
  "sell_premium_usd": 0,
  "net_delta": 0,
  "net_gamma": 0,
  "net_vega": 0,
  "opening_trades": 0,
  "closing_trades": 0,
  "net_oi_change": 0,
  "block_trade_count": 0,
  "block_trade_premium_usd": 0,
  "most_active_strikes": [
    {
      "instrument_name": "string",
      "trade_count": 0,
      "premium_usd": 0,
      "net_oi_change": 0
    }
  ]
}

Properties

Name Type Required Restrictions Description
total_trades number true none Total number of trades in window
total_premium_usd number true none Total premium across all trades in USD
total_notional_usd number true none Total notional across all trades in USD
call_premium_usd number true none Total premium for call options in USD
put_premium_usd number true none Total premium for put options in USD
buy_premium_usd number true none Total premium for buy-side trades in USD
sell_premium_usd number true none Total premium for sell-side trades in USD
net_delta number true none Net delta across all trades
net_gamma number true none Net gamma across all trades
net_vega number true none Net vega across all trades
opening_trades number true none Number of opening trades (strategy starts with Opened)
closing_trades number true none Number of closing trades (strategy starts with Closed)
net_oi_change number true none Net open interest change
block_trade_count number true none Number of block trades
block_trade_premium_usd number true none Block trade premium in USD
most_active_strikes [OptionsFlowActiveStrikeEntity] true none Most active instruments by premium

MetadataResponseEntity

{
  "exchange": "deribit",
  "instrument_name": "BTC-PERPETUAL",
  "start_date": "2020-01-01T00:00:00.000Z",
  "end_date": "2025-11-21T23:59:00.000Z",
  "total_count": 1500000,
  "total_pages": 15000
}

Properties

Name Type Required Restrictions Description
exchange string true none Exchange name
instrument_name string true none Instrument name
start_date string true none Start date of available data (ISO 8601 format)
end_date string true none End date of available data (ISO 8601 format)
total_count number true none Total count of records available
total_pages number true none Total number of pages based on the provided limit

FuturesOhlcvtEntity

{
  "date": "2024-12-10T00:00:00.000Z",
  "exchange": "deribit",
  "instrument_name": "BTC-25DEC26",
  "currency": "BTC",
  "open": 42150.5,
  "high": 42890.75,
  "low": 41920.25,
  "close": 42500,
  "vwap": 42350.5,
  "volume": 2700.8,
  "buy_volume": 1500.5,
  "sell_volume": 1200.3,
  "trades_count": 270,
  "buy_trades_count": 150,
  "sell_trades_count": 120,
  "liquidation_short_volume": 50.25,
  "liquidation_long_volume": 75.5,
  "block_trade_buy_volume": 100,
  "block_trade_sell_volume": 150,
  "mark_price": 42500.5,
  "index_price": 42505,
  "days_to_expiry": 90.5
}

Properties

Name Type Required Restrictions Description
date string(date-time) true none Date in ISO 8601 format (UTC)
exchange string false none Exchange name
instrument_name string false none Instrument name
currency string false none Base currency
open number true none Opening trade price in the time bucket
high number true none Highest trade price in the time bucket
low number true none Lowest trade price in the time bucket
close number true none Closing trade price in the time bucket
vwap number true none Volume Weighted Average Price (VWAP)
volume number true none Total volume (buy + sell)
buy_volume number true none Buy-side volume (direction = buy)
sell_volume number true none Sell-side volume (direction = sell)
trades_count number true none Total number of trades (buy + sell)
buy_trades_count number true none Number of buy trades
sell_trades_count number true none Number of sell trades
liquidation_short_volume number¦null false none Volume from short liquidations (forced buy orders)
liquidation_long_volume number¦null false none Volume from long liquidations (forced sell orders)
block_trade_buy_volume number¦null false none Volume from block trade buys
block_trade_sell_volume number¦null false none Volume from block trade sells
mark_price number¦null false none Mark price at bar close (for reference)
index_price number¦null false none Index price at bar close (for reference)
days_to_expiry number¦null false none Days until expiry (NULL for PERPETUAL)

VolSurfaceEntity

{
  "date": "2024-12-10T00:00:00.000Z",
  "exchange": "deribit",
  "currency": "BTC",
  "maturity": "25DEC26",
  "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
}

Properties

Name Type Required Restrictions Description
date string(date-time) true none Date in ISO 8601 format (UTC)
exchange string true none Exchange name
currency string true none Base currency
maturity string true none Maturity date string
days_to_expiry number true none Days until expiry
underlying_price number true none Underlying asset price
atm_iv number¦null false none At-the-money implied volatility (call with delta closest to 0.5)
call_25d_iv number¦null false none 25-delta call implied volatility
put_25d_iv number¦null false none 25-delta put implied volatility
skew_25d number¦null false none 25-delta skew (put_25d_iv - call_25d_iv)
butterfly_25d number¦null false none 25-delta butterfly ((call_25d_iv + put_25d_iv) / 2 - atm_iv)

TermStructureEntity

{
  "tenor": 30,
  "atm_iv": 38.55,
  "call_25d_iv": 36.2,
  "put_25d_iv": 41.9,
  "skew_25d": 5.7,
  "butterfly_25d": 0.5
}

Properties

Name Type Required Restrictions Description
tenor number true none Constant-maturity tenor in days
atm_iv number¦null false none Interpolated ATM implied volatility at this tenor
call_25d_iv number¦null false none Interpolated 25-delta call implied volatility at this tenor
put_25d_iv number¦null false none Interpolated 25-delta put implied volatility at this tenor
skew_25d number¦null false none 25-delta skew (put_25d_iv - call_25d_iv)
butterfly_25d number¦null false none 25-delta butterfly ((call_25d_iv + put_25d_iv) / 2 - atm_iv)

ErrorResponseDto

{
  "statusCode": 400,
  "message": [
    "symbol must be a string",
    "exchange is required"
  ],
  "error": "Bad Request",
  "timestamp": "2024-01-01T12:00:00Z",
  "path": "/api/v1/ohlc/price"
}

Properties

Name Type Required Restrictions Description
statusCode number true none HTTP status code
message any true none Error message(s). Can be a string or array of validation errors

oneOf

Name Type Required Restrictions Description
» anonymous string false none none

xor

Name Type Required Restrictions Description
» anonymous [string] false none none

continued

Name Type Required Restrictions Description
error string true none Error type identifier
timestamp string(date-time) false none Timestamp when the error occurred
path string false none API request path that caused the error

UnauthorizedErrorDto

{
  "statusCode": 401,
  "message": "Invalid API key",
  "error": "Unauthorized",
  "timestamp": "2024-01-01T12:00:00Z",
  "path": "/api/v1/ohlc/price"
}

Properties

Name Type Required Restrictions Description
statusCode number true none HTTP 401 status code
message any true none Unauthorized error message

oneOf

Name Type Required Restrictions Description
» anonymous string false none none

xor

Name Type Required Restrictions Description
» anonymous [string] false none none

continued

Name Type Required Restrictions Description
error string true none Error type
timestamp string(date-time) false none Timestamp when the error occurred
path string false none API request path that caused the error

RateLimitErrorDto

{
  "statusCode": 429,
  "message": "Rate limit exceeded. Please retry after 60 seconds",
  "error": "Too Many Requests",
  "timestamp": "2024-01-01T12:00:00Z",
  "path": "/api/v1/ohlc/price",
  "retryAfter": 60,
  "limit": 1000,
  "remaining": 0
}

Properties

Name Type Required Restrictions Description
statusCode number true none HTTP 429 status code
message any true none Rate limit error message

oneOf

Name Type Required Restrictions Description
» anonymous string false none none

xor

Name Type Required Restrictions Description
» anonymous [string] false none none

continued

Name Type Required Restrictions Description
error string true none Error type
timestamp string(date-time) false none Timestamp when the error occurred
path string false none API request path that caused the error
retryAfter number false none Number of seconds to wait before retrying
limit number false none Current rate limit quota
remaining number false none Number of requests remaining in current window

ValidationErrorDto

{
  "statusCode": 400,
  "message": [
    "symbol must be a string",
    "interval must be one of: 1m, 5m, 15m, 30m, 1h, 4h, 6h, 1d"
  ],
  "error": "Bad Request",
  "timestamp": "2024-01-01T12:00:00Z",
  "path": "/api/v1/ohlc/price"
}

Properties

Name Type Required Restrictions Description
statusCode number true none HTTP 400 status code
message [oneOf] true none Validation error messages

oneOf

Name Type Required Restrictions Description
» anonymous string false none none

xor

Name Type Required Restrictions Description
» anonymous [string] false none none

continued

Name Type Required Restrictions Description
error string true none Error type
timestamp string(date-time) false none Timestamp when the error occurred
path string false none API request path that caused the error

ServerErrorDto

{
  "statusCode": 500,
  "message": "An unexpected error occurred. Please try again later.",
  "error": "Internal Server Error",
  "timestamp": "2024-01-01T12:00:00Z",
  "path": "/api/v1/ohlc/price",
  "errorId": "ERR-123456-ABCD"
}

Properties

Name Type Required Restrictions Description
statusCode number true none HTTP 500 status code
message any true none Internal server error message

oneOf

Name Type Required Restrictions Description
» anonymous string false none none

xor

Name Type Required Restrictions Description
» anonymous [string] false none none

continued

Name Type Required Restrictions Description
error string true none Error type
timestamp string(date-time) false none Timestamp when the error occurred
path string false none API request path that caused the error
errorId string false none Error tracking ID for support reference