The option chain for an active stock-market underlying, including ETFs: the listed expiration dates, the full calls-and-puts chain for one expiration (strike, greeks, implied volatility, open interest and the latest daily price), and a single contract by its OCC symbol. snapshotDate dates the daily OHLCV bar; openInterestDate separately dates openInterest. Either can be null when its own date was not supplied, and one must never be inferred from the other. The chain and single-contract reads need a paid plan. Pro receives real-time consolidated OPRA bid/ask and Plus receives an indicative feed, where trades are 15-minute delayed and quotes are modified indicative values rather than OPRA BBO. Free covers end-of-day data only and receives 403 forbidden with a link to upgrade; the expirations listing carries no market data and stays available on every plan. The row's delayed flag describes those quote fields alone. quotesAvailable means the active deployment can return quote fields; individual contracts can still have null bid or ask. Implied volatility and greeks are decimal fractions (0.4351 = 43.51 % IV, delta 0.5123); prices are US dollars. Class shares use a dash (BRK-B); the dot form (BRK.B) is also accepted. For the plan requirements and client setup, see the options chain API page.
The path names the exact listed underlying. A request for GOOG does not return the GOOGL chain, and BRK-A does not fall through to BRK-B. The market-data reference feed resolves that identity authoritatively: an unknown, inactive or delisted ticker returns 404, while a known active listing with no contracts returns its own successful no-options result.
Only an empty active-contract reference result proves that a known listing has no listed options. A confirmed expiration can instead return an empty snapshot while keeping its expiration, which means no snapshot rows were available for that date. If options data is not enabled, times out, or the provider request fails, these endpoints return the standard 503 error envelope with code service_unavailable; an operational failure is never returned as an empty no-options response.
quoteAsOf is the source's ISO-8601 UTC timestamp for the bid/ask observation, independent of snapshotDate and openInterestDate. A null timestamp means quote age is unknown; it is never replaced by the request time. Quotes are observations, not guaranteed fills: confirm current bid/ask before execution.
Historical open interest: No current self-service plan exposes historical option-chain snapshots or open interest for a requested past session. The chain and contract endpoints fetch current snapshots and accept no historical date parameter. openInterestDate tells you when the returned current OI figure is effective; it does not let you request that date. Store the snapshots you receive if you need to compare OI across sessions.
Refresh frequency and field timing
Intraday option bid/ask snapshots are fetched on demand, not streamed to these endpoints. Successful responses are cached for 300 seconds by default; deployments can configure that duration. A request within the cache window can return the same observation. This cache refresh policy is not a guarantee of quote age: check quoteAsOf, and treat a null timestamp as unknown.
Daily OHLC and volume belong to the bar dated by snapshotDate; that field is not the request time and does not date IV or Greeks. IV and Greeks are model outputs returned with the fetched snapshot, and a cached response retains those values. Equibles does not promise an upstream recalculation frequency or a separate observation timestamp for each Greek. Open interest has its own openInterestDate. These fields need not update together, and a fresh HTTP response does not prove every field is fresh.
/v1/stocks/
The listed expiration dates for an underlying, ascending, each with the number of active contracts. Use one as the expiration for the chain. truncated: true means the provider's reference-page safety bound was reached, so later expirations or counts may be incomplete.
Parameters: {ticker} (path — e.g. NVDA).
curl "https://api.equibles.com/v1/stocks/AAPL/options/expirations" \
-H "Authorization: Bearer eq_your_api_key"import requests
r = requests.get(
"https://api.equibles.com/v1/stocks/AAPL/options/expirations",
headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())const res = await fetch("https://api.equibles.com/v1/stocks/AAPL/options/expirations", {
headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());{
"ticker": "AAPL",
"companyName": "Apple Inc. Common Stock",
"truncated": false,
"expirations": [
{ "expirationDate": "2026-09-02", "contractCount": 112 },
{ "expirationDate": "2026-09-04", "contractCount": 154 },
{ "expirationDate": "2026-09-09", "contractCount": 112 },
{ "expirationDate": "2026-09-11", "contractCount": 150 },
{ "expirationDate": "2026-09-14", "contractCount": 60 }
]
}
/v1/stocks/
The calls-and-puts chain for one expiration: strike, contract type, the latest daily bar, dated open interest, implied volatility, greeks (delta, gamma, theta, vega), and tier-appropriate bid/ask. Defaults to the nearest upcoming expiration; narrow with minStrike/maxStrike and type. The service first resolves the expiration from active contract identities, then fetches only that expiration's current snapshot. truncated: true means the returned rows were capped or the snapshot-page safety bound was reached. A known listing with no active contracts returns 200 with expiration: null and an empty contracts array. If the expiration is confirmed but its current snapshot is empty, the response keeps that expiration and returns an empty array; it does not claim that the underlying has no options.
Parameters: {ticker} (path — e.g. NVDA); expiration (yyyy-MM-dd, default nearest upcoming); minStrike / maxStrike; type (call / put, default both); limit (default 250, max 500).
curl "https://api.equibles.com/v1/stocks/AAPL/options/chain?expiration=2026-09-18&minStrike=315&maxStrike=315" \
-H "Authorization: Bearer eq_your_api_key"import requests
r = requests.get(
"https://api.equibles.com/v1/stocks/AAPL/options/chain",
params={"expiration": "2026-09-18", "minStrike": 315, "maxStrike": 315},
headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())const res = await fetch("https://api.equibles.com/v1/stocks/AAPL/options/chain?expiration=2026-09-18&minStrike=315&maxStrike=315", {
headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());{
"ticker": "AAPL",
"companyName": "Apple Inc. Common Stock",
"expiration": "2026-09-18",
"quotesAvailable": true,
"returned": 2,
"total": 2,
"truncated": false,
"contracts": [
{
"occTicker": "O:AAPL260918C00315000",
"contractType": "Call",
"exerciseStyle": "American",
"strikePrice": 315.0,
"expirationDate": "2026-09-18",
"sharesPerContract": 100,
"snapshotDate": "2026-08-31",
"dayOpen": 9.25, "dayHigh": 10.25, "dayLow": 6.4, "dayClose": 8.3,
"dayVolume": 2949, "dayVwap": 7.392547,
"impliedVolatility": 0.2532,
"openInterest": 10638,
"openInterestDate": "2026-08-28",
"delta": 0.5691, "gamma": 0.0227,
"theta": -0.2174, "vega": 0.2688,
"bidPrice": 7.97, "askPrice": 8.47, "delayed": true
},
{
"occTicker": "O:AAPL260918P00315000",
"contractType": "Put",
"exerciseStyle": "American",
"strikePrice": 315.0,
"expirationDate": "2026-09-18",
"sharesPerContract": 100,
"snapshotDate": "2026-08-31",
"dayOpen": 5.0, "dayHigh": 7.52, "dayLow": 4.62, "dayClose": 5.7,
"dayVolume": 1232, "dayVwap": 6.163596,
"impliedVolatility": 0.2573,
"openInterest": 6624,
"openInterestDate": "2026-08-28",
"delta": -0.4317, "gamma": 0.0223,
"theta": -0.1892, "vega": 0.2689,
"bidPrice": 5.74, "askPrice": 5.86, "delayed": true
}
]
}
/v1/stocks/
A single option contract by its OCC symbol: the latest daily bar, dated open interest, implied volatility, greeks, and tier-appropriate bid/ask. The contract is fetched live from the provider and is not stored; an unknown or expired symbol returns 404.
Parameters: {ticker} (path — e.g. NVDA); symbol (query — the OCC option symbol, e.g. O:NVDA260918C00210000).
curl "https://api.equibles.com/v1/stocks/AAPL/options/contract?symbol=O:AAPL260918C00315000" \
-H "Authorization: Bearer eq_your_api_key"import requests
r = requests.get(
"https://api.equibles.com/v1/stocks/AAPL/options/contract",
params={"symbol": "O:AAPL260918C00315000"},
headers={"Authorization": "Bearer eq_your_api_key"},
)
print(r.json())const res = await fetch("https://api.equibles.com/v1/stocks/AAPL/options/contract?symbol=O:AAPL260918C00315000", {
headers: { Authorization: "Bearer eq_your_api_key" },
});
console.log(await res.json());{
"ticker": "AAPL",
"quotesAvailable": true,
"contract": {
"occTicker": "O:AAPL260918C00315000",
"contractType": "Call",
"exerciseStyle": "American",
"strikePrice": 315.0,
"expirationDate": "2026-09-18",
"sharesPerContract": 100,
"snapshotDate": "2026-08-31",
"dayOpen": 9.25, "dayHigh": 10.25, "dayLow": 6.4, "dayClose": 8.3,
"dayVolume": 2949, "dayVwap": 7.392547,
"impliedVolatility": 0.2532,
"openInterest": 10638,
"openInterestDate": "2026-08-28",
"delta": 0.5691, "gamma": 0.0227,
"theta": -0.2174, "vega": 0.2688,
"bidPrice": 7.97, "askPrice": 8.47, "delayed": true
}
}