Skip to main content
GET
/
options
/
chain
Filtered options chain
curl --request GET \
  --url https://api.example.com/options/chain \
  --header 'X-API-Key: <api-key>'
{
  "data": {
    "contracts": [
      {
        "strike": 123,
        "expiry": "<string>",
        "dte": 123,
        "oi": 123,
        "iv": 123,
        "mark": 123,
        "bid": 123,
        "ask": 123,
        "volume": 123,
        "notional_volume": 123,
        "trade_count": 123,
        "delta": 123,
        "gamma": 123,
        "theta": 123,
        "vega": 123,
        "vanna": 123,
        "charm": 123,
        "gex": 123
      }
    ],
    "aggregates": {
      "net_gex": 123,
      "call_gex": 123,
      "put_gex": 123,
      "total_oi": 123,
      "call_oi": 123,
      "put_oi": 123,
      "contract_count": 123,
      "pcr": 123,
      "atm_iv": 123
    },
    "available_expiries": [
      "<string>"
    ],
    "truncated": true,
    "total_matching_count": 123,
    "max_contracts": 123
  },
  "meta": {
    "version": "<string>",
    "timestamp": "<string>",
    "request_id": "<string>",
    "symbol": "<string>",
    "spot_price": 123,
    "computed_at": "<string>",
    "freshness_seconds": 123,
    "source": [
      "<string>"
    ],
    "exchanges_filtered": [
      "<string>"
    ],
    "rate_limit": {},
    "extra": {}
  },
  "success": true
}

Documentation Index

Fetch the complete documentation index at: https://docs.backquant.com/llms.txt

Use this file to discover all available pages before exploring further.

Filtered chain with two-layer projection (?fields= top-level, ?include= per-contract) and a payload cap (?max_contracts). Cached 30s per filter combination.

See also

Greeks beyond delta

Authorizations

X-API-Key
string
header
required

Your BackQuant API key (same key as v1)

Headers

X-API-Key
string | null

Query Parameters

symbol
enum<string>
default:BTCUSDT

Trading symbol: BTCUSDT, ETHUSDT, SOLUSDT, or HYPEUSDT.

Available options:
BTCUSDT,
ETHUSDT,
SOLUSDT,
HYPEUSDT
expiries
string | null

CSV of expiry tokens (e.g. 28MAR25,25APR25)

dte_min
integer | null

Inclusive lower bound on days-to-expiry.

Required range: 0 <= x <= 720
dte_max
integer | null

Inclusive upper bound on days-to-expiry.

Required range: 0 <= x <= 720
oi_min
number | null

Minimum open interest per contract.

Required range: x >= 0
oi_max
number | null

Maximum open interest per contract.

Required range: x >= 0
delta_min
number | null

Minimum |delta| (0..1).

Required range: 0 <= x <= 1
delta_max
number | null

Maximum |delta| (0..1).

Required range: 0 <= x <= 1
strike_min
number | null

Minimum strike price (absolute).

Required range: x >= 0
strike_max
number | null

Maximum strike price (absolute).

Required range: x >= 0
moneyness_min
number | null

Strike/spot lower bound (e.g. 0.9 for ATM-10%).

Required range: 0 <= x <= 10
moneyness_max
number | null

Strike/spot upper bound (e.g. 1.1 for ATM+10%).

Required range: 0 <= x <= 10
option_type
enum<string>
default:both

Filter to call, put, or both contract types.

Available options:
call,
put,
both
max_contracts
integer
default:2000

Cap on the number of contracts returned (default 2000, hard ceiling 5000). When more contracts match the filters, the response is truncated to the closest-to-spot subset and truncated=true is set with total_matching_count so the client knows to narrow the filter.

Required range: 1 <= x <= 5000
fields
string | null

Top-level projection: aggregates,available_expiries,contracts

include
string | null

Per-contract projection: bid_ask,gex,greeks,iv,oi,volume. Default is all sections.

Response

Successful Response

data
ChainData · object
required
meta
V2Meta · object
required

The meta block returned alongside every v2 response.

Every field after version/timestamp is optional because endpoints attach different combinations — e.g. /v2/status skips symbol, the chain endpoint sets extra.filter_hash, etc. Listing them here means SDKs get a typed accessor for each instead of a generic meta: dict.

success
boolean
default:true