Surface Anomaly Strategy API
Compares observed IVs against the calibrated SVI fit for an expiry to find rich/cheap wings (per-strike residuals, fit quality, cheap-convexity score), and proposes the obvious vertical-credit sale on a rich wing.
Endpoint
X-Api-Key)
Rate Limited: Yes
Alpha plan+
Parameters
| Name | In | Required | Default | Description |
|---|---|---|---|---|
symbol | path | yes | - | Underlying symbol. |
expiry | query | no | nearest fitted SVI slice | yyyy-MM-dd. The expiry slice to analyse. |
curl -H "X-Api-Key: YOUR_API_KEY" \
"https://lab.flashalpha.com/v1/strategies/surface-anomaly/SPY?expiry=2026-06-19"
import requests
resp = requests.get(
"https://lab.flashalpha.com/v1/strategies/surface-anomaly/SPY",
params={"expiry": "2026-06-19"},
headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(f"{data['decision']} ({data['regime']}) score={data['score']}")
const resp = await fetch(
"https://lab.flashalpha.com/v1/strategies/surface-anomaly/SPY?expiry=2026-06-19",
{ headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log(`${data.decision} (${data.regime}) score=${data.score}`);
Response
Returns the standard strategy decision envelope. Every Strategy Signals endpoint returns this same shape; only metrics and regime change per strategy.
{
"strategy": "surface_anomaly",
"symbol": "SPY",
"timestamp": "2026-06-05T14:32:11Z",
"decision": "candidate",
"score": 72,
"confidence": 0.83,
"regime": "rich_put_wing",
"best_structures": [
{
"rank": 1,
"structure": "short_put_spread",
"expiry": "2026-06-19",
"legs": [
{ "action": "sell", "type": "put", "strike": 580, "delta": -0.25, "premium": 3.10, "quantity": 1 },
{ "action": "buy", "type": "put", "strike": 570, "delta": -0.13, "premium": 1.80, "quantity": 1 }
],
"credit": 1.30,
"debit": null,
"max_profit": 1.30,
"max_loss": 8.70,
"breakevens": [578.70],
"edge_score": 72,
"liquidity_score": 0.88
}
],
"metrics": {
"expiry": "2026-06-19",
"put_wing_richness": 1.4,
"call_wing_richness": -0.2,
"dominant_wing": "put",
"fit_quality_score": 0.94,
"underlying_price": 589.12
},
"risk_flags": [],
"why": ["Observed put-wing IVs sit 1.4 vol points above the SVI fit."],
"avoid_if": ["The fitted slice is stale or the residuals collapse intraday."],
"data_quality": { "score": 90, "warnings": [] }
}
Strategy-specific fields
Notable metrics keys (in addition to the always-present underlying_price):
| Metric |
|---|
expiry |
put_wing_richness |
call_wing_richness |
dominant_wing |
sample_count |
forward |
per_strike_residuals |
fit_quality_score |
cheap_convexity_score |
underlying_price |
regime values: rich_put_wing, rich_call_wing, flat_residuals; plus no_fitted_surface (insufficient-data case).
Errors
| Status | error |
When |
|---|---|---|
400 | invalid_expiry | expiry is present but not yyyy-MM-dd. |
403 | tier_restricted | Caller is below the Alpha plan. |
404 | symbol_not_found | No market data for the symbol. |
About
This strategy compares observed implied volatilities against the calibrated SVI fit for an expiry to surface rich or cheap wings. It reports per-strike residuals, a fit-quality score, and a cheap-convexity score, and where a wing is rich it proposes the obvious vertical-credit sale.
It returns the standard strategy decision envelope shared by all Strategy Signals endpoints. When no fitted SVI slice is available, it short-circuits with decision: insufficient_data and regime: no_fitted_surface.
Common Use Cases
- Spot the dislocation - read
regimeto find rich or cheap IV wings relative to the fitted surface for relative-value trades - Trade only clean signals - act when
decisioniscandidateand skipno_setupreads where the residual is noise - Drop in the proposed structure - pull
best_structures[]for a vertical-credit spread on the rich wing or a debit on the cheap one - Rank the watchlist - sort by
scoreto surface the largest surface mispricings across a universe - Size on conviction - scale the trade by
scoreandconfidencerather than a fixed clip - Respect the guardrails - honor
risk_flags[]and require a cleandata_qualitybefore trusting a thin-fit residual
Related
Related reading
- Engineering arbitrage-free volatility surfaces - the fit the anomaly is measured against
- ML on options data: a quant guide - feed surface residuals into a systematic model
- Alpha decay: which signals erode - how fast a surface mispricing closes
Complementary endpoints
- Strategy Signals overview - the shared decision envelope across every strategy
- Skew - the wing slope feeding into the surface anomaly
- Advanced Volatility - the raw SVI surface the fit is built on
Ready to build?
Get your free API key and start pulling live options data in 30 seconds.