Skip to content

Options · Exposure, levels, volatility and OI

Options exposure forecast

Modeled levels repriced at intraday horizons with a statistical cone.
GET/v1/options/exposure/forecastoptionsExposureForecast
On this page

The modeled gamma levels (gamma flip, call wall, put wall, largest cell, largest absolute gamma strike) recomputed as of each horizon with the expiring contracts removed and time decay applied, the net exposure at the current price, a one- and two-standard-deviation cone for the underlying from its implied volatility, and how often the levels have held in the platform's own history. The state hint (pin, grind, volatile or undetermined) is a heuristic and is not calibrated; nothing here is a prediction of price. 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/exposure/forecast" \
  -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

12 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.
unitqueryoptionalstringper_percentper_dollarrawdefault per_percentScale of the exposure values.
modelqueryoptionalstringclassic_oiflow_adjusteddefault classic_oiDealer positioning model.
horizonsqueryoptionalarray<string>comma-separated in one parameter306090120close1 to 5 itemsForecast horizons: 30, 60, 90, 120 (minutes ahead) and close. Default all.

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

  • dataobjectrequiredModeled levels repriced at intraday horizons.56 fields inside
    • cone_modelobjectrequiredHow the cone is built.5 fields inside
      • implied_volatilitynumber | nullrequiredImplied volatility used.
      • implied_volatility_expirystring | nullrequiredExpiration the volatility is taken from.
      • methodstringrequiredMethod name.
      • rth_variance_sharenumber | nullrequiredShare of the day's variance in the regular session.
      • total_variancenumber | nullrequiredTotal variance to the close.
    • empiricalobjectrequiredHistory behind the hold statistics.3 fields inside
      • methodstringrequiredMethod name.
      • move_sessionsintegerrequiredSessions behind the typical moves.
      • state_sessionsintegerrequiredSessions behind the state statistics.
    • horizonsarray<object>requiredOne entry per horizon.23 fields inside
      • call_wallnumber | nullrequiredCall wall.
      • coneobject | nullrequiredRange of the underlying price at the horizon from its implied volatility.2 fields inside
        • one_sigmaarray<number>requiredLower and upper bound at one standard deviation.
        • two_sigmaarray<number>requiredLower and upper bound at two standard deviations.
      • expired_contractsintegerrequiredContracts that expire before the horizon and are removed.
      • gamma_flipnumber | nullrequiredGamma flip repriced to the horizon (model-derived).
      • holdobject | nullrequiredHow often the levels held historically.4 fields inside
        • bandarray<number>requiredConfidence band.
        • ratenumberrequiredFraction of sessions.
        • samplesintegerrequiredSessions observed.
        • strengthstringrequiredStrength of the evidence.weakmoderatestrong
      • hold_reasonstring | nullrequiredWhy no hold statistic is available, for example insufficient_history.
      • labelstringrequiredHorizon: 30, 60, 90, 120 or close.
      • largest_absolute_gamma_strikenumber | nullrequiredStrike of the largest absolute gamma.
      • largest_cell_strikenumber | nullrequiredStrike of the largest strike-by-expiration cell.
      • minutesintegerrequiredMinutes ahead of the valuation.
      • net_exposure_at_underlying_pricenumber | nullrequiredNet modeled exposure at the current underlying price.
      • put_wallnumber | nullrequiredPut wall.
      • timestampinteger | nullunix-msrequiredTime of the horizon. Unix epoch milliseconds (UTC).
      • typical_moveobject | nullrequiredHistorical typical move to this horizon.3 fields inside
        • percentnumberrequiredPercent.
        • pointsnumberrequiredPoints.
        • samplesintegerrequiredSessions observed.
    • levels_nowobjectrequiredThe levels at the valuation time.5 fields inside
      • call_wallnumber | nullrequiredCall wall.
      • gamma_flipnumber | nullrequiredGamma flip.
      • largest_absolute_gamma_strikenumber | nullrequiredLargest absolute gamma strike.
      • largest_cell_strikenumber | nullrequiredLargest cell strike.
      • put_wallnumber | nullrequiredPut wall.
    • sessionstringrequiredSession.rthgthcurball
    • state_hintobjectrequiredA heuristic read of the session. Not calibrated and not a prediction.3 fields inside
      • calibratedbooleanrequiredAlways false: the hint is not calibrated.
      • labelstringrequiredpin, grind, volatile or undetermined.pingrindvolatileundetermined
      • reasonsarray<string>requiredWhat led to the label.
    • trading_datestringdaterequiredTrading date.
    • underlying_pricenumber | nullrequiredCurrent underlying price.
    • underlying_symbolstringrequiredThe requested underlying.
    • 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": {
    "cone_model": {
      "implied_volatility": 0.142,
      "implied_volatility_expiry": "2026-10-16",
      "method": "lognormal_sticky_iv_variance_clock",
      "rth_variance_share": 0.8,
      "total_variance": 0.00052
    },
    "empirical": {
      "method": "empirical_state_persistence",
      "move_sessions": 18,
      "state_sessions": 18
    },
    "horizons": [
      {
        "call_wall": 6050,
        "cone": {
          "one_sigma": [
            6003.1,
            6039.7
          ],
          "two_sigma": [
            5984.8,
            6058
          ]
        },
        "expired_contracts": 26,
        "gamma_flip": 5934.5,
        "hold": {
          "band": [
            0.41,
            0.82
          ],
          "rate": 0.64,
          "samples": 18,
          "strength": "weak"
        },
        "hold_reason": null,
        "label": "60",
        "largest_absolute_gamma_strike": 6000,
        "largest_cell_strike": 6000,
        "minutes": 60,
        "net_exposure_at_underlying_price": -210000000,
        "put_wall": 5950,
        "timestamp": 1792164600000,
        "typical_move": {
          "percent": 0.21,
          "points": 12.6,
          "samples": 18
        }
      }
    ],
    "levels_now": {
      "call_wall": 6050,
      "gamma_flip": 5934.5,
      "largest_absolute_gamma_strike": 6000,
      "largest_cell_strike": 6000,
      "put_wall": 5950
    },
    "session": "rth",
    "state_hint": {
      "calibrated": false,
      "label": "grind",
      "reasons": [
        "positive gamma above the underlying price"
      ]
    },
    "trading_date": "2026-10-16",
    "underlying_price": 6021.4,
    "underlying_symbol": "SPX",
    "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.