VRP History API
Daily volatility risk premium time series for charting and backtesting, populated nightly after market close.
Endpoint
X-Api-Key)
Rate Limited: Yes
Alpha plan+
Parameters
| Name | In | Required | Default | Description |
|---|---|---|---|---|
symbol |
path | yes | - | Stock/ETF ticker |
days |
query | no | 30 | Lookback days (1-365) |
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://lab.flashalpha.com/v1/vrp/SPY/history?days=30"
import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/vrp/SPY/history",
headers={"X-Api-Key": "YOUR_API_KEY"},
params={"days": 30}
)
data = resp.json()
print(f"Data points: {data['data_points']}")
const resp = await fetch(
"https://lab.flashalpha.com/v1/vrp/SPY/history?days=30",
{ headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log("Data points: " + data.data_points);
Response
{
"symbol": "SPY",
"days": 30,
"data_points": 22,
"history": [
{
"date": "2026-05-30",
"spot": 531.55,
"atm_iv": 13.4,
"rv_5d": 9.8,
"rv_30d": 11.2,
"vrp_20d": 2.2,
"straddle": 6.85,
"expected_move_1d": 4.32
}
]
}
Key Response Fields
| Field | Type | Description |
|---|---|---|
symbol | string | Ticker symbol |
days | number | Requested lookback |
data_points | number | Number of data points returned |
history[].date | date | Snapshot date |
history[].spot | number | Close price |
history[].atm_iv | number? | ATM IV (%) |
history[].rv_5d ... rv_30d | number? | Realized vol windows |
history[].vrp_20d | number? | VRP spread (ATM_IV - RV20d) |
history[].straddle | number? | ATM straddle price ($) |
history[].expected_move_1d | number? | 1-day expected move ($) |
Errors
| Status | Description |
|---|---|
403 | Requires Alpha plan or higher |
About
VRP History returns a daily volatility risk premium time series for charting and backtesting. Each row pairs the close price with ATM IV, realized vol windows, the 20-day VRP spread (ATM_IV minus RV20d), ATM straddle price, and the 1-day expected move. The series is populated by the nightly data service after market close (4:35 PM ET).
ATM IV is computed via BSM from Thetadata option snapshots, independent of real-time pollers. Realized vol comes from Yahoo Finance historical closes using log returns and sample standard deviation. Z-score and percentile metrics become available after 5 or more data points have accumulated.
Common Use Cases
- Chart the implied-versus-realized spread over time by plotting
history[].atm_ivagainst therv_5d...rv_30dwindows per symbol - Backtest short-vol or long-vol entries against historical
vrp_20dto measure the edge of selling when the spread is wide - Score expected-move accuracy by comparing
expected_move_1dto the next day's realized close-to-close move - Build percentile or z-score overlays from the
vrp_20dseries once 5+data_pointsexist, defining rich/cheap thresholds with no lookahead bias - Calibrate straddle pricing by tracking
history[].straddleversus realized range to size premium-selling positions - Detect regime shifts where
vrp_20dcompresses or flips negative, flagging when realized vol is overtaking implied
Related
Related reading
- Historical VRP percentiles without lookahead bias - build percentile overlays on this series the right way for backtests
- Variance risk premium vs volatility risk premium - what
vrp_20dmeasures and what it does not
Complementary endpoints
- VRP - the live VRP dashboard with z-score, percentile, and dealer risk
- Realized Volatility - the RV windows that anchor the spread
- VIX State - index-level vol regime context for the time series
Ready to build?
Get your free API key and start pulling live options data in 30 seconds.