- Live API Reference
- Pricing Calculators
- Implied Volatility Solver
Implied Volatility Solver API
Back out implied volatility from an option's market price.
Endpoint
Computes implied volatility from a market price using Newton-Raphson root finding. Available on all plans (Free+).
X-Api-Key)
Rate Limited: Yes
Plan: Free+
Parameters
| Name | In | Type | Required | Default | Description |
|---|---|---|---|---|---|
spot |
query | number | required | - | Underlying spot price. Invalid values return 400 invalid_input. Non-numeric values return a 400 problem-details body. |
strike |
query | number | required | - | Strike price. Invalid values return 400 invalid_input. Non-numeric values return a 400 problem-details body. |
dte |
query | number | required | - | Days to expiration. Invalid values return 400 invalid_input. Non-numeric values return a 400 problem-details body. |
price |
query | number | required | - | Market option price (mid). Invalid values return 400 invalid_input. Non-numeric values return a 400 problem-details body. |
type |
query | enum | call |
call or put. Invalid values return 400 invalid_input. |
|
r |
query | number | 0.045 |
Risk-free rate. Non-numeric values return a 400 problem-details body. | |
q |
query | number | 0.013 |
Dividend yield. Non-numeric values return a 400 problem-details body. |
Request
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://lab.flashalpha.com/v1/pricing/iv?spot=580&strike=580&dte=30&price=12.69&type=call"import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/pricing/iv",
params={"spot": 580, "strike": 580, "dte": 30, "price": 12.69, "type": "call"},
headers={"X-Api-Key": "YOUR_API_KEY"}
)
resp.raise_for_status()
print(f"IV: {resp.json()['implied_volatility_pct']}%")const qs = new URLSearchParams({ spot: 580, strike: 580, dte: 30, price: 12.69, type: "call" });
const resp = await fetch(`https://lab.flashalpha.com/v1/pricing/iv?${qs}`, {
headers: { "X-Api-Key": "YOUR_API_KEY" }
});
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const data = await resp.json();
console.log(`IV: ${data.implied_volatility_pct}%`);Try it live
Runs on live market data and uses 1 request from your daily quota.
Response
{
"inputs": {
"spot": 580,
"strike": 580,
"dte": 30,
"price": 12.69,
"type": "call",
"risk_free_rate": 0.045,
"dividend_yield": 0.013
},
"implied_volatility": 0.180042,
"implied_volatility_pct": 18,
"endpoint_version": "2026.09.30",
"data_as_of": {
"node": "fa5",
"equity_feed": "2026-10-30T13:46:17.825Z",
"equity_options_feed": "2026-10-30T13:46:17Z",
"index_feed": "2026-10-30T13:46:17.119Z",
"index_options_feed": "2026-10-30T13:46:16Z",
"futures_feed": "2026-10-30T13:46:15.271Z",
"futures_options_feed": "2026-10-30T13:46:14.335Z",
"flow_feed": "2026-10-30T13:46:00Z",
"oi_feed": "2026-10-29T20:00:00Z",
"macro_feed": "2026-10-29T21:00:20Z"
}
}Sending request…
See this endpoint on live data
Send this exact request and the real response shows up here, right next to the example.
Response Fields
| Field | Type | Description |
|---|---|---|
inputs |
object | Echo of the inputs, with the defaults applied |
implied_volatility |
number | Implied volatility as a decimal (0.18 = 18%) |
implied_volatility_pct |
number | Implied volatility in percent |
inputs.spot | number | Inputs: spot |
inputs.strike | number | Strike price |
inputs.dte | number | Days to expiration |
inputs.price | number | Inputs: price |
inputs.type | string | Option type |
inputs.risk_free_rate | number | Inputs: risk free rate |
inputs.dividend_yield | number | Inputs: dividend yield |
endpoint_version, data_as_of | string, object | Response envelope, see Response envelope. |
Errors
| Status | Error | When |
|---|---|---|
400 | invalid_input | An input is out of range, for example a spot, strike, dte or volatility that is not positive. |
400 | - | A query value has the wrong type, or a required value is missing. The body is an RFC 7807 problem-details object with errors.<param>. |
401 | - | Missing or invalid X-Api-Key. The body is empty; check the status code before parsing JSON. |
422 | iv_not_found | No implied volatility matches price. The price may be outside the arbitrage-free range. |
429 | Quota exceeded | Daily quota used up. Retry-After gives the seconds until the reset at 00:00 UTC. Rejected requests (including 403) count toward the quota. |
Authentication (401) and rate-limit (429) errors use the common error format, see Error Responses.
What Is the Implied Volatility Solver?
Implied volatility is the volatility that makes the Black-Scholes-Merton price equal the price the market is paying. This endpoint solves for it with Newton-Raphson root finding from a spot, strike, days to expiry and option price you supply. Use it to turn quotes from any source into IV, or to check a single contract without pulling a whole chain. A price outside the arbitrage-free range has no implied volatility and returns 422.
Common Use Cases
- Convert quotes to IV - turn a mid price from any broker or feed into implied volatility
- Compare contracts on one scale - rank options by IV instead of premium
- Feed the greeks calculator - pass the solved IV as
sigmato BSM Greeks - Sanity-check fills - see what volatility a fill price implies
Related
Related reading
- Implied volatility API for every strike and expiration - IV on live chains
Complementary endpoints
- BSM Greeks Calculator - price and greeks from the solved IV
- Kelly Position Sizing - size a position once you know the vol
- Volatility Surface Grid - IV across all strikes and tenors