Options · Chains
Options chain
/v1/options/chainoptionsChainThe current state of every contract of an underlying: best bid and offer, the trading day so far (open, high, low, last, volume), open interest, Greeks and implied volatility. Greeks are computed during the regular session; a component the service cannot provide is null. Rows are ordered by date_of_expiry, strike, contract_type (call before put) and paginated with cursor_id; a page reads one expiration at a time and may hold fewer rows than limit. When no date_of_expiry is given the chain covers the expirations within max_dte days (default 30). Reads of an underlying that trades overnight (SPX, SPXW, XSP, VIX, VIXW, RUT, RUTW) outside weekday 09:30-16:15 ET, the curb session included, require the overnight entitlement; during the regular session, parts of a contract whose latest quote or trade is from the overnight session are null for plans without it (listed in meta.coverage.missing and counted in meta.coverage.withheld).
Example request
curl -sS --get "https://api.ordermap.si/v1/options/chain" \
-H "Authorization: Bearer $ORDERMAP_API_KEY" \
--data-urlencode underlying_symbol=SPXWconst params = new URLSearchParams({
underlying_symbol: "SPXW",
});
const res = await fetch(`https://api.ordermap.si/v1/options/chain?${params}`, {
headers: { Authorization: `Bearer ${process.env.ORDERMAP_API_KEY}` },
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const { data, meta } = await res.json();
console.log(data, meta.coverage);
// Paginated: repeat with cursor_id set to pagination.next_cursor_id until it is null.Set ORDERMAP_API_KEY to your key. Replace the dates with a recent trading date.
Parameters
8 parameters, 1 required.
| Parameter | Type and limits | Description |
|---|---|---|
underlying_queryrequired | stringat most 8 characterspattern ^[A-Za-z][A-Za-z0-9.]{0,7}$ | Underlying: an option root (SPXW, QQQ, NDXP ...) or an index family: SPX covers the SPX and SPXW roots, NDX the NDX and NDXP roots, RUT the RUT and RUTW roots. Rows name the root of each contract. |
date_queryoptional | stringdate | Only this expiration, YYYY-MM-DD. |
contract_queryoptional | stringcallput | Only calls or only puts. |
min_queryoptional | number> 0max 99999.999 | Lowest strike to return, in dollars. |
max_queryoptional | number> 0max 99999.999 | Highest strike to return, in dollars. |
max_queryoptional | integermin 0max 1000 | Without date_of_expiry: include expirations up to this many days away (default 30). |
limitqueryoptional | integerdefault 1000min 1max 2500 | Maximum rows to return. |
cursor_queryoptional | stringat most 1024 characters | Opaque cursor returned as pagination.next_cursor_id; resumes the same query on the next page. |
Response
| Status | Meaning | Body |
|---|---|---|
200 | Successful response. | Schema below |
400 | Invalid, unknown or repeated parameters, or an invalid cursor. | Error object |
401 | Missing or invalid API key. | Error object |
403 | The plan, dataset release or account state does not allow this request. | Error object |
422 | The request is valid but no data exists for it. | Error object |
429 | Rate limit, burst limit or cooldown; wait Retry-After seconds.Retry-After | Error object |
500 | Internal error. | Error object |
503 | Data temporarily unavailable; retry after Retry-After seconds.Retry-After | Error object |
504 | The request timed out. | Error object |
Authenticated responses carry the X-RateLimit-* headers (see rate limits); 429 and 503 add Retry-After.
200 response body
dataarray<object>required41 fields insideasknumber | nullrequiredBest offer price.ask_sizeinteger | nullrequiredContracts offered.bidnumber | nullrequiredBest bid price.bid_sizeinteger | nullrequiredContracts bid.charmnumber | nullrequiredChange in delta per day (delta decay). Null when not part of the requested order or outside the regular session.closenumber | nullrequiredLatest trade price.colornumber | nullrequiredChange in gamma per day. Null when not part of the requested order or outside the regular session.contract_typestringrequiredCall or put.callputd1number | nullrequiredThe d1 term of the pricing model. Null when not part of the requested order or outside the regular session.d2number | nullrequiredThe d2 term of the pricing model. Null when not part of the requested order or outside the regular session.date_of_expirystringdaterequiredExpiration date.day_timestampinteger | nullunix-msrequiredTime the day statistics were taken. Unix epoch milliseconds (UTC).deltanumber | nullrequiredChange in the option price for a $1 move in the underlying. Null when not part of the requested order or outside the regular session.dual_deltanumber | nullrequiredChange in the option price for a unit move in the strike. Null when not part of the requested order or outside the regular session.dual_gammanumber | nullrequiredSecond derivative of the option price with respect to the strike. Null when not part of the requested order or outside the regular session.epsilonnumber | nullrequiredChange in the option price for a one point move in the dividend yield. Null when not part of the requested order or outside the regular session.gammanumber | nullrequiredChange in delta for a $1 move in the underlying. Null when not part of the requested order or outside the regular session.highnumber | nullrequiredHighest trade price of the day.implied_volatilitynumber | nullrequiredImplied volatility as a decimal (0.18 = 18%).lambdanumber | nullrequiredLeverage: percentage change in the option price per percentage change in the underlying. Null when not part of the requested order or outside the regular session.lownumber | nullrequiredLowest trade price of the day.opennumber | nullrequiredFirst trade price of the day.open_interestinteger | nullrequiredOpen interest published at the start of the day.option_symbolstringrequiredOCC option symbol of the contract: root padded to six characters, expiration YYMMDD, C or P and the strike in thousandths over eight digits.rhonumber | nullrequiredChange in the option price for a one point move in the interest rate. Null when not part of the requested order or outside the regular session.speednumber | nullrequiredChange in gamma for a $1 move in the underlying. Null when not part of the requested order or outside the regular session.strikenumberrequiredStrike price in dollars.thetanumber | nullrequiredTime decay: change in the option price per calendar day. Null when not part of the requested order or outside the regular session.timestampinteger | nullunix-msrequiredTime of the quote. Unix epoch milliseconds (UTC).trade_countinteger | nullrequiredTrades today.ultimanumber | nullrequiredChange in vomma for a one point move in implied volatility. Null when not part of the requested order or outside the regular session.underlying_pricenumber | nullrequiredUnderlying price used by the model.underlying_symbolstringrequiredOption root of the contract.underlying_timestampinteger | nullunix-msrequiredTime of the underlying price used. Unix epoch milliseconds (UTC).vannanumber | nullrequiredChange in delta for a one point move in implied volatility. Null when not part of the requested order or outside the regular session.veganumber | nullrequiredChange in the option price for a one point move in implied volatility. Null when not part of the requested order or outside the regular session.veranumber | nullrequiredChange in rho for a one point move in implied volatility. Null when not part of the requested order or outside the regular session.vetanumber | nullrequiredChange in vega per day. Null when not part of the requested order or outside the regular session.volumeinteger | nullrequiredContracts traded today.vommanumber | nullrequiredChange in vega for a one point move in implied volatility. Null when not part of the requested order or outside the regular session.zommanumber | nullrequiredChange in gamma for a one point move in implied volatility. Null when not part of the requested order or outside the regular session.
metaobjectrequiredMeta objectpaginationobjectrequiredPagination object
Example response
{
"data": [
{
"option_symbol": "SPXW 261016C05800000",
"underlying_symbol": "SPXW",
"date_of_expiry": "2026-10-16",
"strike": 5800,
"contract_type": "call",
"timestamp": 1792159198500,
"bid": 12.3,
"bid_size": 10,
"ask": 12.6,
"ask_size": 12,
"open": 11,
"high": 13,
"low": 10.5,
"close": 12.4,
"volume": 800,
"trade_count": 60,
"day_timestamp": 1792159140000,
"open_interest": 4321,
"delta": 0.5123,
"theta": -3.41,
"vega": 2.87,
"rho": 0.91,
"epsilon": -0.77,
"lambda": 48.2,
"gamma": 0.0042,
"vanna": -0.012,
"charm": 0.0031,
"vomma": 0.11,
"veta": 0.04,
"vera": 0.02,
"speed": -0.00001,
"zomma": -0.0002,
"color": -0.0001,
"ultima": -0.03,
"d1": 0.03,
"d2": 0.01,
"dual_delta": -0.48,
"dual_gamma": 0.0009,
"implied_volatility": 0.182,
"underlying_timestamp": 1792159198000,
"underlying_price": 5801.2
}
],
"meta": {
"as_of": 1760659200123,
"coverage": {
"complete": true
},
"delay_ms": 0,
"delayed": false,
"request_id": "0199f0c2-5a1e-7c3b-9d4e-2b6f8a1c3d5e",
"source": "opra"
},
"pagination": {
"count": 1,
"has_more": false,
"limit": 1000,
"next_cursor_id": null,
"next_url": null
}
}Values are illustrative. Missing values are null, never 0.