Volatility Risk Premium API: How to Find Stocks Where IV Is Overpriced (2026)
Skip IV rank. Use the volatility risk premium (VRP) — the spread between implied and realized volatility — to find stocks where options are genuinely overpriced relative to how much the stock actually moves. One API call returns vrp_5d/10d/20d/30d plus a regime label. Code examples and a complete scanner.
Imagine TSLA implied vol is at 45%. Is that high? Most traders reach for IV rank: "what percentile is 45% in TSLA's 52-week IV history?" If TSLA usually trades between 40% and 70%, the answer is "low" (5th percentile). The IV rank conclusion: don't sell premium.
But here's the problem. While TSLA's implied vol is 45%, its actual realized vol over the past 30 days is 38%. The market is pricing in 7 percentage points of vol cushion that the stock hasn't actually delivered. From a Kelly-optimal premium-selling lens, this is an edge: the market is overcharging for protection. IV rank told you to skip the trade. VRP told you to take it.
Key Insight
IV rank is a self-relative measure (this stock vs its own history). VRP is a truth-relative measure (what's priced vs what actually happened). Premium sellers want the second one. The first one is just a sentiment indicator.
What VRP Actually Measures
The volatility risk premium is the simple difference between implied vol and realized vol over a comparable window:
Where \(\sigma_{\text{IV}}\) is the at-the-money implied volatility and \(\sigma_{\text{RV},n}\) is the n-day annualised realised volatility (computed from log returns). When VRP is positive, the option market is pricing in more volatility than the stock has actually delivered. When it's negative, options are cheaper than realised - which usually means a regime change, an event approaching, or institutional hedging stress.
A typical equity index runs a long-run VRP of around +3 to +5 percentage points - this is the "structural insurance premium" that pays buy-side index option sellers across cycles. Single names vary much more: a sleepy utility might run +1, while a meme stock can swing from -15 to +30 within a single week.
The API Contract
FlashAlpha's /v1/volatility/{symbol} endpoint returns VRP across four lookback windows in a single call:
Multiple windows. The 5-day VRP captures this week's repricing, which often diverges sharply from the 30-day. SPY above is showing a -8.5 point VRP at the 10-day window - the recent two-week realised has spiked above implied, classic signal of a vol regime change.
Annualised, in percentage points. All numbers are in percentage points of annualised vol, not decimals. vrp_30d: -2.23 means implied vol is 2.23 percentage points below 30-day realised.
Pre-computed assessment label. The assessment field is a regime classifier the API computes for you. Six possible values, explained below.
The Six VRP Assessment Labels
Rather than making you write a classifier, the API ships one. Here's what each label means and what to do with it:
Assessment
What it means
Premium-selling action
very_high_premium
IV is dramatically above realised vol - usually a binary event approaching (earnings, FOMC, M&A)
Sell premium aggressively, but size for tail risk - this label exists because something is about to happen
healthy_premium
IV running 5-10 points above realised - the structural insurance premium is intact and stable
Best regime for systematic premium selling - iron condors, strangles, covered calls
moderate_premium
IV running 2-5 points above realised - some edge but smaller margin of safety
Sell premium with tighter strikes or shorter DTE; require additional confirmation (regime, dealer alignment)
thin_premium
IV barely above realised - the edge is too small to compensate for transaction costs
Skip premium selling. Look for directional setups or move to a different name
negative_spread
IV is below realised vol - options are cheap relative to recent moves
Don't sell premium here. If anything, this is a mild signal to buy options (long gamma, long vol)
danger_zone
IV is significantly below realised - the market is pricing the stock as if recent moves were an aberration. This is usually wrong
Avoid short vol entirely. If you're already short premium, consider closing or rolling out
The labels are computed from the 30-day VRP with adjustments for cross-window consistency (a wildly negative 5-day spread overrides a marginally positive 30-day, etc.). You don't need to reverse-engineer the rules - just trust the label and override only if you have a strong opinion.
A Real Snapshot: April 2026
To make the labels concrete, here's a snapshot of where major names sit right now (data pulled live from /v1/volatility/{symbol}):
Symbol
ATM IV
30-day RV
VRP (30d)
Assessment
SPY
15.7%
17.9%
-2.2
danger_zone
QQQ
19.1%
21.6%
-2.5
danger_zone
NVDA
31.3%
38.4%
-7.1
danger_zone
MSFT
27.8%
20.8%
+6.9
healthy_premium
TSLA
44.9%
37.9%
+7.0
moderate_premium
COIN
73.4%
70.6%
+2.9
very_high_premium
MSTR
65.0%
63.1%
+1.9
very_high_premium
Notice what an IV-rank scanner would have told you: TSLA at 45% IV is in the upper-middle of its 52-week range, "high IV, sell premium." VRP tells the same story but with a smaller margin of safety (+7 points). NVDA at 31% IV is in the lower half of its 52-week range, "IV is low, don't sell." VRP says the same with much more conviction - and warns you that recent realised vol has actually exploded higher than IV is pricing, so don't try to be clever and buy puts either. The two metrics agree on the obvious cases and disagree on the edge cases - and the edge cases are where money is made.
Build a VRP Scanner in 20 Lines of Python
Here's a working scanner that pulls VRP for a watchlist and ranks it by edge:
import requests
API_KEY = "YOUR_API_KEY"
BASE = "https://lab.flashalpha.com"
HEADERS = {"X-Api-Key": API_KEY}
WATCHLIST = ["SPY", "QQQ", "IWM", "TSLA", "NVDA", "AMD", "AAPL",
"MSFT", "GOOGL", "META", "AMZN", "COIN", "GME", "PLTR"]
def get_vrp(symbol):
r = requests.get(f"{BASE}/v1/volatility/{symbol}", headers=HEADERS)
if r.status_code != 200:
return None
d = r.json()
s = d["iv_rv_spreads"]
return {
"symbol": symbol,
"atm_iv": d["atm_iv"],
"rv_30d": d["realized_vol"]["rv_30d"],
"vrp_5d": s["vrp_5d"],
"vrp_30d": s["vrp_30d"],
"assessment": s["assessment"],
}
results = [get_vrp(s) for s in WATCHLIST]
results = [r for r in results if r is not None]
# Rank: only premium selling candidates, sorted by 30-day VRP descending
candidates = [r for r in results if r["assessment"] in ("healthy_premium",
"moderate_premium",
"very_high_premium")]
candidates.sort(key=lambda r: r["vrp_30d"], reverse=True)
print(f"{'SYM':<6} {'IV':>6} {'RV30':>6} {'VRP30':>7} ASSESSMENT")
for r in candidates:
print(f"{r['symbol']:<6} {r['atm_iv']:>5.1f}% {r['rv_30d']:>5.1f}% "
f"{r['vrp_30d']:>+6.1f} {r['assessment']}")
Run that against the live API and you get something like:
Five candidates from a 14-symbol watchlist. The eight rejected names are sitting in danger_zone or negative_spread right now - exactly the names you'd want to skip even though their nominal IV looks high.
Combining VRP with Dealer Positioning
VRP alone is a vol-pricing filter, not a complete trading signal. The highest-conviction premium-selling setup combines positive VRP with a positive gamma regime (dealers dampening volatility, not amplifying it). Here's how to pull both with two API calls:
The exposure summary endpoint requires the Growth plan. The volatility endpoint requires Growth as well. If you're on Free or Basic, use /v1/exposure/levels for the gamma flip and compare it to spot price - if spot is above the gamma flip, you're in positive gamma.
Don't sell premium during danger_zone. When the API labels a symbol as danger_zone or negative_spread, the option market is mispricing recent volatility. Selling vol into that mispricing has historically been the fastest way to give back a year of premium income in a single week. Wait for the assessment to flip back to thin_premium or above before redeploying capital.
Beyond the Spread: Z-Score and Percentile (Alpha Tier)
The /v1/volatility endpoint gives you the raw VRP. If you want to know whether this VRP value is unusual relative to the stock's own VRP history, FlashAlpha's /v1/vrp/{symbol} endpoint returns:
z_score - how many standard deviations the current VRP is from its 60-day rolling mean. A z-score of -3 means today's VRP is at the bottom of the recent distribution; +2 means it's at the top.
percentile - where today's VRP sits in the 60-day distribution (0 to 100).
vrp_regime - regime classifier: cheap_convexity, fair_value, elevated, etc.
gex_conditioned - VRP adjusted for the current gamma regime.
net_harvest_score - 0-100 score combining VRP, gamma regime, dealer flow risk, and term structure into a single tradeability metric.
This is the institutional version of the same question - "is current VRP good enough to deploy capital?" - with a quant scoring model on top. It requires the Alpha plan. For most premium sellers, the simpler /v1/volatility assessment label is enough.
Common Mistakes
1. Ranking on raw VRP without checking the regime
A +10 VRP in a very_high_premium name three days before earnings is not the same as a +10 VRP in a healthy_premium name with no catalyst on the calendar. The first is a tail-risk trade dressed up as a vol harvest; the second is the actual edge. The assessment label encodes this distinction - use it.
2. Confusing "high IV" with "high VRP"
COIN at 73% IV looks scary high. But COIN's recent realised vol is 70%. The VRP is +3 - thin, not the +20 that the headline IV implies. Premium sellers chasing "high IV" without checking realised get their face ripped off in names like this. The metric you actually want is the spread, not the level.
3. Ignoring the multi-window structure
The API returns four lookback windows on purpose. The 5-day VRP is your recent regime; the 30-day is your baseline. When 5-day diverges sharply from 30-day, something just changed - usually a vol shock or a quiet drift. If you only look at one window, you miss the regime change in progress.
VRP vs IV Rank: When to Use Which
IV Rank
VRP
What it measures
Current IV vs this stock's IV history
Current IV vs current realised vol
Best for
Sentiment, "is this stock priced like it usually is?"
Premium selling, "is the option market wrong about how much this moves?"
Captures regime change
Slowly - lags by weeks
Immediately - within days
Catches event premium
Sometimes
Always (very_high_premium label)
Comparable across stocks
Yes - normalised 0-100
Yes - in percentage points of vol
Captures mispricing
No - it's self-relative
Yes - it's truth-relative
The two metrics aren't enemies - use both. Rank a candidate list by IV rank to surface "high IV" names, then filter that list with VRP to keep only the ones where the high IV is justified by an actual edge. The intersection is much smaller and much more profitable than either filter alone.
Ready to Build
The volatility risk premium is one of the most under-used metrics in retail options trading - mostly because computing it from scratch requires both an options data feed and a clean realised vol calculator. FlashAlpha ships both, pre-computed, in a single API call. Free tier doesn't include the volatility endpoint, but the Growth plan ($299/mo) unlocks it for 2,500 daily requests - enough to scan 100+ symbols multiple times per day.