Free key · 10 calls/day

Where is options open interest concentrated for each expiration?

Send one US stock or ETF symbol. The Max Pain API returns the max pain strike, put/call ratio and largest open-interest concentrations for every expiration inside 45 days — as dated JSON that a person, script or AI agent can compare and monitor.

Get free API key View a real response

Input NVDA One liquid US stock or ETF
Commercial endpoint /v1/maxpain/NVDA Computed on demand from settled open interest
Output max_pain[] One dated record per expiration

This is the commercial JSON product. The Max Pain directory remains free: nightly HTML snapshots for a curated ticker set, no email or key. Use the API when you need another optionable symbol, structured output, repeated comparisons or an unattended workflow. The free key exercises the same API; paid access is for sustained, batch or unattended use.

What one response gives you

One answer per expiration

Max pain is not one permanent number for a ticker. Near and far expirations can disagree, so the API returns every expiration in the 45-day window with its own dte.

The chain around the answer

Alongside the strike you get call and put open interest, the put/call ratio and the highest-open-interest strike on each side. Add ?distribution=true for the strike-level distribution.

Dates an agent can audit

as_of identifies the settlement used for open interest; spot_date identifies the close used for distance calculations. A stale fallback is explicitly marked with stale: true.

The calculation in the payload

Every response carries method, note and disclaimer. Your agent does not need a separate prompt to remember what the number is — or what it is not.

The endpoint

Base URL https://api.quantdata.uk. Send X-API-Key: qd_...; there is no SDK, OAuth flow or session state. The same key opens the Brooks Events API, Weis / Wyckoff API and Gamma API. One plan covers all four.

Input Where Default What it changes
symbol path required US-listed stock or ETF with a liquid option chain.
distribution query false Adds the full oi_by_strike distribution for each expiration.

GET /v1/maxpain/{symbol}

This is the recorded 200 response published in the API contract for NVDA. Two expirations are shown; a live call returns every qualifying expiration inside 45 days.

$ curl -H "X-API-Key: qd_9f3c..." \
       https://api.quantdata.uk/v1/maxpain/NVDA

{
  "symbol": "NVDA",
  "as_of": "2026-07-24",
  "spot": 202.0599,
  "spot_date": "2026-07-27",
  "contracts": 1634,
  "max_pain": [
    {
      "expiration": "2026-07-27",
      "dte": 3,
      "max_pain": 210.0,
      "spot_vs_max_pain_pct": -3.78,
      "call_oi": 68508,
      "put_oi": 70326,
      "put_call_ratio": 1.027,
      "highest_call_oi_strike": 240.0,
      "highest_put_oi_strike": 200.0
    },
    {
      "expiration": "2026-07-31",
      "dte": 7,
      "max_pain": 200.0,
      "spot_vs_max_pain_pct": 1.03,
      "call_oi": 276006,
      "put_oi": 242793,
      "put_call_ratio": 0.88,
      "highest_call_oi_strike": 220.0,
      "highest_put_oi_strike": 170.0
    }
  ],
  "method": "For each expiration, the strike that minimises the total payout to option buyers if the underlying settled there. Computed from open interest alone: no pricing model, no volatility assumption, no fitted parameter.",
  "note": "Open interest as of the prior settlement, so this describes yesterday's positioning; dte is counted from as_of, the date the open interest was measured. highest_call_oi_strike and highest_put_oi_strike are simply the strikes carrying the most open interest; we have not measured whether price respects them, and they are not support or resistance levels. Descriptive output only: no forecast and no directional claim is made.",
  "disclaimer": "Educational analytics, not investment advice."
}

Read it as a dated chain summary: on the 2026-07-24 open-interest settlement, the Jul 27 and Jul 31 expirations produced different max pain strikes. Neither value is promoted to a single ticker-level target.

Two workflows, the same contract

Monitor one symbol through time

Call the same ticker after each new settlement, store as_of, and compare how max pain, put/call ratio and the largest OI concentrations move across expirations. This is the depth workflow: one instrument, repeatedly observed.

