Implied Volatility Solver API - IV From an Option Price | FlashAlpha
  1. 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+).

GET /v1/pricing/iv
Auth required (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.

GET

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.spotnumberInputs: spot
inputs.strikenumberStrike price
inputs.dtenumberDays to expiration
inputs.pricenumberInputs: price
inputs.typestringOption type
inputs.risk_free_ratenumberInputs: risk free rate
inputs.dividend_yieldnumberInputs: dividend yield
endpoint_version, data_as_ofstring, objectResponse envelope, see Response envelope.

Errors

Status Error When
400invalid_inputAn 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.
422iv_not_foundNo implied volatility matches price. The price may be outside the arbitrage-free range.
429Quota exceededDaily 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 sigma to BSM Greeks
  • Sanity-check fills - see what volatility a fill price implies

Related reading

Complementary endpoints

Ready to build with FlashAlpha?

Get your free API key and start pulling live options data in 60 seconds.

No credit card required Setup in 60 seconds Secure & reliable