Max Pain

Overview

Max Pain returns the per-strike call and put intrinsic-value grid for a single ticker and expiration on one trading session, plus the strike that maximizes total writer-side intrinsic value (the max-pain strike) and the underlying stock price.

POST/v1/options/tool/max-pain
curl -X POST https://api.quantdata.us/v1/options/tool/max-pain \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "sessionDate": "2026-05-13",
    "filter": {
      "ticker": "AAPL",
      "expirationDate": "2026-05-16"
    }
  }'

Required: ticker and expirationDate

Both filter.ticker and filter.expirationDate are required. The endpoint scopes to exactly one ticker / expiration / session combination.

  • ticker (string): the underlying symbol, e.g. AAPL.
  • expirationDate (LocalDate): the option expiration, e.g. 2026-05-16.

No other request fields are accepted. filterExpression, snapshotTime, timeRange, aggregationPeriod, projection, and pagination do not apply to this endpoint.

Selecting the session

sessionDate is optional and selects the trading session to evaluate. If omitted, the most recent session is used.

Open-interest data lags the session start, so before the market opens on any given day, the latest available session is yesterday's session. Pass sessionDate explicitly when you want a specific date.

Response shape

data walks strike (dollars) -> intrinsic-value cell. Keys are dollar strike prices as strings (e.g. "215.0") sorted ascending. All dollar values are returned in dollars.

200 OK · application/json
{
  "data": {
    "210.0": { "callIntrinsicValue": 1842010.0, "putIntrinsicValue": 92410.0 },
    "215.0": { "callIntrinsicValue": 1320500.0, "putIntrinsicValue": 184201.0 },
    "220.0": { "callIntrinsicValue": 815240.0, "putIntrinsicValue": 412050.0 },
    "225.0": { "callIntrinsicValue": 410120.0, "putIntrinsicValue": 882010.0 },
    "230.0": { "callIntrinsicValue": 88010.0, "putIntrinsicValue": 1620340.0 }
  },
  "maxPainStrikePrice": 220.0,
  "stockPrice": 218.42
}

Per-strike cell fields:

  • callIntrinsicValue (double, dollars): the total intrinsic value writers would owe call holders if the underlying settled at this strike.
  • putIntrinsicValue (double, dollars): the same on the put side.

Top-level fields:

  • maxPainStrikePrice (double, dollars): the strike that maximizes total writer-side intrinsic value across calls and puts.
  • stockPrice (double, dollars): the underlying stock price for the selected session.

Where errors come from

The endpoint surfaces three distinct failures, all as ValidationException: ValidationFailure when input is malformed, StockPriceNotFound when no underlying price exists for the selected session, and EmptyOpenInterest when no open-interest data exists for that ticker, session, and expiration combination.

Where to go next