Implied Volatility
FreeValueStandardPro
Get implied volatility snapshot for an option contract (from ThetaData server).
Returns implied volatilies calculated using the national best bid, mid, and ask price of the option respectively. The underlying price represents whatever the last underlying price was at the underlying_timestamp field. You can read more about how Theta Data calculates greeks here.
SPY · 20250321
from thetadatadx import Client
client = Client.from_env()
rows = client.market_data.option_snapshot_greeks_implied_volatility(
"SPY", "20250321",
strike="570", right="C",
)
for t in rows:
print(t.date, t.implied_volatility, t.iv_error) Sample response ·
JSON[
{
"ask": 1.5,
"bid": 1.47,
"implied_vol": 0.2142,
"iv_error": -0.0003,
"timestamp": "2025-08-20T15:59:59.805",
"underlying_price": 225.74,
"underlying_timestamp": "2025-08-20T16:36:52.257"
}
]Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
symbol | string | yes | - | Ticker symbol (e.g. AAPL) |
expiration | date | yes | - | Expiration date YYYYMMDD. Pass * to select all expirations for the underlying (chain-wide; query one date at a time). |
strike | string | no | * | Strike price in dollars as a string (e.g. 500 or 17.5). Use * for wildcard selection. |
right | string | no | both | Option side. Use both or * (alias) for calls and puts. Accepted values: call, put, both, *. |
annual_dividend | float | no | - | Annualized expected dividend amount, in dollars per share, used in the Greeks calculation (e.g. 2.5 is $2.50 per share per year). |
rate_type | string | no | sofr | Risk-free-rate source used in the Greeks calculation. Accepted values: sofr, treasury_m1, treasury_m3, treasury_m6, treasury_y1, treasury_y2, treasury_y3, treasury_y5, treasury_y7, treasury_y10, treasury_y20, treasury_y30. |
rate_value | float | no | - | Interest rate as a percent (4.36 means 4.36%, matching the InterestRateTick.rate convention) used in the Greeks calculation. Applied when rate_type selects a manual rate. |
stock_price | float | no | - | Underlying price in dollars used in the Greeks calculation, overriding the observed underlying when set. |
version | string | no | latest | Greeks model version. Accepted values: latest, 1. |
max_dte | int | no | - | Maximum days to expiration |
strike_range | int | no | - | Strike range filter |
min_time | string | no | - | Minimum time filter |
use_market_value | bool | no | false | When true, calculate Greeks against the option market value (mid-price) instead of the NBBO bid/ask pair. |
timeout_ms | int | no | - | Per-request deadline in milliseconds. 0 means no deadline. |
Response
Rows of IvTick:
| Field | Type | Description |
|---|---|---|
ms_of_day | i32 | Milliseconds since midnight Eastern Time. |
bid | f64 | Last NBBO bid price. |
bid_implied_volatility | f64 | Implied volatility solved at the bid price. The vendor names this column BID_IMPLIED_VOL. |
midpoint | f64 | Midpoint of the bid and ask prices. |
implied_volatility | f64 | Implied volatility solved from the option price. The vendor names this column IMPLIED_VOL. |
ask | f64 | Last NBBO ask price. |
ask_implied_volatility | f64 | Implied volatility solved at the ask price. The vendor names this column ASK_IMPLIED_VOL. |
iv_error | f64 | Residual pricing error of the implied-volatility solve. |
underlying_ms_of_day | i32 | Timestamp of the underlying price, milliseconds since midnight ET. The vendor names this column MS_OF_DAY2. |
underlying_price | f64 | Underlying price used in the calculation (midpoint of the underlying). |
date | i32 | Trading date as a YYYYMMDD integer. |
underlying_date | i32 | Trading date of the underlying price as a YYYYMMDD integer, decoded from the same wire column as underlying_ms_of_day. It differs from date when the underlying price and the option quote come from different sessions. |
Wildcard requests additionally populate expiration (YYYYMMDD), strike (dollars), and right ("C" / "P") on every row to identify the contract; on single-contract requests these are absent (None / null / undefined; the Rust and C rows carry the documented 0 / 0.0 / '\0' fills).