Skip to content

Options · Exposure, levels, volatility and OI

Options levels

Key levels of the modeled dealer exposure: walls, gamma flip, largest cell, max pain, expected move.
On this page

The strikes that matter in the modeled exposure: call and put walls (overall and nearest the underlying price), the strike of the largest absolute exposure, the gamma flip (the underlying price where net modeled gamma changes sign, nearest the current price; a model-derived level, not an observed one), the largest strike-by-expiration cell, the peak net exposure, gatekeepers between the price and that peak, max pain, the one-standard-deviation expected move of the nearest expiration, the exposure regime and the five largest strikes per side. The regime is positive when net exposure is at least 5% of absolute exposure, negative at -5% or below, else neutral; it is a description of the model and not a forecast. Dealer positioning is a model, not observed: with classic_oi the dealer is assumed long the calls and short the puts of the open interest, with flow_adjusted the classified prints since the open interest date adjust it. Public open interest does not identify who holds a position, so the values are estimates of exposure under that assumption.

Example request

curl -sS --get "https://api.ordermap.si/v1/options/levels" \
  -H "Authorization: Bearer $ORDERMAP_API_KEY" \
  --data-urlencode underlying_symbol=SPXW

Set ORDERMAP_API_KEY to your key. Replace the dates with a recent trading date.

Parameters

15 parameters, 1 required.

ParameterType and limitsDescription
underlying_symbolqueryrequiredstringat most 8 characterspattern ^[A-Za-z][A-Za-z0-9.]{0,7}$Option root or family: SPX covers the SPX and SPXW roots, SPXW only the weekly root, QQQ, NDXP, RUTW, XSP ...
datequeryoptionalstringdateTrading date (YYYY-MM-DD). Default: the current session, else the most recent completed one.
sessionqueryoptionalstringrthgthdefault rthTrading session: rth is the regular session, gth the overnight (global trading hours) session before the trading date. Overnight data requires the Pro plan and exists only for underlyings with an overnight session; GET /v1/options/sessions shows which.
contract_typequeryoptionalstringcallputCalls or puts. Omit for both.
date_of_expiryqueryoptionalstringdateOnly this expiration.
expirationsqueryoptionalarray<string>comma-separated in one parameter1 to 64 itemseach at most 128 characterspattern ^[0-9]{4}-[0-9]{2}-[0-9]{2}$Only these expirations, comma separated (YYYY-MM-DD), at most 64. Unlisted dates are ignored.
expiry_modequeryoptionalstring0dte1dteweeklymonthlylte30lte90Expiration set: 0dte, 1dte, weekly (within 7 days), monthly (third-Friday expirations), lte30 or lte90 (within 30 or 90 days).
min_dtequeryoptionalintegermin 0max 3650Minimum days to expiration (0 = expires on the trading date).
max_dtequeryoptionalintegermin 0max 3650Maximum days to expiration.
greekqueryoptionalstringgammadeltavannacharmdefault gammaThe exposure measured: gamma, delta, vanna or charm.
unitqueryoptionalstringper_percentper_dollarrawdefault per_percentScale of the values: per_percent (dollars of dealer hedging per 1% move of the underlying), per_dollar (per $1 move) or raw (shares, or per unit of the greek).
modelqueryoptionalstringclassic_oiflow_adjusteddefault classic_oiDealer positioning model: classic_oi (open interest, calls long and puts short) or flow_adjusted (adjusted by classified prints since the open interest date).
perspectivequeryoptionalstringdealercustomerdefault dealerdealer (default) or customer, which negates the values only.
includequeryoptionalarray<string>comma-separated in one parametervannacharmdelta1 to 3 itemsOptional key levels to compute: vanna, charm, delta.
gatekeeper_ratioqueryoptionalnumberdefault 0.4min 0.1max 0.9Gatekeepers are strikes between the underlying price and the peak net exposure with at least this fraction of its absolute exposure.

Response

StatusMeaningBody
200Successful response.Schema below
400Invalid, unknown or repeated parameters, or an invalid cursor.Error object
401Missing or invalid API key.Error object
403The plan, dataset release or account state does not allow this request.Error object
422The request is valid but no data exists for it.Error object
429Rate limit, burst limit or cooldown; wait Retry-After seconds.Retry-AfterError object
500Internal error.Error object
503Data temporarily unavailable; retry after Retry-After seconds.Retry-AfterError object
504The request timed out.Error object

Authenticated responses carry the X-RateLimit-* headers (see rate limits); 429 and 503 add Retry-After.

