Advanced Volatility API - SVI Parameters, Variance Surfaces, Arbitrage Detection | FlashAlpha
  1. Advanced Volatility

Advanced Volatility API

Raw SVI parameters, total variance surface grids, arbitrage detection, greeks surfaces, and variance swap fair values.

α Alpha Plan Required

These endpoints require the Alpha+ plan. View pricing →

New to SVI surfaces? Advanced Volatility API Guide explains SVI parameterization, variance surfaces, and arbitrage detection. Also see: Build an IV Surface in Python for a hands-on tutorial.

Endpoint

GET /v1/adv_volatility/{symbol}
Auth required (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)
Works with CME futures. Pass 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.

GET

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
symbolstringUnderlying symbol
underlying_pricenumberUnderlying price used for the calculation
as_ofstringTimestamp of the data (ISO 8601, UTC)
market_openbooleantrue during US market hours
svi_parametersarrayRaw SVI parameterization per expiry: w(k) = a + b(ρ(k−m) + √((k−m)² + σ²)) - see Fields of svi_parameters[] below
forward_pricesarrayForward price per expiry
forward_prices[].expirystringExpiration date (yyyy-MM-dd)
forward_prices[].days_to_expirynumberCalendar days to expiration
forward_prices[].forwardnumberForward prices: forward
forward_prices[].spotnumberForward prices: spot
forward_prices[].basis_pctnumber(Forward − Spot) / Spot × 100
total_variance_surfaceobjectTotal variance w(k,T) on a log-moneyness × expiry grid - see variance surface
total_variance_surface.moneynessarray of numberLog-moneyness grid: −0.5 to +0.5 in 0.025 steps (41 points)
total_variance_surface.expiriesarray of stringTotal variance surface: expiries
total_variance_surface.tenorsarray of numberTime to expiry in years
total_variance_surface.total_variancearray of arrayw(k,T) values - rows=expiries, columns=moneyness
total_variance_surface.implied_volarray of arrayIV (%) from total variance: σ = √(w/T) × 100
arbitrage_flagsarrayArbitrage violations found on the surface
arbitrage_flags[].expirystringExpiration date (yyyy-MM-dd)
arbitrage_flags[].typestringArbitrage type: butterfly (∂²w/∂k² < 0) or calendar (w decreasing in T)
arbitrage_flags[].strike_or_knumberLog-moneyness where violation occurs
arbitrage_flags[].descriptionstringPlain-English description
variance_swap_fair_valuesarrayVariance swap fair values per expiry
variance_swap_fair_values[].expirystringExpiration date (yyyy-MM-dd)
variance_swap_fair_values[].days_to_expirynumberCalendar days to expiration
variance_swap_fair_values[].fair_variancenumberIntegrated fair variance over [−15%, +15%] moneyness
variance_swap_fair_values[].fair_volnumber√(fair_variance / T) × 100
variance_swap_fair_values[].atm_ivnumberAt-the-money implied volatility
variance_swap_fair_values[].convexity_adjustmentnumberfair_vol − atm_iv - positive = convexity premium from wings
greeks_surfacesobjectVanna, charm, volga and speed surfaces across strikes and expiries - see Fields of greeks_surfaces below
endpoint_version, data_as_ofstring, objectResponse envelope, see Response envelope.

Fields of svi_parameters[]

Field Type Description
svi_parameters[].expirystringExpiration date (yyyy-MM-dd)
svi_parameters[].days_to_expirynumberCalendar days to expiration
svi_parameters[].forwardnumberImplied forward price from put-call parity
svi_parameters[].anumberSVI parameters: a
svi_parameters[].bnumberSVI parameters: b
svi_parameters[].rhonumberSVI parameters: rho
svi_parameters[].mnumberSVI parameters: m
svi_parameters[].sigmanumberSVI parameters: sigma
svi_parameters[].atm_total_variancenumberw(0) - total variance at-the-money
svi_parameters[].atm_ivnumberATM implied vol (%) derived from total variance

Fields of greeks_surfaces

Field Type Description
greeks_surfaces.vannaobjectVanna: ∂²V/∂S∂σ - delta sensitivity to vol changes
greeks_surfaces.vanna.strikesarray of numberVanna: strikes
greeks_surfaces.vanna.expiriesarray of stringVanna: expiries
greeks_surfaces.vanna.valuesarray of arrayVanna: values
greeks_surfaces.charmobjectCharm: ∂²V/∂S∂t - delta decay over time (call options)
greeks_surfaces.charm.strikesarray of numberCharm: strikes
greeks_surfaces.charm.expiriesarray of stringCharm: expiries
greeks_surfaces.charm.valuesarray of arrayCharm: values
greeks_surfaces.volgaobjectVolga: ∂²V/∂σ² - vega convexity
greeks_surfaces.volga.strikesarray of numberVolga: strikes
greeks_surfaces.volga.expiriesarray of stringVolga: expiries
greeks_surfaces.volga.valuesarray of arrayVolga: values
greeks_surfaces.speedobjectSpeed: ∂³V/∂S³ - gamma sensitivity to spot
greeks_surfaces.speed.strikesarray of numberSpeed: strikes
greeks_surfaces.speed.expiriesarray of stringSpeed: expiries
greeks_surfaces.speed.valuesarray of arraySpeed: values

Errors

Status Error When
401-Missing or invalid X-Api-Key. The body is empty; check the status code before parsing JSON.
403tier_restrictedYour plan is below Alpha. The body includes current_plan and required_plan.
404symbol_not_foundNo data for the symbol (unknown symbol, or no live data). Outside US market hours the message also says the market is closed.
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.

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_flags before 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 reading

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

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