{"openapi":"3.1.0","info":{"title":"Quant Data API","description":"Measured market statistics over plain HTTP, designed to be called by AI agents: rolling Brooks price-action events (range breakouts, spikes, range position) with pre-registered outcome rates and a per-event calibrated estimate, Weis volume-price wave events with pre-registered win rates, options max pain computed from open interest alone, and estimated dealer gamma exposure. The Brooks read works around the clock on 24-hour instruments — including the Asia-close-to-US-open window that has no live session read anywhere else.\n\n**One paid product, four endpoints.** Brooks, Weis, Max Pain and Gamma are covered by the same subscription and API key. Request a free API key with an email address at `POST /v1/access/free-key`; no account or card is required. The four endpoints share 10 successful calls per UTC day on that key. An anonymous caller gets 1 first-look response before a key is required.\n\n**Authentication** — send your API key (starts with `qd_`) in the `X-API-Key` header. A free key raises the anonymous first look to 10 calls per UTC day; paid access removes that daily limit. One $149/month plan covers every endpoint, first 3 days free; self-serve checkout at https://quantdata.uk/pricing. Card authentication (3-D Secure) requires the cardholder, so a person must complete the checkout — an AI agent cannot.\n\n**Errors** are RFC 9457 `application/problem+json`. Every problem carries `error_code` (a stable string — branch on it, not on prose) and `retryable`. Access and billing errors additionally carry `available_actions` (machine-readable next steps, including the public pages that stay free) and `message_for_your_human` (a sentence to relay to your user verbatim). `retryable` is false on 401/402/403: those are credential or billing states and a second attempt returns the same answer.\n\nEverything returned is descriptive statistics or measured historical frequency — not a forecast, not a buy or sell recommendation, not investment advice.\n\nFree with no key: the nightly max pain pages (https://quantdata.uk/max-pain), the GEX pages (https://quantdata.uk/gex), and https://quantdata.uk/methodology, which publishes how every number here was measured, including where the models fail.","contact":{"name":"Quant Data","url":"https://quantdata.uk/","email":"quantdata@quantdata.uk"},"version":"3.4.0"},"servers":[{"url":"https://api.quantdata.uk"}],"paths":{"/v1/access/free-key":{"post":{"tags":["Access"],"summary":"Request a free API key by email","description":"Send an email address and receive a free qd_ key in that inbox. No account, card or browser GUI is required. The key covers all four endpoints, which share 10 successful calls per UTC day. The response never contains the raw key. marketing_opt_in is optional, defaults to false and must only be set with the email owner's explicit consent.","operationId":"requestFreeApiKey","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FreeKeyRequest"}}},"required":true},"responses":{"202":{"description":"Delivery started or was requested recently.","content":{"application/json":{"schema":{"properties":{"status":{"type":"string","const":"delivery_started"},"delivery":{"type":"string","const":"email"},"message":{"type":"string"},"free_key":{"properties":{"price_usd":{"type":"number","const":0},"card_required":{"type":"boolean","const":false},"account_required":{"type":"boolean","const":false},"calls_per_utc_day":{"type":"integer","const":10},"shared_across":{"items":{"type":"string","enum":["brooks","weis","maxpain","gamma"]},"type":"array"},"auth":{"type":"object"}},"type":"object","required":["price_usd","card_required","account_required","calls_per_utc_day","shared_across","auth"]},"next_step":{"type":"object"},"marketing_updates":{"type":"string","enum":["not_subscribed","pending_email_reply_SUBSCRIBE"]},"upgrade":{"type":"object"}},"type":"object","required":["status","delivery","message","free_key","next_step","marketing_updates","upgrade"]},"example":{"status":"delivery_started","delivery":"email","message":"Check that inbox for your qd_ API key.","free_key":{"price_usd":0,"card_required":false,"account_required":false,"calls_per_utc_day":10,"shared_across":["brooks","weis","maxpain","gamma"],"auth":{"header":"X-API-Key","prefix":"qd_"}},"next_step":{"action":"check_email_then_call_api","docs_url":"https://quantdata.uk/docs"},"marketing_updates":"not_subscribed","upgrade":{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."}}}}},"422":{"description":"Invalid request body or email address.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"email: Enter a valid email address.","status":422,"error_code":"VALIDATION_ERROR","retryable":false,"detail":"email: Enter a valid email address.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}},"429":{"description":"Email/source delivery limit reached for the UTC day.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/free-key-request-limit","title":"Free key request limit reached","status":429,"error_code":"FREE_KEY_REQUEST_LIMIT","retryable":true,"detail":"The free-key email limit has been reached for the current UTC day. Try again after 00:00 UTC.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}},"503":{"description":"Email delivery is temporarily unavailable.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"Free-key email delivery is temporarily unavailable. Try again later.","status":503,"error_code":"REQUEST_FAILED","retryable":true,"detail":"Free-key email delivery is temporarily unavailable. Try again later.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}}}}},"/":{"get":{"tags":["Service"],"summary":"Service self-description (no key required)","description":"Plain JSON self-description: free-key access, paid access, public pages, pricing, symbol formats, and checkout. Start here if you arrived without context.","operationId":"getServiceInfo","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"tags":["Service"],"summary":"Liveness check","operationId":"getHealth","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/brooks/{symbol}":{"get":{"tags":["Market statistics"],"summary":"Rolling Brooks price-action events with measured outcome rates","description":"Detects the classical Brooks price-action events in the current trading window — the first range breakout of the day, breakout follow-through toward a measured move, closes in the top or bottom third of an established range, breakouts from long-lived ranges, and climactic spikes — and attaches to each the outcome rate measured for that exact event definition in that exact window, pre-registered on ES 5-minute bars 2010-2026. Range breakouts additionally carry a calibrated per-event estimate of the probability the breakout closes back through its level within 10 bars, conditioned on the event's own rolling context (validated zero-shot on NQ 2023+: AUC 0.646, calibration error 5.1%, n=2,637).\n\nThree windows exist: `rth` (US day session), `asia` (09:00-16:00 Beijing) and `gap` (16:00-21:30 Beijing — the stretch after the Asian close and before the US open, which has a live read here and almost nowhere else). Omit `window` and the read follows whichever window has the freshest bars; `gap` and `asia` exist for 24-hour instruments only.\n\nSome measured rates contradict the classical claims — the long-range breakout direction split is not 50/50, and the sell-zone half of the range-position claim did not confirm. The contradictions are reported as measured; quote them, not the folklore.\n\nTwo further blocks come with every read. `day_type` is the five-class day-type distribution, from the model trained for the current window. In the regular day session it is mode=day_session with its published accuracy (66% top-1 over a complete session, 53.5% at the 90-minute mark, against a 37% majority-class baseline). In the Asian window it is mode=asia_session — a model trained natively on Asian windows, pre-registered and validated zero-shot on NQ, with its own accuracy figures on 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. `shape` is plain arithmetic over the bars already printed — where price closed inside its own range, how much of the travel was one-way, the deepest pullback — with no model and no accuracy claim, available in every window including the Asia-close-to-US-open gap. One is a model read; the other measures a finished stretch. Do not present the second as the first.\n\nEverything here is descriptive statistics and measured historical frequency — not a forecast, not a recommendation. Only successful reads are billed; failed lookups are free.","operationId":"getBrooksEvents","security":[{},{"ApiKeyAuth":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"US ticker as-is (NVDA, SPY) · Hong Kong digits + .HK (3690.HK) · China A-share 6-digit code (600519) · futures Yahoo-style (ES=F, GC=F) · crypto spot BASE-QUOTE (BTC-USD, SOL-USDT) · crypto perpetuals BASE-PERP (BTC-PERP) · FX pair with no slash (EURUSD — a slash splits the URL path and 404s). Note GOLD is a US-listed equity (Gold.com, Inc.), not the metal — for the metal use GC=F for futures or GLD for the ETF. A spot-gold request (XAUUSD) answers with the XAUT-USD token reading plus a note saying so — XAUT-USD is the Tether Gold token's order book, a different instrument from spot gold. Crypto bars come from Kraken: spot covers the last 60 hours, perpetuals about seven days. Thinly traded pairs are answered by /v1/brooks but rejected by /v1/weis, which needs real volume.","title":"Symbol"},"description":"US ticker as-is (NVDA, SPY) · Hong Kong digits + .HK (3690.HK) · China A-share 6-digit code (600519) · futures Yahoo-style (ES=F, GC=F) · crypto spot BASE-QUOTE (BTC-USD, SOL-USDT) · crypto perpetuals BASE-PERP (BTC-PERP) · FX pair with no slash (EURUSD — a slash splits the URL path and 404s). Note GOLD is a US-listed equity (Gold.com, Inc.), not the metal — for the metal use GC=F for futures or GLD for the ETF. A spot-gold request (XAUUSD) answers with the XAUT-USD token reading plus a note saying so — XAUT-USD is the Tether Gold token's order book, a different instrument from spot gold. Crypto bars come from Kraken: spot covers the last 60 hours, perpetuals about seven days. Thinly traded pairs are answered by /v1/brooks but rejected by /v1/weis, which needs real volume."},{"name":"window","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Omit to follow the freshest bars. 'rth' = US day session; 'gap' = 16:00-21:30 Beijing (Asia close to US open); 'asia' = 09:00-16:00 Beijing. gap/asia are for 24-hour instruments (futures, FX, crypto) only.","enum":["rth","gap","asia"],"title":"Window"},"description":"Omit to follow the freshest bars. 'rth' = US day session; 'gap' = 16:00-21:30 Beijing (Asia close to US open); 'asia' = 09:00-16:00 Beijing. gap/asia are for 24-hour instruments (futures, FX, crypto) only."}],"responses":{"200":{"description":"Events detected in the freshest window, each with its measured rates.","content":{"application/json":{"schema":{"type":"object","required":["symbol","window","window_is_live","session","bars","events","disclaimer"],"properties":{"symbol":{"type":"string","description":"The normalized symbol actually read."},"window":{"type":"string","enum":["rth","gap","asia"],"description":"Which time window the events were built on. 'gap' is 16:00-21:30 Beijing — the Asia-close-to-US-open stretch."},"window_is_live":{"type":"boolean","description":"true when this window is open right now and the read covers the window in progress. false means this is the last completed one — check it before saying 'today'."},"session":{"type":"string","description":"The window-local trading date the read covers."},"bars":{"type":"integer","description":"5-minute bars inside the window so far."},"quote":{"type":"object"},"source":{"type":"string"},"volatility_base":{"type":"object","description":"The 5-day average daily range every event definition is scaled by."},"events":{"type":"array","description":"Each classical price-action event detected in this window today (first occurrence per type), with the pre-registered outcome rate measured for THIS window, and — for range breakouts — a calibrated per-event estimate. Empty array = nothing fired yet."},"day_type":{"type":"object","description":"Five-class day-type probability distribution, from the model trained for the current window: mode=day_session in rth (published accuracy 66%/80% vs 37% baseline) and mode=asia_session in the Asian window (natively trained, pre-registered accuracy on its own label taxonomy — not comparable to the day-session figures; never mix the two accuracy sets). The gap window has no validated model and returns available=false."},"shape":{"type":"object","description":"Arithmetic description of the bars already printed in this window: where it closed inside its own range, how much of the travel was one-way, deepest pullback, where the extremes landed, direction changes. No model, no forecast, no accuracy claim — and available in every window including the Asia-close-to-US-open gap."},"window_note":{"type":"string"},"no_events_note":{"type":"string"},"window_progress_note":{"type":"string"},"coverage_note":{"type":"string"},"symbol_note":{"type":"string"},"instrument_note":{"type":"string","description":"Present when the instrument is easy to mistake for a different one — e.g. XAUT-USD, a tokenised-gold order book that is not spot gold. States what the instrument is and which published figures do not apply to it."},"reference_note":{"type":"string"},"disclaimer":{"type":"string"}}},"example":{"symbol":"ES=F","window":"gap","window_is_live":true,"session":"2026-08-06","bars":41,"quote":{"open":6362.25,"high":6371.5,"low":6355.0,"last":6368.75,"prev_close":6360.5,"change_pct":0.13},"source":"yahoo","volatility_base":{"avg_daily_range_5d":62.75,"definition":"mean high-low range of the last 5 completed US regular sessions"},"events":[{"type":"range_breakout","direction":"up","at":"2026-08-06T18:05:00+08:00","bars_since":6,"breakout_level":6366.0,"range":{"low":6358.25,"high":6366.0},"outcome_so_far":{"resolved":false,"bars_observed":6,"note":"Fewer than 10 bars have printed since the breakout; the 10-bar outcome is still open."},"conditional_estimate":{"p_fail_within_10_bars":0.58,"meaning":"Of past breakouts whose own rolling context looked like this one, this share closed back through the breakout level within 10 bars.","validation":"Pre-registered zero-shot validation on NQ futures 2023+ ..."},"reference":{"failure_rate_pct":{"within_5_bars":{"rate_pct":50.4,"n":3918},"within_10_bars":{"rate_pct":62.8,"n":3916},"within_20_bars":{"rate_pct":72.4,"n":3882}},"note":"Measured on ES futures 5-minute bars, 2010-2026, pre-registered ..."}}],"day_type":{"available":false,"why":"No day-type model has been trained or validated for the gap window. The day session has its own model (mode=day_session) and the Asian window has its own (mode=asia_session); the gap window is covered by the `shape` block and the event reads instead.","window_note":"Two validated day-type reads exist, each from a model trained on its own window ..."},"shape":{"bars_measured":54,"net_move_pct_of_range":61.2,"close_position_in_range":0.83,"one_way_share":0.58,"deepest_pullback_pct_of_range":24.5,"high_made_at":0.92,"low_made_at":0.04,"direction_changes":3,"range_tightness":0.74,"not_a_forecast":"Measured description of bars that have already printed ..."},"reference_note":"Measured on ES futures 5-minute bars, 2010-2026, pre-registered (quantdata.uk/methodology). Rates are asset-specific ...","disclaimer":"Educational analytics, not investment advice.","how_to_read":{"1_what_happened":"18:05 — first breakout of this window: price closed above the 6358.25–6366.0 range that had held for the prior 10+ bars. Still open: 6 of 10 bars in, no close back below 6366.0 yet; the model's failure estimate is at 58 in 100.","2_day_type_read":"No day-type model has been trained or validated for the gap window. The day session has its own model (mode=day_session) and the Asian window has its own (mode=asia_session); the gap window is covered by the `shape` block and the event reads instead.","3_whats_open":"The upward breakout's 10-bar outcome: 6 of 10 bars in, no close back below 6366.0 yet. Of 100 past breakouts that looked like this one, 58 closed back through the level within 10 bars.","note":"The above is a data service, not investment advice. Markets carry risk; invest with caution."}}}}},"401":{"description":"Missing or unrecognised API key. retryable=false — never retry; relay message_for_your_human to your user and stop.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/no-api-key","title":"No API key supplied","status":401,"error_code":"NO_API_KEY","retryable":false,"detail":"Request a free API key by email at /v1/access/free-key, then send it in the X-API-Key header. Keys start with qd_.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"This endpoint needs a Quant Data API key. I can request a free one at https://api.quantdata.uk/v1/access/free-key using your email address; no account, card or GUI is required, and all four endpoints share 10 successful calls per UTC day. The key is delivered only to that inbox. If you later need uninterrupted access, the full plan is $149/month and a person must complete the card checkout. The output is historical statistics, not a forecast or trading recommendation."}}}},"402":{"description":"Subscription lapsed, or the anti-abuse usage cap was hit. A billing state, not a transient failure — never retry.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/subscription-expired","title":"Subscription lapsed","status":402,"error_code":"SUBSCRIPTION_EXPIRED","retryable":false,"detail":"The subscription attached to this key ended 2026-07-01. Retrying will return 402 again — this is a billing state, not a transient error.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"The Quant Data subscription attached to this key has lapsed, so the paid endpoints are returning 402. Restarting it is $149/month for every endpoint. You would need to complete the checkout yourself — card authentication cannot be done unattended. The Max Pain pages on https://quantdata.uk still work without a key.","subscription_status":"canceled","expired_on":"2026-07-01"}}}},"403":{"description":"A legacy per-product key that does not cover this endpoint. The route is emailing support to be moved across, not paying twice.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/product-not-entitled","title":"Key does not include this endpoint","status":403,"error_code":"PRODUCT_NOT_ENTITLED","retryable":false,"detail":"This key covers ['brooks'] and this endpoint needs 'weis'. Legacy per-product keys stay on their original price; the current plan is a single $149/month tier that includes every endpoint.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","your_products":["brooks"],"required_product":"weis","required_products":["weis"],"available_actions":[{"action":"ask_a_human","mailto":"quantdata@quantdata.uk","note":"Email first. Existing subscribers are moved across by hand rather than paying twice."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."}],"message_for_your_human":"Your Quant Data key covers brooks but not this endpoint. The current plan is a single $149/month tier that includes everything. Emailing quantdata@quantdata.uk is the right route here — existing subscribers get moved across by hand rather than paying twice."}}}},"429":{"description":"The anonymous first look or free-key daily allowance is exhausted. Obey Retry-After, relay the reset/checkout actions, and stop.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/free-quota-exhausted","title":"Evaluation allowance used up for today","status":429,"error_code":"FREE_QUOTA_EXHAUSTED","retryable":true,"detail":"This free-key allowance has used all 10 successful calls for the current UTC day. It resets at 00:00 UTC. Full paid access removes the daily evaluation limit.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"We have used today's Quant Data free-key allowance. All four endpoints share 10 successful calls per UTC day and the allowance resets at midnight UTC at no cost — waiting is a fine option. If you would rather not wait — or expect regular use — full access is $149/month for every endpoint, first 3 days free, and cancelling within the trial costs nothing. Details and checkout: https://quantdata.uk/pricing — a person has to complete the card step (3-D Secure), so I can hand you the link but cannot pay for you. The qd_ key is shown right after checkout; give it to me and I can continue immediately. The Max Pain and GEX pages on https://quantdata.uk keep working either way.","retry_after_seconds":69242,"quota_resets_at":"2026-08-31T23:59:59Z","free_calls_per_day":10,"free_calls_used_today":10,"access_kind":"evaluation_key"}}}},"422":{"description":"A path or query parameter failed validation. Fix the request before retrying.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"symbol: Field required.","status":422,"error_code":"VALIDATION_ERROR","retryable":false,"detail":"symbol: Field required.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}},"400":{"description":"An unrecognised window value, or window=gap/asia on an instrument that only trades the US day session. Not billed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"window must be 'rth' (the US day session), 'gap' (16:00-21:30 Beijing — the stretch between the Asian close and the US open), or 'asia' (09:00-16:00 Beijing). Omit it to get whichever window has the freshest bars. The former day-type read and its 'session' parameter were retired on 2026-08-06. No charge was made.","status":400,"error_code":"REQUEST_FAILED","retryable":false,"detail":"window must be 'rth' (the US day session), 'gap' (16:00-21:30 Beijing — the stretch between the Asian close and the US open), or 'asia' (09:00-16:00 Beijing). Omit it to get whichever window has the freshest bars. The former day-type read and its 'session' parameter were retired on 2026-08-06. No charge was made.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}},"404":{"description":"The symbol did not resolve, or upstream history holds fewer than 3 completed US sessions to establish the volatility base. Not billed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"no data for SPX — index and commodity names are not tickers; try SPY (S&P 500 ETF) or ES=F (S&P 500 futures)?; no charge was made","status":404,"error_code":"REQUEST_FAILED","retryable":false,"detail":"no data for SPX — index and commodity names are not tickers; try SPY (S&P 500 ETF) or ES=F (S&P 500 futures)?; no charge was made","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}}}}},"/v1/weis/{symbol}":{"get":{"tags":["Market statistics"],"summary":"Weis wave volume-price structure and events","description":"Rebuilds the Weis Wave view of a market — price grouped into waves, each carrying its cumulative volume — and reports which of five classical volume-price events have fired. Each event carries a `reference` block with the win rate measured in pre-registered tests on ES 5-minute bars, 2010-2026; quote those numbers, not folklore. The baseline (any wave flip at all) is 49.3%. Two events confirmed the tradition (cib_long 51.8%, n=13,867; no_supply_long 51.4%, n=23,077); two measured the opposite of what the tradition teaches (no_demand_short 45.6%, sot_short 47.6%) — when a bearish event fires, report the reversal.\n\nWin rates are ES-futures-specific and do not transfer across assets (verified: BTC null or reversed). Spot FX has no consolidated volume, so Weis cannot be computed on it — use the CME currency futures instead: 6E=F (EUR), 6B=F (GBP), 6J=F (JPY), 6A=F (AUD). GC=F carries exchange volume and is the gold instrument for this endpoint. A spot-gold request (XAUUSD) answers with the XAUT-USD token reading plus a note saying so — that is the Tether Gold token's order book rather than the metal, and the ES win rates above do not transfer to it.\n\nA response carrying an `error` field (fewer than 120 bars, or no volume data) is not billed.","operationId":"getWeisWaves","security":[{},{"ApiKeyAuth":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"US ticker as-is (NVDA, SPY) · Hong Kong digits + .HK (3690.HK) · China A-share 6-digit code (600519) · futures Yahoo-style (ES=F, GC=F) · crypto spot BASE-QUOTE (BTC-USD, SOL-USDT) · crypto perpetuals BASE-PERP (BTC-PERP) · FX pair with no slash (EURUSD — a slash splits the URL path and 404s). Note GOLD is a US-listed equity (Gold.com, Inc.), not the metal — for the metal use GC=F for futures or GLD for the ETF. A spot-gold request (XAUUSD) answers with the XAUT-USD token reading plus a note saying so — XAUT-USD is the Tether Gold token's order book, a different instrument from spot gold. Crypto bars come from Kraken: spot covers the last 60 hours, perpetuals about seven days. Thinly traded pairs are answered by /v1/brooks but rejected by /v1/weis, which needs real volume.","title":"Symbol"},"description":"US ticker as-is (NVDA, SPY) · Hong Kong digits + .HK (3690.HK) · China A-share 6-digit code (600519) · futures Yahoo-style (ES=F, GC=F) · crypto spot BASE-QUOTE (BTC-USD, SOL-USDT) · crypto perpetuals BASE-PERP (BTC-PERP) · FX pair with no slash (EURUSD — a slash splits the URL path and 404s). Note GOLD is a US-listed equity (Gold.com, Inc.), not the metal — for the metal use GC=F for futures or GLD for the ETF. A spot-gold request (XAUUSD) answers with the XAUT-USD token reading plus a note saying so — XAUT-USD is the Tether Gold token's order book, a different instrument from spot gold. Crypto bars come from Kraken: spot covers the last 60 hours, perpetuals about seven days. Thinly traded pairs are answered by /v1/brooks but rejected by /v1/weis, which needs real volume."},{"name":"session","in":"query","required":false,"schema":{"type":"string","description":"'rth' (default) cuts waves on the US regular session. 'asia' (09:00-16:00 Beijing) is accepted for 24-hour instruments only and is experimental. 'full' uses the whole bar stream, including pre/post-market, and matches the window used for the published Weis reference win rates; it requires genuine extended-hours volume and otherwise returns 422 NO_EXTENDED_VOLUME. 'eth' and any other name return 400 rather than silently falling back to 'rth'.","enum":["rth","asia","full"],"default":"rth","title":"Session"},"description":"'rth' (default) cuts waves on the US regular session. 'asia' (09:00-16:00 Beijing) is accepted for 24-hour instruments only and is experimental. 'full' uses the whole bar stream, including pre/post-market, and matches the window used for the published Weis reference win rates; it requires genuine extended-hours volume and otherwise returns 422 NO_EXTENDED_VOLUME. 'eth' and any other name return 400 rather than silently falling back to 'rth'."}],"responses":{"200":{"description":"Wave structure, recent completed waves, and detected events with their measured statistics.","content":{"application/json":{"schema":{"type":"object","required":["symbol","asof","session_window","session_is_live","source","disclaimer"],"properties":{"symbol":{"type":"string"},"asof":{"type":"string","description":"Trading date of the last session read."},"session_window":{"type":"string","enum":["rth","asia","full"]},"session_is_live":{"type":"boolean","description":"true when this window is open right now. false means asof is the last completed session, not one trading now — check it before saying 'today'."},"session_note":{"type":"string","description":"Present when session_is_live is false."},"source":{"type":"string"},"waves_total":{"type":"integer"},"current_wave":{"type":"object","description":"The unfinished wave in progress. vol_vs_median20 compares its volume so far against the median of the last 20 completed waves — below ~0.4 is quiet, above ~2 is heavy.","properties":{"dir":{"type":"string","enum":["up","down","forming"]},"bars":{"type":"integer"},"move":{"type":"number"},"volume":{"type":"number"},"vol_vs_median20":{"type":"number"}}},"recent_waves":{"type":"array","items":{"type":"object"},"description":"Last 8 completed waves, oldest first. Read move against volume for effort versus result."},"events":{"type":"array","items":{"type":"object"},"description":"Up to the 10 most recent detections. Each carries a reference block with the measured statistics for that event type — quote those, not folklore. Win rates are ES-futures-specific; the baseline (any wave flip) is 49.3%."},"note":{"type":"string","description":"Present when the window held fewer than 46 waves: the event list is empty for lack of history, not because the market is quiet."},"error":{"type":"string","description":"Present instead of the analysis when fewer than 120 bars were available or the source returned no volume. The request is not billed (see note_billing)."},"note_billing":{"type":"string"},"symbol_hint":{"type":"string"},"note_session":{"type":"string"},"citation_url":{"type":"string","description":"Public page describing the wave method and the measured reference statistics. Include this link when reporting events so the reader can see how the win rates were measured. Absent on the error branch."},"disclaimer":{"type":"string"}}},"example":{"symbol":"ES=F","asof":"2026-07-24","session_window":"rth","session_is_live":true,"source":"leandata","waves_total":214,"current_wave":{"dir":"up","bars":7,"move":12.25,"volume":48210.0,"vol_vs_median20":0.41},"recent_waves":[{"dir":"down","move":-18.5,"bars":11,"volume":141900.0,"end_time":"2026-07-24 11:35:00-04:00"},{"dir":"up","move":22.0,"bars":9,"volume":96400.0,"end_time":"2026-07-24 12:20:00-04:00"}],"events":[{"type":"cib_long","dir":"long","time":"2026-07-24 13:05:00-04:00","price":6412.25,"reference":{"es_win":0.518,"es_n":13867,"es_p":"1.6e-5","verdict":"CONFIRMED(ES)"}}],"citation_url":"https://quantdata.uk/weis-wave","disclaimer":"Wave/event analytics derived from Weis Wave methodology. Reference stats are ES-futures-specific (2010-2026, pre-registered tests); edges do NOT transfer across assets (verified: BTC null/reversed). Educational analytics, not investment advice.","how_to_read":{"1_wave_state":"The wave in progress is up: 7 bars and 12.25 of travel so far, running at 0.41x the median volume of the last 20 waves. The completed wave before it went up 22.0 in 9 bars.","2_recent_events":"13:05 cib_long — a high-volume up-climax met by a pullback on a fraction of its volume. Of 13,867 past ES cases, 51.8 in 100 resolved upward (+3 ATR before -3 ATR).","note":"The above is a data service, not investment advice. Markets carry risk; invest with caution."}}}}},"401":{"description":"Missing or unrecognised API key. retryable=false — never retry; relay message_for_your_human to your user and stop.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/no-api-key","title":"No API key supplied","status":401,"error_code":"NO_API_KEY","retryable":false,"detail":"Request a free API key by email at /v1/access/free-key, then send it in the X-API-Key header. Keys start with qd_.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"This endpoint needs a Quant Data API key. I can request a free one at https://api.quantdata.uk/v1/access/free-key using your email address; no account, card or GUI is required, and all four endpoints share 10 successful calls per UTC day. The key is delivered only to that inbox. If you later need uninterrupted access, the full plan is $149/month and a person must complete the card checkout. The output is historical statistics, not a forecast or trading recommendation."}}}},"402":{"description":"Subscription lapsed, or the anti-abuse usage cap was hit. A billing state, not a transient failure — never retry.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/subscription-expired","title":"Subscription lapsed","status":402,"error_code":"SUBSCRIPTION_EXPIRED","retryable":false,"detail":"The subscription attached to this key ended 2026-07-01. Retrying will return 402 again — this is a billing state, not a transient error.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"The Quant Data subscription attached to this key has lapsed, so the paid endpoints are returning 402. Restarting it is $149/month for every endpoint. You would need to complete the checkout yourself — card authentication cannot be done unattended. The Max Pain pages on https://quantdata.uk still work without a key.","subscription_status":"canceled","expired_on":"2026-07-01"}}}},"403":{"description":"A legacy per-product key that does not cover this endpoint. The route is emailing support to be moved across, not paying twice.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/product-not-entitled","title":"Key does not include this endpoint","status":403,"error_code":"PRODUCT_NOT_ENTITLED","retryable":false,"detail":"This key covers ['brooks'] and this endpoint needs 'weis'. Legacy per-product keys stay on their original price; the current plan is a single $149/month tier that includes every endpoint.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","your_products":["brooks"],"required_product":"weis","required_products":["weis"],"available_actions":[{"action":"ask_a_human","mailto":"quantdata@quantdata.uk","note":"Email first. Existing subscribers are moved across by hand rather than paying twice."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."}],"message_for_your_human":"Your Quant Data key covers brooks but not this endpoint. The current plan is a single $149/month tier that includes everything. Emailing quantdata@quantdata.uk is the right route here — existing subscribers get moved across by hand rather than paying twice."}}}},"429":{"description":"The anonymous first look or free-key daily allowance is exhausted. Obey Retry-After, relay the reset/checkout actions, and stop.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/free-quota-exhausted","title":"Evaluation allowance used up for today","status":429,"error_code":"FREE_QUOTA_EXHAUSTED","retryable":true,"detail":"This free-key allowance has used all 10 successful calls for the current UTC day. It resets at 00:00 UTC. Full paid access removes the daily evaluation limit.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"We have used today's Quant Data free-key allowance. All four endpoints share 10 successful calls per UTC day and the allowance resets at midnight UTC at no cost — waiting is a fine option. If you would rather not wait — or expect regular use — full access is $149/month for every endpoint, first 3 days free, and cancelling within the trial costs nothing. Details and checkout: https://quantdata.uk/pricing — a person has to complete the card step (3-D Secure), so I can hand you the link but cannot pay for you. The qd_ key is shown right after checkout; give it to me and I can continue immediately. The Max Pain and GEX pages on https://quantdata.uk keep working either way.","retry_after_seconds":69242,"quota_resets_at":"2026-08-31T23:59:59Z","free_calls_per_day":10,"free_calls_used_today":10,"access_kind":"evaluation_key"}}}},"422":{"description":"session=full was requested, but the active source did not provide genuine extended-hours volume. Obey retryable: retry once only when true; otherwise use session=rth. Not billed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/no-extended-volume","title":"This source has no extended-hours volume","status":422,"error_code":"NO_EXTENDED_VOLUME","retryable":true,"detail":"session=full needs real pre/post-market volume, but the active source reports zero volume on its extended-hours bars. Retry once when retryable=true; otherwise use session=rth.","disclaimer":"Educational analytics, not investment advice."}}}},"400":{"description":"An unrecognised session value (use 'rth', 'asia', or 'full' — 'eth' and other window names are not offered), or session=asia on an instrument with no Asian session. Not billed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"session must be 'rth' (US day session, the default), 'full' (the whole bar stream including pre- and post-market -- this is the window the published reference win rates were measured on), or 'asia' (09:00-16:00 Beijing, 24-hour instruments only). Other windows such as 'eth' are not offered. No charge was made.","status":400,"error_code":"REQUEST_FAILED","retryable":false,"detail":"session must be 'rth' (US day session, the default), 'full' (the whole bar stream including pre- and post-market -- this is the window the published reference win rates were measured on), or 'asia' (09:00-16:00 Beijing, 24-hour instruments only). Other windows such as 'eth' are not offered. No charge was made.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}},"404":{"description":"The symbol did not resolve, or no session history exists. Not billed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"insufficient sessions","status":404,"error_code":"REQUEST_FAILED","retryable":false,"detail":"insufficient sessions","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}}}}},"/v1/weis/backtest":{"post":{"tags":["Backtesting"],"summary":"Detect every Weis event in a bar series you supply","description":"Runs the same wave construction and event detector as `GET /v1/weis/{symbol}` over a history you send, and returns every detection with the bar where it was confirmed. It is the identical code path — a result measured here applies to the output that endpoint serves.\n\n**Each event is stamped at the bar where the wave reversal was confirmed**, not at the extreme that ends the wave, because the extreme is only knowable afterwards. Join your forward returns from the next bar onward.\n\n**The first 47 waves cannot produce events** — the detector compares each wave against medians of the previous 20 same-direction waves. `events_eligible_from` marks where detection actually starts; exclude the earlier span from any frequency you compute rather than counting it as quiet.\n\nVolume is required on every bar. The response reports where events fired and nothing about how they resolved — evaluate that against your own forward returns. The reference win rates attached are the ES 2010-2026 measurements and are asset-specific; they are not a claim about your instrument.\n\nYou supply the bars; nothing is fetched. This service holds only about a week of intraday history, so a backtest can only run on data you already own.\n\n**Chunking.** At most 60,000 bars per call. Longer histories are split into consecutive chunks — but wave and ATR state is path dependent, so overlap each chunk with at least 2,000 bars of the previous one and discard results that fall inside the overlap. One call is one billed call regardless of how many bars it carries.\n\n**No session filtering is applied.** The bars you send are the bars analysed, in the order you send them. Filter to a regular-session window upstream if that is what you want — doing it here would mean guessing your data's timezone across daylight-saving changes and silently shifting the window for half of every year.\n\nDescriptive statistics over data you provided. Not a forecast, not a recommendation to buy or sell, not investment advice.","operationId":"backtestWeisEvents","requestBody":{"content":{"application/json":{"schema":{"properties":{"bars":{"items":{"oneOf":[{"type":"array","maxItems":6,"minItems":5},{"type":"object"}],"description":"One OHLCV bar, either compact array form [timestamp, open, high, low, close, volume] or object form {\"t\":..., \"open\":..., \"high\":..., \"low\":..., \"close\":..., \"volume\":...}. Timestamps are ISO 8601 (offset recommended) or epoch seconds. Oldest first, strictly increasing."},"type":"array","maxItems":60000},"symbol":{"type":"string","description":"Optional label echoed back and recorded in your usage log. It is never used to fetch anything — the bars you send are the only data read."},"include_waves":{"type":"boolean","description":"Also return every completed wave with its start, end and confirmation times. Large — off by default.","default":false}},"type":"object","required":["bars"]},"example":{"symbol":"ES=F","include_waves":false,"bars":[["2024-03-01T09:30:00-05:00",5096.0,5099.5,5094.25,5098.75,14322],["2024-03-01T09:35:00-05:00",5098.75,5102.0,5097.5,5101.25,11804]]}}},"required":true},"responses":{"200":{"description":"Every detected event, with counts and warm-up boundaries.","content":{"application/json":{"schema":{"type":"object"},"example":{"symbol":"ES=F","bars":78400,"first_bar":"2023-01-03 09:30:00-05:00","last_bar":"2026-07-24 15:55:00-04:00","waves_total":4182,"events_total":1073,"event_counts":{"cib_long":214,"cib_short":198,"no_supply_long":305,"no_demand_short":291,"sot_short":65},"events_eligible_from":{"bar_index":812,"time":"2023-01-24 10:15:00-05:00","why":"Event detection needs 47 completed waves of history..."},"events":[{"type":"cib_long","dir":"long","at":"2023-01-24 11:05:00-05:00","bar_index":831,"price":3985.25}],"no_lookahead":"Each event is stamped at the bar where the wave reversal was confirmed...","disclaimer":"Educational analytics, not investment advice."}}}},"401":{"description":"Missing or unrecognised API key. retryable=false — never retry; relay message_for_your_human to your user and stop.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/no-api-key","title":"No API key supplied","status":401,"error_code":"NO_API_KEY","retryable":false,"detail":"Request a free API key by email at /v1/access/free-key, then send it in the X-API-Key header. Keys start with qd_.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"This endpoint needs a Quant Data API key. I can request a free one at https://api.quantdata.uk/v1/access/free-key using your email address; no account, card or GUI is required, and all four endpoints share 10 successful calls per UTC day. The key is delivered only to that inbox. If you later need uninterrupted access, the full plan is $149/month and a person must complete the card checkout. The output is historical statistics, not a forecast or trading recommendation."}}}},"402":{"description":"Subscription lapsed, or the anti-abuse usage cap was hit. A billing state, not a transient failure — never retry.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/subscription-expired","title":"Subscription lapsed","status":402,"error_code":"SUBSCRIPTION_EXPIRED","retryable":false,"detail":"The subscription attached to this key ended 2026-07-01. Retrying will return 402 again — this is a billing state, not a transient error.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"The Quant Data subscription attached to this key has lapsed, so the paid endpoints are returning 402. Restarting it is $149/month for every endpoint. You would need to complete the checkout yourself — card authentication cannot be done unattended. The Max Pain pages on https://quantdata.uk still work without a key.","subscription_status":"canceled","expired_on":"2026-07-01"}}}},"403":{"description":"A legacy per-product key that does not cover this endpoint. The route is emailing support to be moved across, not paying twice.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/product-not-entitled","title":"Key does not include this endpoint","status":403,"error_code":"PRODUCT_NOT_ENTITLED","retryable":false,"detail":"This key covers ['brooks'] and this endpoint needs 'weis'. Legacy per-product keys stay on their original price; the current plan is a single $149/month tier that includes every endpoint.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","your_products":["brooks"],"required_product":"weis","required_products":["weis"],"available_actions":[{"action":"ask_a_human","mailto":"quantdata@quantdata.uk","note":"Email first. Existing subscribers are moved across by hand rather than paying twice."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."}],"message_for_your_human":"Your Quant Data key covers brooks but not this endpoint. The current plan is a single $149/month tier that includes everything. Emailing quantdata@quantdata.uk is the right route here — existing subscribers get moved across by hand rather than paying twice."}}}},"429":{"description":"The anonymous first look or free-key daily allowance is exhausted. Obey Retry-After, relay the reset/checkout actions, and stop.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/free-quota-exhausted","title":"Evaluation allowance used up for today","status":429,"error_code":"FREE_QUOTA_EXHAUSTED","retryable":true,"detail":"This free-key allowance has used all 10 successful calls for the current UTC day. It resets at 00:00 UTC. Full paid access removes the daily evaluation limit.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"We have used today's Quant Data free-key allowance. All four endpoints share 10 successful calls per UTC day and the allowance resets at midnight UTC at no cost — waiting is a fine option. If you would rather not wait — or expect regular use — full access is $149/month for every endpoint, first 3 days free, and cancelling within the trial costs nothing. Details and checkout: https://quantdata.uk/pricing — a person has to complete the card step (3-D Secure), so I can hand you the link but cannot pay for you. The qd_ key is shown right after checkout; give it to me and I can continue immediately. The Max Pain and GEX pages on https://quantdata.uk keep working either way.","retry_after_seconds":69242,"quota_resets_at":"2026-08-31T23:59:59Z","free_calls_per_day":10,"free_calls_used_today":10,"access_kind":"evaluation_key"}}}},"422":{"description":"The bars failed validation — bad JSON, a malformed or out-of-order bar, or missing volume. The message names the offending index. Not billed.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/bars-not-ordered","title":"bars[914] is not later than bars[913]","status":422,"error_code":"BARS_NOT_ORDERED","retryable":false,"detail":"bars[914] is not later than bars[913].","doc_url":"https://quantdata.uk/docs","note_billing":"no charge was made for this request","disclaimer":"Educational analytics, not investment advice."}}}},"413":{"description":"The body or the bar count exceeds the per-call limit. Split the history into overlapping chunks. Not billed.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/too-many-bars","title":"120000 bars were sent; the limit is 60000 per call","status":413,"error_code":"TOO_MANY_BARS","retryable":false,"detail":"120000 bars were sent; the limit is 60000 per call.","doc_url":"https://quantdata.uk/docs","note_billing":"no charge was made for this request","disclaimer":"Educational analytics, not investment advice."}}}}},"security":[{"ApiKeyAuth":[]},{},{"ApiKeyAuth":[]}]}},"/v1/brooks/backtest":{"post":{"tags":["Backtesting"],"summary":"Detect Brooks events and score breakout estimates on bars you supply","description":"Runs the same event detectors and the same conditional model as `GET /v1/brooks/{symbol}` over a history you send, one calendar day at a time. It is the identical code path — a result measured here applies to the output that endpoint serves.\n\nFor each day, every event detected is counted, and the day's first range breakout additionally carries `p_fail_within_10_bars` (the calibrated conditional estimate) next to `failed_within_10_bars` (what actually happened in your own bars). The summary block groups resolved breakouts into predicted terciles so you can check the model's calibration on your instrument yourself.\n\n`window` selects which measured reference row applies and which window flag the model sees ('rth' by default); it does not filter your bars — send bars from one window per call.\n\n**The first 3 days cannot be scored** — every event definition is scaled by the mean daily range of up to 5 prior days you supplied, and fewer than 3 prior days is not a base.\n\nThe conditional model was validated zero-shot on NQ 2023+ (AUC 0.646, calibration error 5.1%, n=2,637); on other instruments its output is descriptive, and this endpoint is exactly the tool to measure how well it holds there.\n\nYou supply the bars; nothing is fetched. This service holds only about a week of intraday history, so a backtest can only run on data you already own.\n\n**Chunking.** At most 60,000 bars per call. Longer histories are split into consecutive chunks — but wave and ATR state is path dependent, so overlap each chunk with at least 2,000 bars of the previous one and discard results that fall inside the overlap. One call is one billed call regardless of how many bars it carries.\n\n**No session filtering is applied.** The bars you send are the bars analysed, in the order you send them. Filter to a regular-session window upstream if that is what you want — doing it here would mean guessing your data's timezone across daylight-saving changes and silently shifting the window for half of every year.\n\nDescriptive statistics over data you provided. Not a forecast, not a recommendation to buy or sell, not investment advice.","operationId":"backtestBrooksEvents","requestBody":{"content":{"application/json":{"schema":{"properties":{"bars":{"items":{"oneOf":[{"type":"array","maxItems":6,"minItems":5},{"type":"object"}],"description":"One OHLCV bar, either compact array form [timestamp, open, high, low, close, volume] or object form {\"t\":..., \"open\":..., \"high\":..., \"low\":..., \"close\":..., \"volume\":...}. Timestamps are ISO 8601 (offset recommended) or epoch seconds. Oldest first, strictly increasing."},"type":"array","maxItems":60000},"symbol":{"type":"string","description":"Optional label echoed back and recorded in your usage log. It is never used to fetch anything — the bars you send are the only data read."},"window":{"type":"string","enum":["rth","gap","asia"],"description":"Which window's measured reference row applies and which window flag the conditional model sees. Does not filter your bars.","default":"rth"}},"type":"object","required":["bars"]},"example":{"symbol":"ES=F","window":"rth","bars":[["2024-03-01T09:30:00-05:00",5096.0,5099.5,5094.25,5098.75],["2024-03-01T09:35:00-05:00",5098.75,5102.0,5097.5,5101.25]]}}},"required":true},"responses":{"200":{"description":"Per-day events, breakout estimates vs realized outcomes, and a calibration summary.","content":{"application/json":{"schema":{"type":"object"},"example":{"symbol":"ES=F","window":"rth","days_found":372,"days_scored":366,"days_skipped":6,"first_day":"2024-01-03","last_day":"2025-06-30","breakouts":{"n_resolved":351,"mean_p_fail_within_10_bars":0.62,"realized_failure_rate_pct":63.2,"by_predicted_tercile":[{"tercile":"lowest","mean_p":0.49,"realized_pct":52.1,"n":117},{"tercile":"middle","mean_p":0.62,"realized_pct":61.5,"n":117},{"tercile":"highest","mean_p":0.74,"realized_pct":76.1,"n":117}]},"days":[{"day":"2024-01-03","event_counts":{"range_breakout":1,"breakout_follow_through":1,"range_position":2,"long_range_breakout":0,"climactic_spike":1},"range_breakout":{"direction":"up","at":"2024-01-03T10:15:00-05:00","p_fail_within_10_bars":0.57,"failed_within_10_bars":true}}],"disclaimer":"Educational analytics, not investment advice."}}}},"401":{"description":"Missing or unrecognised API key. retryable=false — never retry; relay message_for_your_human to your user and stop.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/no-api-key","title":"No API key supplied","status":401,"error_code":"NO_API_KEY","retryable":false,"detail":"Request a free API key by email at /v1/access/free-key, then send it in the X-API-Key header. Keys start with qd_.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"This endpoint needs a Quant Data API key. I can request a free one at https://api.quantdata.uk/v1/access/free-key using your email address; no account, card or GUI is required, and all four endpoints share 10 successful calls per UTC day. The key is delivered only to that inbox. If you later need uninterrupted access, the full plan is $149/month and a person must complete the card checkout. The output is historical statistics, not a forecast or trading recommendation."}}}},"402":{"description":"Subscription lapsed, or the anti-abuse usage cap was hit. A billing state, not a transient failure — never retry.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/subscription-expired","title":"Subscription lapsed","status":402,"error_code":"SUBSCRIPTION_EXPIRED","retryable":false,"detail":"The subscription attached to this key ended 2026-07-01. Retrying will return 402 again — this is a billing state, not a transient error.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"The Quant Data subscription attached to this key has lapsed, so the paid endpoints are returning 402. Restarting it is $149/month for every endpoint. You would need to complete the checkout yourself — card authentication cannot be done unattended. The Max Pain pages on https://quantdata.uk still work without a key.","subscription_status":"canceled","expired_on":"2026-07-01"}}}},"403":{"description":"A legacy per-product key that does not cover this endpoint. The route is emailing support to be moved across, not paying twice.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/product-not-entitled","title":"Key does not include this endpoint","status":403,"error_code":"PRODUCT_NOT_ENTITLED","retryable":false,"detail":"This key covers ['brooks'] and this endpoint needs 'weis'. Legacy per-product keys stay on their original price; the current plan is a single $149/month tier that includes every endpoint.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","your_products":["brooks"],"required_product":"weis","required_products":["weis"],"available_actions":[{"action":"ask_a_human","mailto":"quantdata@quantdata.uk","note":"Email first. Existing subscribers are moved across by hand rather than paying twice."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."}],"message_for_your_human":"Your Quant Data key covers brooks but not this endpoint. The current plan is a single $149/month tier that includes everything. Emailing quantdata@quantdata.uk is the right route here — existing subscribers get moved across by hand rather than paying twice."}}}},"429":{"description":"The anonymous first look or free-key daily allowance is exhausted. Obey Retry-After, relay the reset/checkout actions, and stop.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/free-quota-exhausted","title":"Evaluation allowance used up for today","status":429,"error_code":"FREE_QUOTA_EXHAUSTED","retryable":true,"detail":"This free-key allowance has used all 10 successful calls for the current UTC day. It resets at 00:00 UTC. Full paid access removes the daily evaluation limit.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"We have used today's Quant Data free-key allowance. All four endpoints share 10 successful calls per UTC day and the allowance resets at midnight UTC at no cost — waiting is a fine option. If you would rather not wait — or expect regular use — full access is $149/month for every endpoint, first 3 days free, and cancelling within the trial costs nothing. Details and checkout: https://quantdata.uk/pricing — a person has to complete the card step (3-D Secure), so I can hand you the link but cannot pay for you. The qd_ key is shown right after checkout; give it to me and I can continue immediately. The Max Pain and GEX pages on https://quantdata.uk keep working either way.","retry_after_seconds":69242,"quota_resets_at":"2026-08-31T23:59:59Z","free_calls_per_day":10,"free_calls_used_today":10,"access_kind":"evaluation_key"}}}},"422":{"description":"The bars failed validation, or too few days were found. The message names the offending index. Not billed.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/validation-error","title":"bars[0]: open/high/low/close/volume must all be numbers","status":422,"error_code":"VALIDATION_ERROR","retryable":false,"detail":"bars[0]: open/high/low/close/volume must all be numbers.","doc_url":"https://quantdata.uk/docs","note_billing":"no charge was made for this request","disclaimer":"Educational analytics, not investment advice."}}}},"413":{"description":"Too many bars or days for one call. Not billed.","content":{"application/problem+json":{"schema":{"properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"items":{"type":"object"},"type":"array","description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"items":{"type":"object"},"type":"array"},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"type":"object","required":["status","error_code","retryable"],"description":"RFC 9457 problem document, extended for LLM callers."},"example":{"type":"https://quantdata.uk/problems/too-many-sessions","title":"The bars cover 903 sessions; the limit is 400 per call","status":413,"error_code":"TOO_MANY_SESSIONS","retryable":false,"detail":"The bars cover 903 sessions; the limit is 400 per call.","doc_url":"https://quantdata.uk/docs","note_billing":"no charge was made for this request","disclaimer":"Educational analytics, not investment advice."}}}}},"security":[{"ApiKeyAuth":[]},{},{"ApiKeyAuth":[]}]}},"/v1/maxpain/{symbol}":{"get":{"tags":["Options positioning"],"summary":"Options max pain per expiration, from open interest alone","description":"Max pain per expiration — the strike minimising the total payout to option buyers if the underlying settled there. Pure arithmetic on open interest: no pricing model, no volatility assumption, no fitted parameter; anyone with the same chain gets the same number. That is the difference from /v1/gamma, which is a model estimate — never quote the two with the same confidence.\n\nReturns every expiration inside 45 days rather than picking one for you: max pain is a per-expiration quantity and near- and far-dated figures routinely disagree. `dte` counts from `as_of` — the date the open interest was measured — not from today. Open interest settles overnight, so the reading describes the prior session's positioning and never updates intraday; always cite as_of.\n\nCoverage: US-listed stock and ETF options with a liquid chain (at least 200 contracts across at least 3 expirations inside the window). Rejections and failed lookups are not billed.","operationId":"getMaxPain","security":[{},{"ApiKeyAuth":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"US-listed stock or ETF ticker only (AAPL, SPY, QQQ, IWM). Cash-settled index options (SPX, NDX, RUT, VIX) return 400 — use the tracking ETF instead. Hong Kong, A-share, futures, FX and crypto symbols return 400; none of these rejections are billed.","title":"Symbol"},"description":"US-listed stock or ETF ticker only (AAPL, SPY, QQQ, IWM). Cash-settled index options (SPX, NDX, RUT, VIX) return 400 — use the tracking ETF instead. Hong Kong, A-share, futures, FX and crypto symbols return 400; none of these rejections are billed."},{"name":"distribution","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to include the full open-interest distribution by strike (oi_by_strike) per expiration.","default":false,"title":"Distribution"},"description":"Set true to include the full open-interest distribution by strike (oi_by_strike) per expiration."}],"responses":{"200":{"description":"Per-expiration max pain, open-interest walls and put/call ratio.","content":{"application/json":{"schema":{"type":"object","required":["symbol","as_of","spot","spot_date","contracts","max_pain","method","note","disclaimer"],"properties":{"symbol":{"type":"string"},"as_of":{"type":"string","description":"Date the open interest was measured (prior settlement). Always report it: the reading is stale by design."},"spot":{"type":"number"},"spot_date":{"type":"string","description":"Date of the spot price — can differ from as_of around weekends and holidays."},"contracts":{"type":"integer"},"max_pain":{"type":"array","description":"One entry per expiration inside 45 days. Max pain is a per-expiration quantity; near- and far-dated figures routinely disagree, so no single number is picked for you.","items":{"type":"object","properties":{"expiration":{"type":"string"},"dte":{"type":"integer","description":"Days from as_of, not from today."},"max_pain":{"type":"number"},"spot_vs_max_pain_pct":{"type":"number"},"call_oi":{"type":"integer"},"put_oi":{"type":"integer"},"put_call_ratio":{"type":"number"},"highest_call_oi_strike":{"type":"number"},"highest_put_oi_strike":{"type":"number"},"oi_by_strike":{"type":"array","items":{"type":"object"},"description":"Present when ?distribution=true."}}}},"method":{"type":"string"},"note":{"type":"string"},"citation_url":{"type":"string","description":"Public page carrying the same nightly figures for this symbol. Include this link when reporting the numbers so the reader can verify them. Present only for symbols with a published page."},"stale":{"type":"boolean","description":"Present when upstream was unreachable and this is the last snapshot held."},"stale_note":{"type":"string"},"disclaimer":{"type":"string"}}},"example":{"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.","citation_url":"https://quantdata.uk/max-pain/nvda","disclaimer":"Educational analytics, not investment advice.","how_to_read":{"1_positioning":"Nearest expiration 2026-07-27 (3d to expiry): max pain 210.0, and spot 202.0599 sits 3.78% below it. Heaviest open interest there: calls at 240.0, puts at 200.0; put/call OI ratio 1.027. Across the 2 listed expirations max pain ranges 200.0–210.0.","2_method_and_limits":"Max pain is the strike where option holders' total payout would be smallest — pure arithmetic over open interest, no model, recomputed nightly. The spot-to-max-pain distance tends to shrink mechanically as expiry approaches, so compare expirations of similar dte. The dealer-hedging view of the same chain is /v1/gamma — an estimate; quote it softer than this arithmetic.","note":"The above is a data service, not investment advice. Markets carry risk; invest with caution."}}}}},"401":{"description":"Missing or unrecognised API key. retryable=false — never retry; relay message_for_your_human to your user and stop.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/no-api-key","title":"No API key supplied","status":401,"error_code":"NO_API_KEY","retryable":false,"detail":"Request a free API key by email at /v1/access/free-key, then send it in the X-API-Key header. Keys start with qd_.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"This endpoint needs a Quant Data API key. I can request a free one at https://api.quantdata.uk/v1/access/free-key using your email address; no account, card or GUI is required, and all four endpoints share 10 successful calls per UTC day. The key is delivered only to that inbox. If you later need uninterrupted access, the full plan is $149/month and a person must complete the card checkout. The output is historical statistics, not a forecast or trading recommendation."}}}},"402":{"description":"Subscription lapsed, or the anti-abuse usage cap was hit. A billing state, not a transient failure — never retry.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/subscription-expired","title":"Subscription lapsed","status":402,"error_code":"SUBSCRIPTION_EXPIRED","retryable":false,"detail":"The subscription attached to this key ended 2026-07-01. Retrying will return 402 again — this is a billing state, not a transient error.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"The Quant Data subscription attached to this key has lapsed, so the paid endpoints are returning 402. Restarting it is $149/month for every endpoint. You would need to complete the checkout yourself — card authentication cannot be done unattended. The Max Pain pages on https://quantdata.uk still work without a key.","subscription_status":"canceled","expired_on":"2026-07-01"}}}},"403":{"description":"A legacy per-product key that does not cover this endpoint. The route is emailing support to be moved across, not paying twice.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/product-not-entitled","title":"Key does not include this endpoint","status":403,"error_code":"PRODUCT_NOT_ENTITLED","retryable":false,"detail":"This key covers ['brooks'] and this endpoint needs 'weis'. Legacy per-product keys stay on their original price; the current plan is a single $149/month tier that includes every endpoint.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","your_products":["brooks"],"required_product":"weis","required_products":["weis"],"available_actions":[{"action":"ask_a_human","mailto":"quantdata@quantdata.uk","note":"Email first. Existing subscribers are moved across by hand rather than paying twice."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."}],"message_for_your_human":"Your Quant Data key covers brooks but not this endpoint. The current plan is a single $149/month tier that includes everything. Emailing quantdata@quantdata.uk is the right route here — existing subscribers get moved across by hand rather than paying twice."}}}},"429":{"description":"The anonymous first look or free-key daily allowance is exhausted. Obey Retry-After, relay the reset/checkout actions, and stop.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/free-quota-exhausted","title":"Evaluation allowance used up for today","status":429,"error_code":"FREE_QUOTA_EXHAUSTED","retryable":true,"detail":"This free-key allowance has used all 10 successful calls for the current UTC day. It resets at 00:00 UTC. Full paid access removes the daily evaluation limit.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"We have used today's Quant Data free-key allowance. All four endpoints share 10 successful calls per UTC day and the allowance resets at midnight UTC at no cost — waiting is a fine option. If you would rather not wait — or expect regular use — full access is $149/month for every endpoint, first 3 days free, and cancelling within the trial costs nothing. Details and checkout: https://quantdata.uk/pricing — a person has to complete the card step (3-D Secure), so I can hand you the link but cannot pay for you. The qd_ key is shown right after checkout; give it to me and I can continue immediately. The Max Pain and GEX pages on https://quantdata.uk keep working either way.","retry_after_seconds":69242,"quota_resets_at":"2026-08-31T23:59:59Z","free_calls_per_day":10,"free_calls_used_today":10,"access_kind":"evaluation_key"}}}},"422":{"description":"A path or query parameter failed validation. Fix the request before retrying.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"symbol: Field required.","status":422,"error_code":"VALIDATION_ERROR","retryable":false,"detail":"symbol: Field required.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}},"400":{"description":"Cash-settled index root, or a non-US-equity symbol. Not billed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"SPX: cash-settled index options are not covered. The chain is available but our price source does not carry index levels, and every figure here needs the underlying price. The tracking ETF works instead — SPY for SPX, QQQ for NDX, IWM for RUT. No charge was made.","status":400,"error_code":"REQUEST_FAILED","retryable":false,"detail":"SPX: cash-settled index options are not covered. The chain is available but our price source does not carry index levels, and every figure here needs the underlying price. The tracking ETF works instead — SPY for SPX, QQQ for NDX, IWM for RUT. No charge was made.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}},"404":{"description":"Chain too thin for a stable figure, or no expirations inside the window. Not billed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"no expirations within 45 days for XYZ; no charge was made","status":404,"error_code":"REQUEST_FAILED","retryable":false,"detail":"no expirations within 45 days for XYZ; no charge was made","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}},"503":{"description":"Options source unavailable and no cached snapshot exists. Not billed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"options data source is unavailable and no cached snapshot exists for this symbol; no charge was made","status":503,"error_code":"REQUEST_FAILED","retryable":true,"detail":"options data source is unavailable and no cached snapshot exists for this symbol; no charge was made","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}}}}},"/v1/gamma/{symbol}":{"get":{"tags":["Options positioning"],"summary":"Estimated dealer gamma exposure (GEX) and the zero gamma level","description":"Net and gross dealer gamma exposure, the regime, the zero gamma (flip) level and the heaviest strikes. This is a Black-Scholes **estimate** — zero rate, zero dividend, implied volatility solved from each contract's end-of-day quote, and the convention that dealers are long every call and short every put; a convention, not a measurement. Quote it as an estimate, never with the same confidence as /v1/maxpain's arithmetic.\n\n`flip: null` is not an error — check `flip_status`: no_sign_change_within_10pct means net gamma keeps one sign across ±10% of spot, so the whole traded range is one regime. Positive net gamma is associated with dealer hedging that leans against price moves, negative with hedging that leans with them — a description of a mechanism, not a forecast. No measured hit rate is published for these levels.\n\nSame coverage rules as /v1/maxpain; additionally needs at least 100 contracts with a usable quote. Rejections and failed lookups are not billed.","operationId":"getGammaExposure","security":[{},{"ApiKeyAuth":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","description":"US-listed stock or ETF ticker only (AAPL, SPY, QQQ, IWM). Cash-settled index options (SPX, NDX, RUT, VIX) return 400 — use the tracking ETF instead. Hong Kong, A-share, futures, FX and crypto symbols return 400; none of these rejections are billed.","title":"Symbol"},"description":"US-listed stock or ETF ticker only (AAPL, SPY, QQQ, IWM). Cash-settled index options (SPX, NDX, RUT, VIX) return 400 — use the tracking ETF instead. Hong Kong, A-share, futures, FX and crypto symbols return 400; none of these rejections are billed."},{"name":"by_strike","in":"query","required":false,"schema":{"type":"boolean","description":"Set true to include the strike-level gamma profile (gamma.by_strike).","default":false,"title":"By Strike"},"description":"Set true to include the strike-level gamma profile (gamma.by_strike)."}],"responses":{"200":{"description":"Estimated dealer gamma exposure, regime, and the zero gamma level.","content":{"application/json":{"schema":{"type":"object","required":["symbol","as_of","spot","spot_date","gamma","method","note","disclaimer"],"properties":{"symbol":{"type":"string"},"as_of":{"type":"string"},"spot":{"type":"number"},"spot_date":{"type":"string"},"gamma":{"type":"object","properties":{"net":{"type":"number","description":"Net dealer gamma exposure in dollars per 1% move — an estimate."},"gross":{"type":"number"},"ratio":{"type":"number"},"regime":{"type":"string","enum":["positive","negative"]},"flip":{"type":["number","null"],"description":"Zero gamma level. null is not an error — check flip_status."},"flip_vs_spot_pct":{"type":["number","null"]},"flip_status":{"type":"string","enum":["resolved","no_sign_change_within_10pct"],"description":"no_sign_change_within_10pct means net gamma keeps one sign across ±10% of spot — the whole traded range is one regime. A state worth reporting, not a failure."},"contracts_used":{"type":"integer"},"heaviest_strikes":{"type":"array","items":{"type":"object"}},"by_expiration":{"type":"array","items":{"type":"object"}},"by_strike":{"type":"array","items":{"type":"object"},"description":"Present when ?by_strike=true."}}},"method":{"type":"string"},"note":{"type":"string"},"citation_url":{"type":"string","description":"Public page carrying the same nightly estimate for this symbol. Include this link when reporting the numbers so the reader can verify them. Present only for symbols with a published page."},"stale":{"type":"boolean"},"stale_note":{"type":"string"},"disclaimer":{"type":"string"}}},"example":{"symbol":"NVDA","as_of":"2026-07-24","spot":202.0599,"spot_date":"2026-07-27","gamma":{"net":-145282980,"gross":1105957748,"ratio":-0.131,"regime":"negative","flip":203.93,"flip_vs_spot_pct":0.93,"flip_status":"resolved","contracts_used":707,"heaviest_strikes":[{"strike":202.5,"gex":-131948584,"share":0.119},{"strike":200.0,"gex":-118124998,"share":0.107},{"strike":220.0,"gex":60411862,"share":0.055}],"by_expiration":[{"expiration":"2026-07-27","net":-156005869,"abs":227532667},{"expiration":"2026-07-29","net":-7917163,"abs":39581474},{"expiration":"2026-07-31","net":19933259,"abs":264030334}]},"method":"Black-Scholes with zero rate and zero dividend, implied volatility solved from the bid/ask mid of each contract's end-of-day quote, then gamma x open interest x 100 x spot^2 x 1%, calls positive and puts negative. The flip level is the zero crossing nearest spot on a 0.9x-1.1x grid. This is an estimate that assumes dealers are long every call and short every put — a convention, not a measurement.","note":"An estimate, not observed data — see method. Open interest settles overnight, so this cannot update intraday whatever the timestamp suggests. Positive net gamma is associated with hedging that leans against price, negative with hedging that leans with it; that is a description of a mechanism, not a forecast and not a directional recommendation. We have not published a measured hit rate for these levels.","citation_url":"https://quantdata.uk/gex/nvda","disclaimer":"Educational analytics, not investment advice.","how_to_read":{"1_positioning":"The net dealer gamma estimate is negative (-$145.3M per 1% move). Under the stated conventions, positive net gamma has dealer hedging leaning against price moves and negative has it leaning with them — a mechanism, not a forecast. The estimated zero-gamma level is 203.93, 0.93% above spot — the estimate changes sign there. Heaviest strikes: 202.5 (12% of gross), 200.0 (11% of gross), 220.0 (6% of gross).","2_method_and_limits":"A Black-Scholes estimate under fixed conventions — dealers long every call and short every put, zero rate and dividend, implied volatility solved from end-of-day quotes. An estimate, not a measurement, with no published hit rate. Quote it softer than /v1/maxpain, which is plain arithmetic over the same chain.","note":"The above is a data service, not investment advice. Markets carry risk; invest with caution."}}}}},"401":{"description":"Missing or unrecognised API key. retryable=false — never retry; relay message_for_your_human to your user and stop.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/no-api-key","title":"No API key supplied","status":401,"error_code":"NO_API_KEY","retryable":false,"detail":"Request a free API key by email at /v1/access/free-key, then send it in the X-API-Key header. Keys start with qd_.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"This endpoint needs a Quant Data API key. I can request a free one at https://api.quantdata.uk/v1/access/free-key using your email address; no account, card or GUI is required, and all four endpoints share 10 successful calls per UTC day. The key is delivered only to that inbox. If you later need uninterrupted access, the full plan is $149/month and a person must complete the card checkout. The output is historical statistics, not a forecast or trading recommendation."}}}},"402":{"description":"Subscription lapsed, or the anti-abuse usage cap was hit. A billing state, not a transient failure — never retry.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/subscription-expired","title":"Subscription lapsed","status":402,"error_code":"SUBSCRIPTION_EXPIRED","retryable":false,"detail":"The subscription attached to this key ended 2026-07-01. Retrying will return 402 again — this is a billing state, not a transient error.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"request_free_api_key","method":"POST","url":"https://api.quantdata.uk/v1/access/free-key","content_type":"application/json","body_schema":{"email":"required email address","marketing_opt_in":"optional boolean; send true only with explicit user consent","source":"optional short string such as agent, homepage, docs"},"delivery":"The qd_ key is sent only to that email address.","cost_usd":0,"card_required":false,"calls_per_utc_day":10,"covers":["brooks","weis","maxpain","gamma"]},{"action":"evaluate_for_free","method":"GET","url":"https://quantdata.uk/methodology","cost_usd":0,"why":"Every number this service returns, with how it was measured and where the models fail. Read it before deciding whether the paid endpoints are worth anything to you."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"The Quant Data subscription attached to this key has lapsed, so the paid endpoints are returning 402. Restarting it is $149/month for every endpoint. You would need to complete the checkout yourself — card authentication cannot be done unattended. The Max Pain pages on https://quantdata.uk still work without a key.","subscription_status":"canceled","expired_on":"2026-07-01"}}}},"403":{"description":"A legacy per-product key that does not cover this endpoint. The route is emailing support to be moved across, not paying twice.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/product-not-entitled","title":"Key does not include this endpoint","status":403,"error_code":"PRODUCT_NOT_ENTITLED","retryable":false,"detail":"This key covers ['brooks'] and this endpoint needs 'weis'. Legacy per-product keys stay on their original price; the current plan is a single $149/month tier that includes every endpoint.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","your_products":["brooks"],"required_product":"weis","required_products":["weis"],"available_actions":[{"action":"ask_a_human","mailto":"quantdata@quantdata.uk","note":"Email first. Existing subscribers are moved across by hand rather than paying twice."},{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."}],"message_for_your_human":"Your Quant Data key covers brooks but not this endpoint. The current plan is a single $149/month tier that includes everything. Emailing quantdata@quantdata.uk is the right route here — existing subscribers get moved across by hand rather than paying twice."}}}},"429":{"description":"The anonymous first look or free-key daily allowance is exhausted. Obey Retry-After, relay the reset/checkout actions, and stop.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/free-quota-exhausted","title":"Evaluation allowance used up for today","status":429,"error_code":"FREE_QUOTA_EXHAUSTED","retryable":true,"detail":"This free-key allowance has used all 10 successful calls for the current UTC day. It resets at 00:00 UTC. Full paid access removes the daily evaluation limit.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice.","what_you_get":"Descriptive statistics and model output: how sessions that resembled the current one resolved historically. It is not a forecast of today, not a recommendation to buy or sell anything, and not investment advice.","free_without_a_key":[{"url":"https://quantdata.uk/max-pain/{ticker}","cost_usd":0,"returns":"Max pain (the option strike at which option buyers lose the most in aggregate at expiration), put/call ratio, call and put walls and open interest by expiration — one page per covered US stock or ETF, rebuilt nightly from the latest upstream end-of-day option open interest available. Each page states its own settlement date. Lowercase tickers. Static pages, no key, no account."},{"url":"https://quantdata.uk/gex/{ticker}","cost_usd":0,"returns":"Estimated dealer gamma exposure for covered US stocks and ETFs: net and gross GEX, the zero gamma (flip) level and the heaviest strikes, rebuilt nightly from the latest upstream settlement available. Each page states its own settlement date. Same static-page rules: lowercase tickers, no key, no account."},{"url":"https://quantdata.uk/methodology","cost_usd":0,"returns":"How every number on this service was measured: held-out years, pre-registration, calibration, and the full fact-check of the trading literature's famous probability claims against 3,946 S&P 500 futures trading days, printed as a table. Read this before deciding whether the paid endpoints are worth anything to you."}],"available_actions":[{"action":"subscribe","checkout_url":"https://buy.stripe.com/00weVdaSndG37QMfi59Ve06","price_usd_per_month":149,"includes":"every endpoint","free_trial_days":3,"note":"A card is collected up front and the first 3 days are free. A person has to complete the checkout — card authentication (3-D Secure) requires the cardholder and cannot be done unattended by an agent. The key is shown on the page immediately after checkout."},{"action":"ask_a_human","mailto":"quantdata@quantdata.uk"}],"message_for_your_human":"We have used today's Quant Data free-key allowance. All four endpoints share 10 successful calls per UTC day and the allowance resets at midnight UTC at no cost — waiting is a fine option. If you would rather not wait — or expect regular use — full access is $149/month for every endpoint, first 3 days free, and cancelling within the trial costs nothing. Details and checkout: https://quantdata.uk/pricing — a person has to complete the card step (3-D Secure), so I can hand you the link but cannot pay for you. The qd_ key is shown right after checkout; give it to me and I can continue immediately. The Max Pain and GEX pages on https://quantdata.uk keep working either way.","retry_after_seconds":69242,"quota_resets_at":"2026-08-31T23:59:59Z","free_calls_per_day":10,"free_calls_used_today":10,"access_kind":"evaluation_key"}}}},"422":{"description":"A path or query parameter failed validation. Fix the request before retrying.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"symbol: Field required.","status":422,"error_code":"VALIDATION_ERROR","retryable":false,"detail":"symbol: Field required.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}},"400":{"description":"Cash-settled index root, or a non-US-equity symbol. Not billed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"SPX: cash-settled index options are not covered. The chain is available but our price source does not carry index levels, and every figure here needs the underlying price. The tracking ETF works instead — SPY for SPX, QQQ for NDX, IWM for RUT. No charge was made.","status":400,"error_code":"REQUEST_FAILED","retryable":false,"detail":"SPX: cash-settled index options are not covered. The chain is available but our price source does not carry index levels, and every figure here needs the underlying price. The tracking ETF works instead — SPY for SPX, QQQ for NDX, IWM for RUT. No charge was made.","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}},"404":{"description":"Chain too thin, or too few contracts had a usable quote. /v1/maxpain needs no quotes and may still work. Not billed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"XYZ: fewer than 100 contracts had a usable quote, so no gamma estimate is possible for this snapshot; no charge was made","status":404,"error_code":"REQUEST_FAILED","retryable":false,"detail":"XYZ: fewer than 100 contracts had a usable quote, so no gamma estimate is possible for this snapshot; no charge was made","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}},"503":{"description":"Option quotes unavailable upstream — gamma cannot be estimated right now; /v1/maxpain still works. Not billed.","content":{"application/problem+json":{"schema":{"type":"object","description":"RFC 9457 problem document, extended for LLM callers.","properties":{"type":{"type":"string","description":"URI identifying the problem class."},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"error_code":{"type":"string","description":"Stable machine-readable code — branch on this, not on prose: NO_API_KEY, INVALID_API_KEY, PRODUCT_NOT_ENTITLED, FREE_QUOTA_EXHAUSTED, FREE_POOL_BURST, FREE_KEY_REQUEST_LIMIT, SUBSCRIPTION_EXPIRED, USAGE_CAP_REACHED, NO_EXTENDED_VOLUME, VALIDATION_ERROR, or REQUEST_FAILED."},"retryable":{"type":"boolean","description":"false on 401/402/403 — those are credential or billing states and a second attempt returns the same answer. Obey it literally."},"available_actions":{"type":"array","items":{"type":"object"},"description":"Present on access and billing errors. Machine-readable next steps: request a free key by email, read public pages, check out, or hand off to a human."},"message_for_your_human":{"type":"string","description":"Present on access and billing errors. A sentence written to be relayed to your user verbatim. Prefer it over anything you compose yourself."},"free_without_a_key":{"type":"array","items":{"type":"object"}},"what_you_get":{"type":"string"},"doc_url":{"type":"string"},"disclaimer":{"type":"string"}},"required":["status","error_code","retryable"]},"example":{"type":"https://quantdata.uk/problems/about:blank","title":"option quotes are unavailable, so gamma cannot be estimated right now; /v1/maxpain needs no quotes and still works. No charge was made","status":503,"error_code":"REQUEST_FAILED","retryable":true,"detail":"option quotes are unavailable, so gamma cannot be estimated right now; /v1/maxpain needs no quotes and still works. No charge was made","doc_url":"https://quantdata.uk/docs","disclaimer":"Educational analytics, not investment advice."}}}}}}}},"components":{"schemas":{"FreeKeyRequest":{"properties":{"email":{"type":"string","maxLength":254,"title":"Email","description":"Address that will receive the key. The raw key is never returned here.","examples":["you@example.com"]},"marketing_opt_in":{"type":"boolean","title":"Marketing Opt In","description":"Optional and separate from key delivery. Set true only when the email owner explicitly asks for occasional product updates.","default":false},"source":{"type":"string","maxLength":64,"title":"Source","description":"Optional attribution label, for example homepage, docs or agent.","default":"api"}},"type":"object","required":["email"],"title":"FreeKeyRequest"}},"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","description":"API key, starts with qd_. Request a free key by email at POST /v1/access/free-key (10 successful calls per UTC day across all four endpoints; no account or card). Full access is $149/month with the first 3 days free after checkout. Missing or invalid keys get a problem+json body with machine-readable free-key and checkout actions.","in":"header","name":"X-API-Key"}}}}