200 response body

  • dataobjectrequiredKey levels of the modeled exposure.88 fields inside
    • greekstringrequiredThe measure: gamma, delta, vanna, charm or the heat map metric.
    • levelsobjectrequiredThe levels.43 fields inside
      • call_wallnumber | nullrequiredStrike of the largest positive call exposure.
      • call_wall_abovenumber | nullrequiredAt or above the underlying price: strike of the largest positive net exposure.
      • charm_max_absolute_strikenumber | nullrequiredStrike of the largest absolute net charm (include=charm).
      • delta_key_strikenumber | nullrequiredStrike of the largest absolute net delta (include=delta).
      • expected_moveobject | nullrequiredOne-standard-deviation move to the nearest expiration.7 fields inside
        • date_of_expirystringdaterequiredExpiration.
        • expected_movenumber | nullrequiredMove in index points or dollars: price x volatility x square root of time.
        • implied_volatilitynumber | nullrequiredAt-the-money implied volatility.
        • one_sigma_bandarray<number>requiredLower and upper bound.
        • straddlenumber | nullrequiredAt-the-money straddle price.
        • straddle_expected_movenumber | nullrequiredExpected move implied by the straddle.
        • two_sigma_bandarray<number>requiredLower and upper bound.
      • gamma_flipnumber | nullrequiredUnderlying price where net modeled gamma changes sign, nearest the current price. Model-derived (sticky-strike repricing), not observed.
      • gamma_flip_candidatesarray<number>requiredEvery price where net modeled gamma changes sign.
      • gamma_flip_excluding_0dtenumber | nullrequiredThe gamma flip with the contracts expiring on the trading date removed.
      • gamma_flip_far_from_underlyingboolean | nullrequiredThe gamma flip lies beyond the swept range around the underlying price.
      • gamma_tiltnumber | nullrequiredPositive call gamma over the absolute negative put gamma.
      • gatekeepersarray<number>requiredStrikes between the underlying price and the peak net exposure with at least the gatekeeper ratio of its absolute exposure.
      • largest_absolute_strikenumber | nullrequiredStrike of the largest absolute exposure.
      • largest_cellobject | nullrequiredThe strike and expiration of the largest absolute net exposure.3 fields inside
        • date_of_expirystringdaterequiredExpiration.
        • strikenumberrequiredStrike.
        • valuenumberrequiredExposure.
      • major_negativenumber | nullrequiredStrike of the most negative net exposure.
      • major_positivenumber | nullrequiredStrike of the largest positive net exposure.
      • max_painobject | nullrequiredMax pain of the nearest expiration.2 fields inside
        • date_of_expirystringdaterequiredExpiration.
        • strikenumberrequiredStrike.
      • next_expiration_sharenumber | nullrequiredShare of absolute gamma in the nearest expiration.
      • peak_net_exposureobject | nullrequiredA strike and its value.2 fields inside
        • strikenumberrequiredStrike.
        • valuenumberrequiredExposure at the strike.
      • put_wallnumber | nullrequiredStrike of the largest negative put exposure.
      • put_wall_belownumber | nullrequiredAt or below the underlying price: strike of the most negative net exposure.
      • regimeobjectrequiredSign of the net modeled gamma relative to its absolute size. A description of the model, not a forecast.5 fields inside
        • absolutenumber | nullrequiredAbsolute exposure.
        • labelstringrequiredpositive (net/absolute at least 0.05), negative (at most -0.05) or neutral.positivenegativeneutral
        • netnumber | nullrequiredNet exposure.
        • rationumber | nullrequiredNet over absolute exposure.
        • underlying_vs_gamma_flipstringrequiredWhere the underlying price is relative to the gamma flip.abovebelownone
      • vanna_levelsobject | nullrequiredVanna key strikes (include=vanna).2 fields inside
        • maxnumber | nullrequiredLargest net vanna strike.
        • minnumber | nullrequiredMost negative net vanna strike.
    • modelstringrequiredDealer positioning model.classic_oiflow_adjusted
    • perspectivestringrequireddealer or customer (customer negates the values).dealercustomer
    • positioning_modelstringrequiredName and version of the positioning assumption, for example oi_signed_proxy-v1.
    • rankedobject | nullrequiredThe five largest strikes per side by absolute exposure, in the exposure's own units.24 fields inside
      • callsarray<object>requiredCall side.5 fields inside
        • distance_percentnumber | nullrequiredDistance in percent of the underlying price.
        • distance_pointsnumberrequiredStrike minus the underlying price.
        • rankintegerrequired1 is the largest.
        • strikenumberrequiredStrike.
        • valuenumberrequiredExposure.
      • grossarray<object>requiredGross (calls plus absolute puts).5 fields inside
        • distance_percentnumber | nullrequiredDistance in percent of the underlying price.
        • distance_pointsnumberrequiredStrike minus the underlying price.
        • rankintegerrequired1 is the largest.
        • strikenumberrequiredStrike.
        • valuenumberrequiredExposure.
      • netarray<object>requiredNet.5 fields inside
        • distance_percentnumber | nullrequiredDistance in percent of the underlying price.
        • distance_pointsnumberrequiredStrike minus the underlying price.
        • rankintegerrequired1 is the largest.
        • strikenumberrequiredStrike.
        • valuenumberrequiredExposure.
      • putsarray<object>requiredPut side.5 fields inside
        • distance_percentnumber | nullrequiredDistance in percent of the underlying price.
        • distance_pointsnumberrequiredStrike minus the underlying price.
        • rankintegerrequired1 is the largest.
        • strikenumberrequiredStrike.
        • valuenumberrequiredExposure.
    • rootsarray<string>requiredOption roots included.
    • sessionstringrequiredSession valued.rthgthcurball
    • trading_datestringdaterequiredTrading date valued.
    • underlying_pricenumber | nullrequiredUnderlying price used.
    • underlying_symbolstringrequiredThe requested underlying.
    • unitstringrequiredScale of the values.per_percentper_dollarraw
    • unit_labelstringrequiredWhat one unit is, for example usd_per_pct: dollars of dealer hedging per 1% move.
    • valuationobjectrequiredWhat the snapshot was valued on.7 fields inside
      • chain_timestampinteger | nullunix-msrequiredTime of the option chain the valuation used. Unix epoch milliseconds (UTC).
      • open_interest_datestring | nulldaterequiredDate of the open interest the positioning is based on.
      • risk_free_ratenumber | nullrequiredContinuously compounded risk-free rate used.
      • timestampinteger | nullunix-msrequiredValuation time. Unix epoch milliseconds (UTC).
      • underlying_pricenumber | nullrequiredUnderlying price used.
      • underlying_stalebooleanrequiredThe underlying price is older than the freshness limit.
      • underlying_timestampinteger | nullunix-msrequiredTime of the underlying price. Unix epoch milliseconds (UTC).
  • metaobjectrequiredMeta object

