- Live API Reference
- Volatility Analytics
- Advanced Volatility
Advanced Volatility API
Raw SVI parameters, total variance surface grids, arbitrage detection, greeks surfaces, and variance swap fair values.
These endpoints require the Alpha+ plan. View pricing →
Endpoint
X-Api-Key)
Rate Limited: Yes
Plan: Alpha+
Parameters
| Name | In | Type | Required | Default | Description |
|---|---|---|---|---|---|
symbol |
path | string | required | - | Underlying symbol (e.g. SPY, TSLA, AAPL) |
ES=F or NQ=F and URL-encode the = as %3D - e.g. /v1/adv_volatility/ES%3DF. Options-on-futures are priced with Black-76 using the CME multiplier ($50/pt ES, $20/pt NQ); CME futures are Growth plan. See the futures hub.
Request
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://lab.flashalpha.com/v1/adv_volatility/SPY"import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/adv_volatility/SPY",
headers={"X-Api-Key": "YOUR_API_KEY"}
)
resp.raise_for_status()
data = resp.json()
print(f"SVI a: {data['svi_parameters'][0]['a']}")
print(f"ATM IV: {data['svi_parameters'][0]['atm_iv']}%")
print(f"Arbitrage flags: {len(data['arbitrage_flags'])}")const resp = await fetch(
"https://lab.flashalpha.com/v1/adv_volatility/SPY",
{ headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
if (!resp.ok) throw new Error(`HTTP ${resp.status}`);
const data = await resp.json();
console.log(`SVI a: ${data.svi_parameters[0].a}`);
console.log(`ATM IV: ${data.svi_parameters[0].atm_iv}%`);
console.log(`Arbitrage flags: ${data.arbitrage_flags.length}`);Try it live
Runs on live market data and uses 1 request from your daily quota.
Response
{
"symbol": "SPY",
"underlying_price": 760.37,
"as_of": "2026-10-30T13:45:28.6960933Z",
"market_open": true,
"svi_parameters": [
{
"expiry": "2026-11-02",
"days_to_expiry": 3,
"forward": 760.456,
"a": -0.00819,
"b": 0.045303,
"rho": -0.469429,
"m": -0.093583,
"sigma": 0.207334,
"atm_total_variance": 0.000126,
"atm_iv": 11.78
},
{
"expiry": "2026-11-03",
"days_to_expiry": 4,
"forward": 760.5233,
"a": -0.004963,
"b": 0.03297,
"rho": -0.419674,
"m": -0.054412,
"sigma": 0.170696,
"atm_total_variance": 0.000191,
"atm_iv": 12.73
}
],
"forward_prices": [
{
"expiry": "2026-11-02",
"days_to_expiry": 3,
"forward": 760.456,
"spot": 760.37,
"basis_pct": 0.0113
},
{
"expiry": "2026-11-03",
"days_to_expiry": 4,
"forward": 760.5233,
"spot": 760.37,
"basis_pct": 0.0202
}
],
"total_variance_surface": {
"moneyness": [
-0.5,
-0.475,
-0.45
],
"expiries": [
"2026-11-02",
"2026-11-03",
"2026-11-04"
],
"tenors": [
0.009046,
0.011786,
0.014525
],
"total_variance": [
[
0.021123,
0.019589,
0.01807
],
[
0.016934,
0.015822,
0.014715
]
],
"implied_vol": [
[
152.81,
147.16,
141.34
],
[
119.87,
115.86,
111.74
]
]
},
"arbitrage_flags": [
{
"expiry": "2026-11-02/2026-11-03",
"type": "calendar",
"strike_or_k": -0.3,
"description": "Calendar arb at k=-0.3: w(2026-11-02)=0.0095 > w(2026-11-03)=0.0083"
},
{
"expiry": "2026-11-06/2026-11-09",
"type": "calendar",
"strike_or_k": -0.3,
"description": "Calendar arb at k=-0.3: w(2026-11-06)=0.0101 > w(2026-11-09)=0.0080"
}
],
"variance_swap_fair_values": [
{
"expiry": "2026-11-02",
"days_to_expiry": 3,
"fair_variance": 0.000809,
"fair_vol": 29.9,
"atm_iv": 11.78,
"convexity_adjustment": 18.12
},
{
"expiry": "2026-11-03",
"days_to_expiry": 4,
"fair_variance": 0.000868,
"fair_vol": 27.14,
"atm_iv": 12.73,
"convexity_adjustment": 14.41
}
],
"greeks_surfaces": {
"vanna": {
"strikes": [
647,
648,
649
],
"expiries": [
"2026-10-30",
"2026-11-02",
"2026-11-03"
],
"values": [
[
0,
0,
0
],
[
0,
0,
0
]
]
},
"charm": {
"strikes": [
647,
648,
649
],
"expiries": [
"2026-10-30",
"2026-11-02",
"2026-11-03"
],
"values": [
[
0,
0,
0
],
[
0,
0,
0
]
]
},
"volga": {
"strikes": [
647,
648,
649
],
"expiries": [
"2026-10-30",
"2026-11-02",
"2026-11-03"
],
"values": [
[
0,
0,
0
],
[
0,
0,
0
]
]
},
"speed": {
"strikes": [
647,
648,
649
],
"expiries": [
"2026-10-30",
"2026-11-02",
"2026-11-03"
],
"values": [
[
0,
0,
0
],
[
0,
0,
0
]
]
}
},
"endpoint_version": "2026.09.30",
"data_as_of": {
"node": "fa4",
"equity_feed": "2026-10-30T13:45:28.23Z",
"equity_options_feed": "2026-10-30T13:45:28Z",
"index_feed": "2026-10-30T13:45:28.116Z",
"index_options_feed": "2026-10-30T13:45:25Z",
"futures_feed": "2026-10-30T13:45:26.817Z",
"futures_options_feed": "2026-10-30T13:45:17.77Z",
"flow_feed": "2026-10-30T13:45: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.
Responses can exceed 210 KB.
Response Fields
| Field | Type | Description |
|---|---|---|
symbol | string | Underlying symbol |
underlying_price | number | Underlying price used for the calculation |
as_of | string | Timestamp of the data (ISO 8601, UTC) |
market_open | boolean | true during US market hours |
svi_parameters | array | Raw SVI parameterization per expiry: w(k) = a + b(ρ(k−m) + √((k−m)² + σ²)) - see Fields of svi_parameters[] below |
forward_prices | array | Forward price per expiry |
forward_prices[].expiry | string | Expiration date (yyyy-MM-dd) |
forward_prices[].days_to_expiry | number | Calendar days to expiration |
forward_prices[].forward | number | Forward prices: forward |
forward_prices[].spot | number | Forward prices: spot |
forward_prices[].basis_pct | number | (Forward − Spot) / Spot × 100 |
total_variance_surface | object | Total variance w(k,T) on a log-moneyness × expiry grid - see variance surface |
total_variance_surface.moneyness | array of number | Log-moneyness grid: −0.5 to +0.5 in 0.025 steps (41 points) |
total_variance_surface.expiries | array of string | Total variance surface: expiries |
total_variance_surface.tenors | array of number | Time to expiry in years |
total_variance_surface.total_variance | array of array | w(k,T) values - rows=expiries, columns=moneyness |
total_variance_surface.implied_vol | array of array | IV (%) from total variance: σ = √(w/T) × 100 |
arbitrage_flags | array | Arbitrage violations found on the surface |
arbitrage_flags[].expiry | string | Expiration date (yyyy-MM-dd) |
arbitrage_flags[].type | string | Arbitrage type: butterfly (∂²w/∂k² < 0) or calendar (w decreasing in T) |
arbitrage_flags[].strike_or_k | number | Log-moneyness where violation occurs |
arbitrage_flags[].description | string | Plain-English description |
variance_swap_fair_values | array | Variance swap fair values per expiry |
variance_swap_fair_values[].expiry | string | Expiration date (yyyy-MM-dd) |
variance_swap_fair_values[].days_to_expiry | number | Calendar days to expiration |
variance_swap_fair_values[].fair_variance | number | Integrated fair variance over [−15%, +15%] moneyness |
variance_swap_fair_values[].fair_vol | number | √(fair_variance / T) × 100 |
variance_swap_fair_values[].atm_iv | number | At-the-money implied volatility |
variance_swap_fair_values[].convexity_adjustment | number | fair_vol − atm_iv - positive = convexity premium from wings |
greeks_surfaces | object | Vanna, charm, volga and speed surfaces across strikes and expiries - see Fields of greeks_surfaces below |
endpoint_version, data_as_of | string, object | Response envelope, see Response envelope. |
Fields of svi_parameters[]
| Field | Type | Description |
|---|---|---|
svi_parameters[].expiry | string | Expiration date (yyyy-MM-dd) |
svi_parameters[].days_to_expiry | number | Calendar days to expiration |
svi_parameters[].forward | number | Implied forward price from put-call parity |
svi_parameters[].a | number | SVI parameters: a |
svi_parameters[].b | number | SVI parameters: b |
svi_parameters[].rho | number | SVI parameters: rho |
svi_parameters[].m | number | SVI parameters: m |
svi_parameters[].sigma | number | SVI parameters: sigma |
svi_parameters[].atm_total_variance | number | w(0) - total variance at-the-money |
svi_parameters[].atm_iv | number | ATM implied vol (%) derived from total variance |
Fields of greeks_surfaces
| Field | Type | Description |
|---|---|---|
greeks_surfaces.vanna | object | Vanna: ∂²V/∂S∂σ - delta sensitivity to vol changes |
greeks_surfaces.vanna.strikes | array of number | Vanna: strikes |
greeks_surfaces.vanna.expiries | array of string | Vanna: expiries |
greeks_surfaces.vanna.values | array of array | Vanna: values |
greeks_surfaces.charm | object | Charm: ∂²V/∂S∂t - delta decay over time (call options) |
greeks_surfaces.charm.strikes | array of number | Charm: strikes |
greeks_surfaces.charm.expiries | array of string | Charm: expiries |
greeks_surfaces.charm.values | array of array | Charm: values |
greeks_surfaces.volga | object | Volga: ∂²V/∂σ² - vega convexity |
greeks_surfaces.volga.strikes | array of number | Volga: strikes |
greeks_surfaces.volga.expiries | array of string | Volga: expiries |
greeks_surfaces.volga.values | array of array | Volga: values |
greeks_surfaces.speed | object | Speed: ∂³V/∂S³ - gamma sensitivity to spot |
greeks_surfaces.speed.strikes | array of number | Speed: strikes |
greeks_surfaces.speed.expiries | array of string | Speed: expiries |
greeks_surfaces.speed.values | array of array | Speed: values |
Errors
| Status | Error | When |
|---|---|---|
401 | - | Missing or invalid X-Api-Key. The body is empty; check the status code before parsing JSON. |
403 | tier_restricted | Your plan is below Alpha. The body includes current_plan and required_plan. |
404 | symbol_not_found | No data for the symbol (unknown symbol, or no live data). Outside US market hours the message also says the market is closed. |
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. |
Use Cases
- Build the surface - feed the per-expiry SVI parameters (a, b, rho, m, sigma) into a smooth SVI-fitted implied vol surface for any strike and tenor, and check
arbitrage_flagsbefore relying on it - Price the convexity premium - compare fair variance vs ATM IV to quantify the premium priced into the wings for variance-swap and dispersion trades
- Scan for arbitrage - read the butterfly and calendar violation flags to catch mispriced strikes and surface inconsistencies in real time
- Manage second-order risk - use the vanna, charm, volga, and speed greeks surfaces to map exposure across strikes and expiries for portfolio hedging
- Calibrate your own models - pass the raw SVI coefficients into local-vol, stochastic-vol, or exotic pricers as a clean starting fit
- Monitor surface stability - track day-over-day shifts in SVI parameters to detect regime changes before they show up in ATM IV
Related
Related reading
- Engineering arbitrage-free volatility surfaces - the math and pitfalls behind the SVI fit this endpoint returns
Complementary endpoints
- Volatility - realized vol, IV-RV spreads, skew, and term structure context
- SVI Parameters - the raw SVI coefficients on their own for custom models
- Skew Term Structure - skew and term structure isolated across expiries
- Dispersion - index-vs-constituent vol for dispersion and correlation trades
Unlock DEX, VEX and CHEX with Basic
Everything in Free, plus:
- DEX, VEX and CHEX exposure
- Full max pain
- ETF & index symbols SPY, QQQ, SPX, VIX
Go full-chain with Growth
Everything in Basic, plus:
- Full-chain GEX Every expiration
- 0DTE analytics
- Exposure summary & AI narrative
- CME futures & live screener
Add history and vol surfaces with Alpha
Everything in Growth, plus:
- Historical API replay Since 2017
- SVI vol surfaces
- VRP analytics
- Greeks surfaces Vanna, charm, volga and speed grids