Skew Strategy API - 25-Delta Risk Reversal Signal - FlashAlpha Lab API
Lab API Skew

Skew Strategy API

Pure-signal read of 25-delta skew (put vs call wing richness and the risk reversal) for one expiry. No structure is selected; best_structures is always empty and decision is neutral.

Endpoint

GET /v1/strategies/skew/{symbol}
Auth required (X-Api-Key) Rate Limited: Yes Growth plan+

Parameters

Name In Required Default Description
symbolpathyes - Underlying symbol.
expiryquerynonearest upcoming expiryyyyy-MM-dd. The expiry to read.
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://lab.flashalpha.com/v1/strategies/skew/SPY"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/strategies/skew/SPY",
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(f"{data['regime']} rr25={data['metrics']['risk_reversal_25d']}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/strategies/skew/SPY",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log(`${data.regime} rr25=${data.metrics.risk_reversal_25d}`);

Response

Returns the standard strategy decision envelope. This is a pure-signal endpoint, so best_structures is always empty and decision is neutral. Only metrics and regime change per strategy.

{
  "strategy": "skew",
  "symbol": "SPY",
  "timestamp": "2026-06-05T14:32:11Z",
  "decision": "neutral",
  "score": 55,
  "confidence": 0.81,
  "regime": "put_skew",
  "best_structures": [],
  "metrics": {
    "expiry": "2026-06-19",
    "days_to_expiry": 14,
    "atm_iv": 0.142,
    "call_iv_25d": 0.131,
    "put_iv_25d": 0.168,
    "risk_reversal_25d": -0.037,
    "skew_slope": -0.18,
    "dominant_wing": "put",
    "sample_count": 42,
    "underlying_price": 589.12
  },
  "risk_flags": [],
  "why": ["25-delta puts trade 3.7 vol points over 25-delta calls (put-skewed)."],
  "avoid_if": ["Sample is thin or the wings cannot both be priced."],
  "data_quality": { "score": 88, "warnings": [] }
}

Strategy-specific fields

Notable metrics keys (in addition to the always-present underlying_price):

Metric
expiry
days_to_expiry
atm_iv
call_iv_25d
put_iv_25d
risk_reversal_25d
skew_slope
dominant_wing
sample_count
underlying_price

regime values: put_skew, call_skew, flat_skew; plus no_skew_data (insufficient-data case).

Errors

Status error When
400invalid_expiryexpiry is present but not yyyy-MM-dd.
400expiry_in_pastexpiry is a date before today (ET).
403tier_restrictedCaller is below the Growth plan.
404symbol_not_foundNo market data for the symbol.

About

This strategy is a pure-signal read of 25-delta skew for a single expiry: it reports put vs call wing richness, the 25-delta risk reversal, ATM and 25-delta IVs, the skew slope, and the dominant wing. No trade structure is selected.

It returns the standard strategy decision envelope shared by all Strategy Signals endpoints, but as a signal-only read best_structures is always empty and decision is neutral. When both 25-delta wings cannot be priced, it returns decision: insufficient_data with regime: no_skew_data.

Common Use Cases

  • Read the skew regime - use regime to classify an expiry as put-skewed, call-skewed, or flat and pick the right wing to fade
  • Trade only clean signals - act when decision is candidate and skip no_setup reads without review
  • Drop in the proposed structure - pull best_structures[] for a risk-reversal or wing-credit spread sized to the skew dislocation
  • Rank the watchlist - sort a universe by score to surface symbols with the most extreme wing richness
  • Size on conviction - scale exposure by score and confidence rather than treating every steep skew alike
  • Respect the guardrails - honor risk_flags[] and require a clean data_quality before acting on a thin-wing fit

Related reading

Complementary endpoints

Ready to build with FlashAlpha?

Get your free API key and start pulling live options data in 30 seconds.

No credit card required Setup in 60 seconds Secure & reliable