Expected Move API - Straddle-Implied Move Per Expiry - FlashAlpha Lab API
Lab API Expected Move

Expected Move API

Straddle-implied expected move per expiry, derived from ATM implied volatility. Generalizes the earnings-only expected move to any upcoming expiry.

Endpoint

GET /v1/expected-move/{symbol}
Auth required (X-Api-Key) Rate Limited: Yes Basic+

Parameters

Name In Required Default Description
symbol path yes - Underlying ticker (case-insensitive; normalized to uppercase).
expiry query no all expiries Restrict the result to a single expiry, YYYY-MM-DD. Omit to receive every upcoming expiry.
curl -H "X-Api-Key: YOUR_API_KEY" \
  "https://lab.flashalpha.com/v1/expected-move/SPY?expiry=2026-06-20"
import requests

resp = requests.get(
    "https://lab.flashalpha.com/v1/expected-move/SPY",
    params={"expiry": "2026-06-20"},
    headers={"X-Api-Key": "YOUR_API_KEY"}
)
data = resp.json()
print(f"Expected move: {data['expected_moves'][0]['expectedMove']}")
const resp = await fetch(
  "https://lab.flashalpha.com/v1/expected-move/SPY?expiry=2026-06-20",
  { headers: { "X-Api-Key": "YOUR_API_KEY" } }
);
const data = await resp.json();
console.log("Expected move: " + data.expected_moves[0].expectedMove);

Response

{
  "symbol": "SPY",
  "underlying_price": 542.18,
  "as_of": "2026-06-05T14:32:10.123Z",
  "expected_moves": [
    {
      "expiry": "2026-06-20",
      "daysToExpiry": 15,
      "atmIv": 0.1642,
      "expectedMove": 17.6234,
      "expectedMovePct": 3.2504,
      "lowerBound": 524.5566,
      "upperBound": 559.8034
    }
  ]
}

Key Response Fields

Field Type Description
underlying_pricenumberSpot price of the underlying
as_ofstringTimestamp of the snapshot
expected_moves[]arrayOne entry per upcoming expiry, ordered by expiry
daysToExpiryintegerCalendar days to the expiry
atmIvnumber/nullATM implied vol as a decimal, or null when no ATM IV can be derived
expectedMovenumber1-σ move in price terms
expectedMovePctnumberExpected move as a percentage of spot
lowerBound / upperBoundnumberImplied range (spot ∓ expectedMove)

Errors

Status Description
400invalid_expiry - expiry query parameter is not a valid YYYY-MM-DD date
403tier_restricted - Free plan. Requires Basic or higher
404symbol_not_found - No data for the symbol. Message notes when the market is closed (9:30 AM – 4:00 PM ET)

About

Returns the straddle-implied expected move per expiry, derived from ATM implied volatility. It generalizes the earnings-only expected move to any upcoming expiry, giving a 1-σ implied range for every expiration on the chain.

Top-level keys are snake_case (underlying_price, as_of, expected_moves) while the items inside expected_moves use camelCase. Each entry carries daysToExpiry, atmIv, expectedMove, expectedMovePct, and the lowerBound / upperBound of the implied range.

Common Use Cases

  • Set targets and stops around the range - use lowerBound / upperBound as the 1-σ envelope when placing price targets and protective stops for an expiry
  • Size premium-selling structures - place iron-condor and credit-spread short strikes outside expectedMove so the structure clears the 1-σ band
  • Read the term structure of risk - compare expectedMovePct across the expected_moves[] entries to see how implied risk scales with daysToExpiry
  • Judge rich vs cheap - benchmark atmIv and expectedMovePct for an expiry against recent history to decide whether to buy or sell the move
  • Frame an event-week trade - isolate the expiry that straddles a catalyst and size around its expectedMove to bracket the implied reaction
  • Trade calendars off the term structure - exploit a front-to-back gap in expectedMovePct when near-dated implied move looks expensive relative to a later expiry

Related reading

Complementary endpoints

  • VRP - whether the implied move is rich versus realized
  • Volatility - the ATM IV term structure behind the move
  • Skew Term Structure - directional bias the symmetric move misses
  • Earnings - the earnings-only expected move this endpoint generalizes

Ready to build?

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