Open Interest Over Time

Overview

Open Interest Over Time returns the per-session call and put open-interest series for one ticker across every trading session with available data. There is no time-selection field on the request: the response inherently spans the full available history.

POST/v1/options/tool/open-interest-over-time
curl -X POST https://api.quantdata.us/v1/options/tool/open-interest-over-time \
  -H "Authorization: Bearer <YOUR_API_KEY>" \
  -H "Content-Type: application/json" \
  -d '{
    "filter": { "ticker": "AAPL" }
  }'

Required: ticker

filter.ticker is the only required field. Two optional filters narrow the rollup before the series is computed.

  • ticker (string, required): the underlying symbol, e.g. AAPL.
  • expirationDate (LocalDate, optional): when present, restricts the rollup to a single expiration.
  • strikePrice (double, dollars, optional): when present, restricts the rollup to a single strike. Must be positive.

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

Narrowing to one contract

Request · pin to expiration + strike
{
  "filter": {
    "ticker": "AAPL",
    "expirationDate": "2026-05-16",
    "strikePrice": 215.0
  }
}

Response shape

data maps each session date to its call / put open-interest pair. Keys are ISO dates sorted ascending.

200 OK · application/json
{
  "data": {
    "2026-05-09": { "callOpenInterest": 162034, "putOpenInterest": 75320 },
    "2026-05-10": { "callOpenInterest": 168120, "putOpenInterest": 78440 },
    "2026-05-13": { "callOpenInterest": 184201, "putOpenInterest": 92410 }
  }
}

Per-session cell fields:

  • callOpenInterest (integer, contracts): total open interest across every call contract (or the narrowed expiration / strike if either filter was supplied).
  • putOpenInterest (integer, contracts): the same on the put side.

The endpoint throws ValidationFailure when the request is malformed.

Where to go next