Term Structure
Overview
Term Structure returns delta, implied volatility, and moneyness for one ticker at a snapshot in time. The response walks expiration date -> strike (dollars) -> contract type, so you can index any cell by (expiration, strike, CALL | PUT).
curl -X POST https://api.quantdata.us/v1/options/tool/term-structure \ -H "Authorization: Bearer <YOUR_API_KEY>" \ -H "Content-Type: application/json" \ -d '{ "sessionDate": "2026-05-13", "filter": { "ticker": "AAPL" } }'
Required: ticker
filter.ticker is required. Term Structure does not accept filterExpression.
{ "snapshotTime": "2026-05-13T16:30:00Z", "filter": { "ticker": "AAPL", "expirationDateRange": { "startDate": "2026-05-16", "endDate": "2026-06-20" }, "deltaRange": { "min": 0.3, "max": 0.7 } } }
Selecting the snapshot
Term Structure supports sessionDate for the latest snapshot of a given session, or snapshotTime for a specific instant. The two are mutually exclusive; if both are omitted, the latest snapshot of the current session is returned.
Response shape
data is the nested grid; stockPrice is the underlying price at the snapshot. When the filter matches no contracts, data is empty and stockPricestill reflects the session's underlying price. If no usable underlying price exists for the session, the term structure cannot be computed and the request returns 422 · data-unavailable instead.
{ "stockPrice": 218.45, "data": { "2026-05-16": { "215.0": { "CALL": { "delta": 0.612, "iv": 0.2538, "moneyType": "ITM" }, "PUT": { "delta": -0.388, "iv": 0.2612, "moneyType": "OTM" } }, "220.0": { "CALL": { "delta": 0.481, "iv": 0.2544, "moneyType": "ATM" }, "PUT": { "delta": -0.519, "iv": 0.2598, "moneyType": "ATM" } } }, "2026-05-23": { "220.0": { "CALL": { "delta": 0.504, "iv": 0.2602, "moneyType": "ATM" }, "PUT": { "delta": -0.496, "iv": 0.2658, "moneyType": "ATM" } } } } }
Filters
Convenience filter fields: ticker (required), expirationDates, expirationDateRange, strikePrices, strikePriceRange, moneyTypes, deltaRange (each bound in [-1, 1]).