Compare a watchlist in one pass

Run the same request across the optionable stocks and ETFs you care about, then compare like-for-like fields. This is the breadth workflow: many symbols, one stable JSON shape, suitable for a scheduled agent.

A first request for an uncached symbol can return 202 with retry_after_seconds: 90. Retry that request after the stated delay. Thin chains, rejected symbols and failed lookups are not charged.

Freshness: settled, not live

Open interest is published after settlement. A call made during Tuesday’s session will normally describe Monday’s positions, even if the accompanying spot close is newer. This is not a refresh-rate problem the API can solve: there is no live intraday open-interest feed underneath the calculation. Always cite as_of, especially close to expiration.

Prior settlement Open interest is fixed
On request The latest available chain is calculated
In your system Store and cite as_of

Method: arithmetic, not a pricing model

For each expiration the service tries every listed strike and asks: if the underlying settled here, what total intrinsic payout would option buyers receive? The strike with the smallest total payout is max pain. The inputs are strike and open interest. There is no implied volatility, interest rate, fitted coefficient or dealer-position assumption.

That makes the result reproducible: two people holding the same de-duplicated chain will compute the same number. It does not make the number predictive. Arithmetic certainty about a chain is different from evidence about where price will trade.

Honest limits

US equity and ETF options only

Hong Kong, A-share, futures, FX and crypto symbols return 400. Cash-settled index roots do too; use SPY, QQQ or IWM instead of SPX, NDX or RUT.

Liquidity is required

The chain needs at least 200 contracts across at least three expirations inside 45 days. A thinner chain returns 404 instead of a plausible-looking unstable figure.

No intraday positioning

Same-day opening, closing and rolling activity is absent until the next settlement. The limitation is largest near expiry, when same-day flow can matter most.

No measured price reaction

The endpoint does not label max pain or the OI walls as targets, support or resistance. Quant Data has not published a hit rate for those levels.

Frequently asked

What does the Max Pain API return?

It returns one record for every listed expiration inside 45 days: the max pain strike, its distance from spot, total call and put open interest, put/call ratio, and the strikes carrying the most call and put open interest. Add distribution=true to receive open interest by strike for each expiration.

How fresh is the open interest?

Open interest settles overnight. The response therefore describes the prior settlement, not live intraday positioning. Always read and store as_of; spot_date can be one trading day newer than the open-interest date.

Is max pain a price target or support and resistance?

No. Max pain is an arithmetic result about an option chain. Quant Data has not published evidence that price moves toward it or respects the highest-open-interest strikes, so the API makes no forecast and returns no trading instruction.

What is the difference between the free Max Pain pages and this API?

The free pages are nightly HTML snapshots for a curated set of tickers and need no key. The commercial API returns JSON on demand for any US-listed stock or ETF whose option chain meets the liquidity thresholds, which makes it suitable for watchlists, scheduled jobs and AI agents. A free API key lets you test the same commercial endpoint before upgrading.

Can I call SPX, NDX, RUT or VIX?

No. Cash-settled index roots return 400 because the price source used by the calculation does not carry those index levels. Use the tracking ETF instead: SPY for SPX, QQQ for NDX and IWM for RUT.

Can an AI agent use the Max Pain API?

Yes. It is one HTTP GET with an X-API-Key header and structured error responses. A cold symbol can return 202 with retry_after_seconds; an agent can wait, retry the same request, then cite as_of and the relevant expiration alongside any result.

Try the Max Pain API with your own ticker

One email gets a free qd_ key with 10 successful calls per UTC day across Max Pain, Gamma, Brooks Events and Weis / Wyckoff. No account or card. Upgrade only when you need sustained, batch or unattended access.

Get free API key Buy full API access

Paid access starts with 3 days free after a card is added. The Max Pain and GEX pages stay free and need no key at all.

Read the full API reference →

Questions first? quantdata@quantdata.uk — a person reads it.

Educational analytics, not investment advice. The endpoint describes options positioning and makes no forecast, recommendation, target or claim about future price.