VolatilityWizard
Turn raw CBOE volatility data into ready-to-use options intelligence — VIX regime, IV rank, term structure, and strategy setup scores from a single REST call.
VolatilityWizard pulls official CBOE daily index data (VIX, VIX9D, VIX3M, VIX6M, and the per-stock VX series) and turns it into the signals options traders actually use: what volatility regime the market is in, how rich a name's implied volatility is versus its own history, the shape of the VIX term structure, and a 0–100 quality score for popular options strategies. Every response is plain JSON with stable field names, cached for fast repeat reads, and ready to drop into a scanner, dashboard, or trading bot.
Endpoints
| Endpoint | What it returns |
|---|---|
GET /health |
{ "status": "ok" } — liveness check, never requires auth. |
GET /vix/regime |
Current vix level, percentile_20d (rank over the last 20 sessions), term_structure_shape (contango / backwardation / flat), and regime (low / moderate / elevated / high). |
GET /iv/rank/:ticker |
ticker, iv_rank (0–100 over ~252 sessions), atm_iv, hv_30d, premium_signal (sell_premium / buy_premium / neutral), and data_source (cboe_vx or vix_proxy). |
GET /flow/signals/:ticker |
ticker, call_put_ratio, largest_print, net_sentiment (bullish / neutral / mixed / bearish), vix_regime, and data_source. |
GET /term-structure/:symbol |
symbol, vix9d, vix, vix3m, vix6m, shape (contango / backwardation / flat), and data_source. |
GET /setup/score/:ticker?strategy=iron_condor |
ticker, strategy, score (0–100), iv_rank, net_sentiment, term_structure_slope, and data_source. Supported strategies: iron_condor (default), long_straddle, covered_call. |
Why this API
- Sourced from official CBOE data. VIX-family and per-stock VX indices are read straight from CBOE's public daily-price CSVs — not a black-box third party.
- Decisions, not just numbers. Beyond raw values, every endpoint returns a label or signal (regime, premium signal, term-structure shape, setup score) so you can act without building your own logic.
- Strategy-aware setup scoring.
/setup/scoreweights IV rank, sentiment, and term-structure slope differently per strategy, so an iron condor and a long straddle get scored for the conditions each actually wants. - Fast and cache-friendly. Responses are cached (default 300s TTL via Redis), so repeated scans across many tickers stay quick and cheap.
- Drop-in JSON with stable field names. Flat, predictable response shapes — easy to wire into a spreadsheet, scanner, or bot with zero parsing gymnastics.
Typical use cases
- Volatility regime dashboard — poll
/vix/regimeand/term-structure/SPYto show whether the market is calm or stressed and whether the curve is in contango or backwardation. - Premium-selling screener — loop tickers through
/iv/rank/:tickerand surface names wherepremium_signalissell_premium. - Strategy fit check — before placing a trade, hit
/setup/score/:ticker?strategy=iron_condor(orlong_straddle/covered_call) to gauge whether current conditions favor it. - AI trading agent tool — feed the JSON signals into an LLM agent (the same logic ships as an MCP server) to reason about options setups.
- Alerting — watch
/vix/regimeregimetransitions (e.g.moderate→elevated) to trigger risk-off notifications.
Good to know
- Data source is CBOE, not options chains. IV and volatility metrics are derived from CBOE volatility indices, not live options-chain/greeks feeds. Plan accordingly for strategies that need strike-level data.
- IV rank coverage is limited per-stock. Dedicated CBOE per-stock VX series exist only for
AAPL,GS,IBM, andAMZN(data_source: cboe_vx). Any other ticker falls back to the broad VIX as a proxy (data_source: vix_proxy), so itsiv_rank/atm_ivreflect market-wide volatility, not that single name. hv_30dis an estimate. It is derived from ATM IV (a fixed 0.87 ratio), not computed from realized price history.- Flow signals are a VIX-regime heuristic.
/flow/signalsinferscall_put_ratioandnet_sentimentfrom the current VIX regime; it is not raw order-flow data, andlargest_printis alwaysnull. - Daily granularity. Values come from CBOE daily closing prices and update once per trading day, not intraday/real-time.
- Caching. Responses are cached for
CACHE_TTL_SECONDS(default 300s), so a value can lag the source by up to the TTL window. - Errors. Upstream failures return
500with{ "error": "..." }; unknown routes return404with{ "error": "Not found" }.