Example response

{
  "data": {
    "greek": "gamma",
    "levels": {
      "call_wall": 6050,
      "call_wall_above": 6050,
      "charm_max_absolute_strike": null,
      "delta_key_strike": null,
      "expected_move": {
        "date_of_expiry": "2026-10-16",
        "expected_move": 24.6,
        "implied_volatility": 0.142,
        "one_sigma_band": [
          5996.8,
          6046
        ],
        "straddle": 19.7,
        "straddle_expected_move": 24.6,
        "two_sigma_band": [
          5972.2,
          6070.6
        ]
      },
      "gamma_flip": 5934.5,
      "gamma_flip_candidates": [
        5934.5
      ],
      "gamma_flip_excluding_0dte": 5961,
      "gamma_flip_far_from_underlying": false,
      "gamma_tilt": 0.92,
      "gatekeepers": [],
      "largest_absolute_strike": 6000,
      "largest_cell": {
        "date_of_expiry": "2026-10-16",
        "strike": 6000,
        "value": -338000000
      },
      "major_negative": 5950,
      "major_positive": 6050,
      "max_pain": {
        "date_of_expiry": "2026-10-16",
        "strike": 6000
      },
      "next_expiration_share": 0.27,
      "peak_net_exposure": {
        "strike": 6000,
        "value": -417000000
      },
      "put_wall": 5950,
      "put_wall_below": 5950,
      "regime": {
        "absolute": 28800000000,
        "label": "neutral",
        "net": -1200000000,
        "ratio": -0.0422,
        "underlying_vs_gamma_flip": "above"
      },
      "vanna_levels": null
    },
    "model": "classic_oi",
    "perspective": "dealer",
    "positioning_model": "oi_signed_proxy-v1",
    "ranked": {
      "calls": [
        {
          "distance_percent": -0.3554,
          "distance_points": -21.4,
          "rank": 1,
          "strike": 6000,
          "value": 6050000000
        }
      ],
      "gross": [],
      "net": [],
      "puts": []
    },
    "roots": [
      "SPX",
      "SPXW"
    ],
    "session": "rth",
    "trading_date": "2026-10-16",
    "underlying_price": 6021.4,
    "underlying_symbol": "SPX",
    "unit": "per_percent",
    "unit_label": "usd_per_pct",
    "valuation": {
      "chain_timestamp": 1792160995000,
      "open_interest_date": "2026-10-15",
      "risk_free_rate": 0.0412,
      "timestamp": 1792161000000,
      "underlying_price": 6021.4,
      "underlying_stale": false,
      "underlying_timestamp": 1792160999000
    }
  },
  "meta": {
    "as_of": 1760659200123,
    "coverage": {
      "complete": true
    },
    "delay_ms": 0,
    "delayed": false,
    "request_id": "0199f0c2-5a1e-7c3b-9d4e-2b6f8a1c3d5e",
    "source": "opra"
  }
}

Values are illustrative. Missing values are null, never 0.