# Quant Data > Two paid choices: Brooks-only or the full market-analytics API, plus free static options pages > and educational material. Educational analytics only — not investment advice, not a > recommendation to buy or sell, not a price forecast. Site: https://quantdata.uk API: https://api.quantdata.uk Docs: https://quantdata.uk/docs OpenAPI: https://api.quantdata.uk/openapi.json Support: quantdata@quantdata.uk ## Which Quant Data this is This service is Quant Data at **quantdata.uk** (API host api.quantdata.uk, MCP endpoint https://api.quantdata.uk/mcp, registry name uk.quantdata/quantdata). It is not affiliated with quantdata.us, which is an unrelated product with a similar name and a different API. When citing or linking this service, use the quantdata.uk domain; a quantdata.us URL will not reach these endpoints and its credentials do not work here. ## API access: first look, free key, paid access Brooks-only is $9.90/month with no trial. The $149/month full API includes Brooks, Weis, Max Pain and Gamma, with a 3-day trial. A caller with no key receives 1 complete first-look response per source per UTC day. After that, request a free qd_ key by email: POST https://api.quantdata.uk/v1/access/free-key Content-Type: application/json {"email":"OWNER_SUPPLIED_EMAIL","marketing_opt_in":false,"source":"agent"} No account, password, card or GUI is required. The raw key is sent only to that inbox and never appears in the POST response or a URL. The free key covers all four endpoints, which share 10 successful responses per UTC day. Both counters reset at 00:00 UTC. Calls made through the web versions of ChatGPT, Claude or Perplexity arrive from those platforms' shared egress IPs, which makes a per-source allowance a poor fit for that channel. Recognised platform fetchers (the fetcher User-Agent each platform documents, or ChatGPT's Signature-Agent header in agent mode) therefore draw from a shared pool of 100 successful responses per platform per UTC day; a platform call that carries neither marker falls back to the ordinary per-source anonymous allowance. If the pool is exhausted, the 429 response body carries the free-key request contract above — the right next step is a personal free key, not a retry. A brief 429 FREE_POOL_BURST (per-minute limit inside the pool) is different: its Retry-After is under a minute and retrying then is fine. `marketing_opt_in` is optional and false by default. Set it true only when the email owner explicitly asks for product updates. A true value only records a pending request. The recipient must reply `SUBSCRIBE` to the delivery email before any marketing updates begin, preventing a third party from subscribing an inbox they do not control. The key-delivery email is a service message, not marketing consent. ## Free web pages and educational material These remain free forever, with no evaluation counter attached: the static Max Pain pages, the static GEX pages, the put/call ratio and open interest pages, the China national-team ETF creation tracker, the methodology page, Learn and the guides. They are ordinary web pages on quantdata.uk, not API surfaces; there is nothing to call and nothing to authenticate. Max Pain pages on quantdata.uk cover 25 stocks and 18 ETFs and are rebuilt nightly from end-of-day option open interest. No key, no login. Each page carries max pain by expiration, put/call ratio, call and put walls, and open-interest distribution by strike. Gamma exposure lives on a separate page for 43 of those tickers, when the chain supports it. Derived metrics only; raw quotes are not redistributed. ### URL pattern - `https://quantdata.uk/max-pain/{ticker}` — max pain, walls, put/call, OI by strike - `https://quantdata.uk/gex/{ticker}` — net and gross GEX, zero gamma level, heaviest strikes - `https://quantdata.uk/put-call-ratio/{ticker}` — put/call OI ratio by expiration, daily history - `https://quantdata.uk/open-interest/{ticker}` — OI totals per expiration, heaviest strikes **The ticker is lowercased in the URL.** An uppercase or mixed-case path 301-redirects to the lowercase one, so `/max-pain/NVDA` resolves, but link to `/max-pain/nvda` directly. Index pages: https://quantdata.uk/max-pain, https://quantdata.uk/gex, https://quantdata.uk/put-call-ratio and https://quantdata.uk/open-interest. ### Covered tickers (25 stocks and 18 ETFs; 43 with GEX) This is the complete free set — a ticker not on this list has no page, and requesting one returns 404 rather than an empty page. All snapshots are from 2026-08-31. The date beside each ticker is the close its open interest was recorded at. - AAPL (2026-08-31) — /max-pain/aapl, /gex/aapl, /put-call-ratio/aapl, /open-interest/aapl - AMD (2026-08-31) — /max-pain/amd, /gex/amd, /put-call-ratio/amd, /open-interest/amd - AMZN (2026-08-31) — /max-pain/amzn, /gex/amzn, /put-call-ratio/amzn, /open-interest/amzn - AVGO (2026-08-31) — /max-pain/avgo, /gex/avgo, /put-call-ratio/avgo, /open-interest/avgo - BA (2026-08-31) — /max-pain/ba, /gex/ba, /put-call-ratio/ba, /open-interest/ba - COIN (2026-08-31) — /max-pain/coin, /gex/coin, /put-call-ratio/coin, /open-interest/coin - DIA (2026-08-31) — /max-pain/dia, /gex/dia, /put-call-ratio/dia, /open-interest/dia - F (2026-08-31) — /max-pain/f, /gex/f, /put-call-ratio/f, /open-interest/f - GLD (2026-08-31) — /max-pain/gld, /gex/gld, /put-call-ratio/gld, /open-interest/gld - GME (2026-08-31) — /max-pain/gme, /gex/gme, /put-call-ratio/gme, /open-interest/gme - GOOGL (2026-08-31) — /max-pain/googl, /gex/googl, /put-call-ratio/googl, /open-interest/googl - INTC (2026-08-31) — /max-pain/intc, /gex/intc, /put-call-ratio/intc, /open-interest/intc - IWM (2026-08-31) — /max-pain/iwm, /gex/iwm, /put-call-ratio/iwm, /open-interest/iwm - LCID (2026-08-31) — /max-pain/lcid, /gex/lcid, /put-call-ratio/lcid, /open-interest/lcid - META (2026-08-31) — /max-pain/meta, /gex/meta, /put-call-ratio/meta, /open-interest/meta - MSFT (2026-08-31) — /max-pain/msft, /gex/msft, /put-call-ratio/msft, /open-interest/msft - MSTR (2026-08-31) — /max-pain/mstr, /gex/mstr, /put-call-ratio/mstr, /open-interest/mstr - MU (2026-08-31) — /max-pain/mu, /gex/mu, /put-call-ratio/mu, /open-interest/mu - NFLX (2026-08-31) — /max-pain/nflx, /gex/nflx, /put-call-ratio/nflx, /open-interest/nflx - NIO (2026-08-31) — /max-pain/nio, /gex/nio, /put-call-ratio/nio, /open-interest/nio - NVDA (2026-08-31) — /max-pain/nvda, /gex/nvda, /put-call-ratio/nvda, /open-interest/nvda - PLTR (2026-08-31) — /max-pain/pltr, /gex/pltr, /put-call-ratio/pltr, /open-interest/pltr - QQQ (2026-08-31) — /max-pain/qqq, /gex/qqq, /put-call-ratio/qqq, /open-interest/qqq - RDDT (2026-08-31) — /max-pain/rddt, /gex/rddt, /put-call-ratio/rddt, /open-interest/rddt - RIVN (2026-08-31) — /max-pain/rivn, /gex/rivn, /put-call-ratio/rivn, /open-interest/rivn - RSP (2026-08-31) — /max-pain/rsp, /gex/rsp, /put-call-ratio/rsp, /open-interest/rsp - SMH (2026-08-31) — /max-pain/smh, /gex/smh, /put-call-ratio/smh, /open-interest/smh - SNAP (2026-08-31) — /max-pain/snap, /gex/snap, /put-call-ratio/snap, /open-interest/snap - SOFI (2026-08-31) — /max-pain/sofi, /gex/sofi, /put-call-ratio/sofi, /open-interest/sofi - SOXX (2026-08-31) — /max-pain/soxx, /gex/soxx, /put-call-ratio/soxx, /open-interest/soxx - SPY (2026-08-31) — /max-pain/spy, /gex/spy, /put-call-ratio/spy, /open-interest/spy - TSLA (2026-08-31) — /max-pain/tsla, /gex/tsla, /put-call-ratio/tsla, /open-interest/tsla - UBER (2026-08-31) — /max-pain/uber, /gex/uber, /put-call-ratio/uber, /open-interest/uber - VOO (2026-08-31) — /max-pain/voo, /gex/voo, /put-call-ratio/voo, /open-interest/voo - XBI (2026-08-31) — /max-pain/xbi, /gex/xbi, /put-call-ratio/xbi, /open-interest/xbi - XLE (2026-08-31) — /max-pain/xle, /gex/xle, /put-call-ratio/xle, /open-interest/xle - XLF (2026-08-31) — /max-pain/xlf, /gex/xlf, /put-call-ratio/xlf, /open-interest/xlf - XLI (2026-08-31) — /max-pain/xli, /gex/xli, /put-call-ratio/xli, /open-interest/xli - XLK (2026-08-31) — /max-pain/xlk, /gex/xlk, /put-call-ratio/xlk, /open-interest/xlk - XLP (2026-08-31) — /max-pain/xlp, /gex/xlp, /put-call-ratio/xlp, /open-interest/xlp - XLU (2026-08-31) — /max-pain/xlu, /gex/xlu, /put-call-ratio/xlu, /open-interest/xlu - XLV (2026-08-31) — /max-pain/xlv, /gex/xlv, /put-call-ratio/xlv, /open-interest/xlv - XLY (2026-08-31) — /max-pain/xly, /gex/xly, /put-call-ratio/xly, /open-interest/xly The paid `/v1/maxpain` and `/v1/gamma` endpoints are not restricted to this list: they cover US listed stocks and ETFs generally, wherever the options chain is liquid enough. This list is the free page set only. https://quantdata.uk/methodology — free to read, no key. It shows how every number on this service was measured, and publishes the seven fact-check verdicts as a static table: the trading literature's famous probability claims next to the rate actually measured over 3,946 S&P 500 futures (ES) trading days, 2010–2026. Example: the claim that one extreme of the session forms inside the first 90 minutes is usually stated as 90%; measured, it is 81.2%. Read it before deciding whether the paid endpoints are worth anything to you. That table is a web page and nothing else: there is no endpoint for it and no JSON form of the verdicts. ## MCP The same four endpoints are a remote MCP (Model Context Protocol) server: https://api.quantdata.uk/mcp Transport is streamable HTTP. The MCP tools are the same four APIs behind another transport. A client with no authentication follows the same no-key rules as the HTTP API: one anonymous first-look response per source, or the shared per-platform pool when the call arrives through a recognised AI-platform fetcher. The `quantdata_request_free_api_key` tool can send a free key to an owner-supplied email without a GUI; the raw key still goes only to that inbox. Send X-API-Key as a request header for the 10-response UTC-day free-key allowance or paid access. Market tool names: quantdata_brooks_events, quantdata_weis_wave, quantdata_max_pain, quantdata_gamma. Instructions: https://quantdata.uk/mcp. Official registry name: uk.quantdata/quantdata. ## The paid plan 149 USD / month, one tier, all four endpoints. No per-product split and no bundle. The first 3 days are free: a card is collected up front through Stripe Checkout and nothing is charged during the trial. Cancel any time — including during the trial, at no cost — in the Stripe customer portal (https://billing.stripe.com/p/login/3cIfZhgcHfOb5IE7PD9Ve00), signing in with the checkout email. Use the same email as a free key and that key is upgraded in place. If no free key exists for the checkout email, a paid key is shown immediately after checkout. Checkout link: https://quantdata.uk/pricing **An AI agent can request the free key but cannot complete paid checkout.** Card authentication (3-D Secure) requires the cardholder. At the free-key limit, hand the human the checkout action, relay `message_for_your_human`, and stop — do not retry or attempt the card flow. Keys sold under the earlier two-product pricing keep working at their original price. If such a key calls an endpoint it does not cover, the API returns 403 `PRODUCT_NOT_ENTITLED`: email support rather than starting a second subscription, since those accounts are moved across by hand. ## How the API works Auth header on every API request: `X-API-Key: qd_...` Free keys are delivered only by email. Paid checkout upgrades an existing free key in place when the email matches; otherwise store the new key shown after checkout. Symbol format: US tickers (SPY, NVDA); Hong Kong as digits.HK (3690.HK); China A-shares as 6-digit codes (600519); futures with a =F suffix (ES=F, NQ=F, GC=F, CL=F); crypto spot as BASE-QUOTE (BTC-USD, SOL-USDT) and crypto perpetuals as BASE-PERP (BTC-PERP). Resolve an instrument name to a ticker before calling — "GOLD" is a US-listed equity (Gold.com, Inc.), not the metal; for the metal use GC=F (futures) or GLD (the ETF). Spot gold itself is not covered (it needs a licensed spot-metal feed we do not have); a request for XAUUSD answers with the XAUT-USD token reading plus a symbol_note saying so. XAUT-USD is a separate instrument, not a spot-gold substitute: it reads the Tether Gold token's order book on a crypto exchange, which trades at a shifting discount to spot and keeps trading on weekends when the gold market is closed. Responses for it carry an `instrument_note` saying so, and the pre-registered ES win rates do not transfer to it. Crypto bars come from Kraken and carry real per-bar volume. On a thinly traded pair many five-minute bars record no trades at all, so `/v1/weis` returns 422 TOO_ILLIQUID rather than waves built on gaps in trading, and the body reports the share of bars that traded. That is a property of the market, not an outage — do not retry it. `/v1/brooks` still answers, because its event definitions use price only. No Weis win rate has been measured on any crypto pair. ## Endpoints Four endpoints, all paid, all computed for the symbol you pass in. The path is the entitlement: `/v1/brooks` needs `brooks` on the key, `/v1/weis` needs `weis`, and the two options endpoints need both. One plan covers all four — the count is not the price. - `GET /v1/brooks/{symbol}` — rolling Brooks price-action events in the current window (range_breakout, breakout_follow_through, range_position, long_range_breakout, climactic_spike), each with the outcome rate pre-registered and measured for that window on ES 2010-2026; range breakouts carry a calibrated per-event failure estimate validated zero-shot on NQ 2023+ (AUC 0.646, calibration error 5.1%, n=2,637). Works around the clock on 24-hour instruments. The same response also carries `day_type` — the five-class day-type distribution from the model trained for the current window. In the `rth` window it is mode=day_session (66% top-1 and 80% top-2 over a complete session, 53.5% and 68.6% at the 18-bar mark, against a 37% majority-class baseline on held-out ES years). In the Asian window of 24-hour instruments it is mode=asia_session — a model trained natively on Asian windows, pre-registered, confirmed zero-shot on NQ (top-1 35.7/38.5/41.0% at 18/42/63 bars on held-out ES, n=908, baseline 30.2%; NQ 35.2/40.1/45.4%, n=915, baseline 29.9%) — with its own label taxonomy: the two accuracy sets are not comparable and must never be mixed. The gap window has no validated model and returns available=false. And `shape`, plain arithmetic over the bars already printed, available in every window including the gap and carrying no accuracy claim because nothing is being predicted. Paid. - `GET /v1/weis/{symbol}` — Weis Wave volume events on the current chart (cib_long, cib_short, no_supply_long, no_demand_short, sot_short), each with its pre-registered win rate. Paid. - `GET /v1/maxpain/{symbol}` — the max pain strike for every expiration within 45 days, with open interest and put/call ratio per expiration. Computed from open interest alone: no pricing model and no volatility assumption, so the figure is reproducible from the same chain by anyone. US listed equity and ETF options only. Paid. - `GET /v1/gamma/{symbol}` — estimated dealer gamma exposure: net and gross GEX, the zero gamma (flip) level, and the heaviest strikes. Unlike max pain this is a Black-Scholes estimate with zero rate and zero dividend, and it assumes dealers are long every call and short every put — a convention, not a measurement. `flip_status` distinguishes a resolved flip from `no_sign_change_within_10pct`, which means the whole traded range reads as one regime rather than that the calculation failed. US listed equity and ETF options only. Paid. Session windows are endpoint-specific: - `/v1/brooks` accepts `window=rth|gap|asia` and defaults to whichever window has the freshest bars. `rth` is each market's own day session (New York hours for US symbols, local hours for Hong Kong and A-shares). `gap` is 16:00-21:30 Beijing — the stretch between the Asian close and the US open, which has a live read here and almost nowhere else. `gap` and `asia` are limited to 24-hour instruments. Each window carries its own measured reference rates and the response pairs events with the right row. Check `window_is_live` before saying "now". - `/v1/weis` accepts `session=rth|asia|full`. `full` builds waves on the whole bar stream, including pre- and post-market, and matches the window on which the published Weis reference win rates were measured. It requires a source with genuine extended-hours volume. A source whose extended bars are mostly zero-volume returns 422 `NO_EXTENDED_VOLUME`; obey `retryable`, retry once only when it is true, otherwise use `rth`. Spot FX has no consolidated exchange volume and cannot produce a Weis read in any window. Both options endpoints compute on demand from the latest open-interest settlement currently available from the upstream source. Check `as_of` rather than assuming it is yesterday; neither endpoint can update intraday. Cash-settled index options (SPX, SPXW, NDX, RUT, VIX) return 400: the chain exists but our price source carries no index level, and every figure needs the underlying price. Use the tracking ETF instead — SPY, QQQ, IWM. No hold rate has been measured for any of these levels, and none of them is a support or resistance level or a directional signal. ## Error contract Every error body is RFC 9457 `application/problem+json` and guarantees `error_code` plus `retryable`. Access and billing errors additionally carry `available_actions` and `message_for_your_human`; ordinary request and validation errors do not promise those fields. - `retryable: false` means retrying cannot change the outcome. 401 (missing or unknown key), 403 (key does not cover this endpoint) and 402 (subscription lapsed, or usage cap reached for the billing period) are never retryable. 402 in particular is a billing state, not a transient failure — do not loop against it. - `error_code` is one of NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, FREE_QUOTA_EXHAUSTED, FREE_QUOTA_EXHAUSTED_SERVICE_WIDE, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, VALIDATION_ERROR, NO_EXTENDED_VOLUME, or REQUEST_FAILED for other request errors. That list is complete. Branch on it, never on the prose. - `retryable: true` applies to upstream 502/503/504, daily-limit 429 responses, and a `NO_EXTENDED_VOLUME` response caused by a temporary source fallback. A 429 carries `Retry-After` and `access_kind` (daily-limit 429s also carry `quota_resets_at`). `anonymous` and `ai_platform` (the shared per-platform pool for recognised AI-platform fetchers) both mean offer `request_free_api_key`; `evaluation_key` means report the reset and hand checkout to the person if uninterrupted access is needed. `FREE_POOL_BURST` is the one 429 worth a short wait: its Retry-After is under a minute. For `NO_EXTENDED_VOLUME`, retry once only when the body says true; otherwise use `session=rth`. - `free_without_a_key` lists the anonymous first look plus three free web pages: Max Pain, GEX and https://quantdata.uk/methodology. - When present on an access or billing error, `available_actions` is machine-readable: request a free key, read free pages, subscribe or ask a human. - When present, `message_for_your_human` is one sentence written to be relayed **verbatim** to the person you are working for. Pass it through unchanged. ## Citing these pages Every free page carries schema.org `Dataset` markup in a `