Where it comes from
An option pricing model such as Black-Scholes takes the stock price, strike, time to expiration, interest rate and volatility. The first four are known. Plug in the option's actual market price and solve for the volatility that produces it: that's implied volatility.
So IV isn't anyone's forecast. It's information embedded in the option price itself: the more expensive the option, the higher its IV.
How to read the number
The API's implied_volatility is annualized and given as a decimal, so 0.373 means 37.3%. Roughly: the market expects a one-year standard deviation of about 37.3% in the stock's price.
To scale it to a shorter period, multiply by √(days/365). With IV at 37.3%, the expected one-day move is about 37.3% × √(1/365) ≈ 2.0%.
Why IV differs across strikes
In theory, options on the same stock with the same expiration should share one IV. In practice they don't. Here are AAPL puts expiring October 21, as of October 19, 2026 (AAPL near $343):
| Strike | 320 | 330 | 340 | 345 |
|---|---|---|---|---|
| Implied volatility | 45.5% | 37.8% | 30.3% | 25.8% |
The lower the strike (the further out-of-the-money the put), the higher the IV. This is the volatility skew: traders pay up for protection against a sharp drop. Plot IV against strike and you'll typically see a downward slope, or a "smile" that curls up at both ends.
Implied vs. historical volatility
- Historical volatility is computed from past prices; it describes moves that already happened.
- Implied volatility is backed out of current option prices; it reflects what the market expects next.
When IV sits well above historical volatility, options are relatively expensive. That's common before earnings or other big events, and IV often collapses right after, which traders call "IV crush."
Getting implied volatility from an API
Every contract in the chain snapshot endpoint /v3/snapshot/options/{underlying} includes implied_volatility, and you can filter by expiration, strike and call/put:
import requests
r = requests.get(
"https://marilux.dev/v3/snapshot/options/AAPL",
headers={"Authorization": "Bearer mh_live_your_key"},
params={"expiration_date": "2027-12-17", "contract_type": "put", "limit": 250},
)
for c in r.json()["results"]:
iv = c.get("implied_volatility") # some contracts have no IV
print(c["details"]["strike_price"], f"{iv:.1%}" if iv is not None else "-")
Deep in-the-money or long-untraded contracts have no reliable IV, so the field is omitted; check for it before reading. A complete example is in Get a US option chain with Greeks in Python, and vega (how IV changes move the price) is in Option Greeks explained.
Related
- Option Greeks explained: delta, gamma, theta, vega
- Get a US option chain with Greeks in Python
- API docs: Options data