Options · Reference and discovery
Options expirations
Listed expirations of an underlying.
GET
/v1/options/expirationsoptionsExpirationsEvery listed expiration with days to expiry, settlement style, open interest, volume, the forward, at-the-money implied volatility and the expected move. SPX returns both the SPX (monthly, AM) and SPXW (weekly and daily, PM) roots; SPXW only the weekly root.
Example request
curl -sS --get "https://api.ordermap.si/v1/options/expirations" \
-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/expirations?${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);Set ORDERMAP_API_KEY to your key. Replace the dates with a recent trading date.
Parameters
1 parameter, 1 required.
| Parameter | Type and limits | Description |
|---|---|---|
underlying_queryrequired | stringat most 8 characterspattern ^[A-Za-z][A-Za-z0-9.]{0,7}$ | Option root: SPX (both roots), SPXW, QQQ, NDXP, RUTW, XSP ... |
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>required18 fields insideatm_implied_volatilitynumber | nullrequiredAt-the-money implied volatility.contractsintegerrequiredListed contracts.date_of_expirystringdaterequiredExpiration date.days_to_expiryintegerrequiredCalendar days from the trading date to expiration.expected_movenumber | nullrequiredExpected move in index points or dollars.expiredbooleanrequiredThe expiration time has passed.expires_atinteger | nullunix-msrequiredExpiration instant. Unix epoch milliseconds (UTC).forwardnumber | nullrequiredForward price implied by the chain.forward_methodstring | nullrequiredHow the forward was obtained.parityinterpolatedcarrycarriednullopen_interest_callintegerrequiredCall open interest.open_interest_putintegerrequiredPut open interest.settlementstringrequiredSettlement style.ampmstrike_maxnumber | nullrequiredHighest listed strike.strike_minnumber | nullrequiredLowest listed strike.strike_stepnumber | nullrequiredStrike spacing near the money.underlying_symbolstringrequiredOption root of this expiration.volume_callintegerrequiredCall volume today.volume_putintegerrequiredPut volume today.
metaobjectrequiredMeta object
Example response
{
"data": [
{
"atm_implied_volatility": 0.142,
"contracts": 612,
"date_of_expiry": "2026-10-16",
"days_to_expiry": 0,
"expected_move": 24.6,
"expired": false,
"expires_at": 1760644800000,
"forward": 6021.4,
"forward_method": "parity",
"open_interest_call": 41200,
"open_interest_put": 52800,
"settlement": "pm",
"strike_max": 7500,
"strike_min": 4500,
"strike_step": 5,
"underlying_symbol": "SPXW",
"volume_call": 183000,
"volume_put": 201000
}
],
"meta": {
"as_of": 1760659200123,
"coverage": {
"complete": true
},
"delay_ms": 0,
"delayed": false,
"request_id": "0199f0c2-5a1e-7c3b-9d4e-2b6f8a1c3d5e",
"source": "opra"
}
}Values are illustrative. Missing values are null, never 0.