# quantedTrader API: full reference for AI agents > GEX, DEX, VEX and CEX (gamma, delta, vanna, charm exposure) by strike, walls, zero gamma and the gamma flip, implied and realized volatility, options flow, quantedFlow signals (contracts trading above their open interest), a whole-market screener and minute-by-minute history for 5,000+ US stocks & ETFs, over REST and MCP. $79/month, 50,000 requests per day. Short index: https://www.quantedoptions.com/llms.txt · OpenAPI: https://www.quantedoptions.com/trader-api/openapi.json · Human docs: https://www.quantedoptions.com/trader-api/docs ## Access and limits - Plan: quantedTrader API, $79/month (included with quantedUltra). Keys are created on the API dashboard (https://www.quantedoptions.com/trader-api/dashboard). - Auth: the key in the X-API-Key header (or Authorization: Bearer). Never in the URL or as a tool argument. - 50,000 requests per account per day (UTC day, REST and MCP together), 5 per second sustained, bursts of 10. Hard cap, no overage billing. - Only successful answers count. Bulk calls count one request per symbol; /history and get_history count one request per 10 sessions returned (with a minute, one per session). get_account, tools/list, prompts and resources are free. - One customer's own use: up to 2 addresses in any 10 minutes; hosted AI apps count as one address. - Every response carries X-Quota-Limit, X-Quota-Remaining, X-Quota-Reset and X-Request-Cost. ## MCP server URL: https://api.quantedoptions.com/v1/mcp (streamable HTTP, stateless). Every tool answers with short readable text (ending with “Data as of HH:MM ET, lag N min”) and the same numbers as structured JSON (MCP structuredContent), described by the tool’s outputSchema. ### Client setup Claude Code: Run once in a terminal (add --scope user to use it in every project). ``` claude mcp add --transport http quantedtrader https://api.quantedoptions.com/v1/mcp \ --header "X-API-Key: qo_tk_YOUR_KEY" ``` Claude Desktop: claude_desktop_config.json (Settings → Developer → Edit config). Needs Node.js; mcp-remote bridges the key header. ``` { "mcpServers": { "quantedtrader": { "command": "npx", "args": [ "-y", "mcp-remote", "https://api.quantedoptions.com/v1/mcp", "--header", "X-API-Key:${QO_KEY}" ], "env": { "QO_KEY": "qo_tk_YOUR_KEY" } } } } ``` Cursor: ~/.cursor/mcp.json (or .cursor/mcp.json in a project). ``` { "mcpServers": { "quantedtrader": { "url": "https://api.quantedoptions.com/v1/mcp", "headers": { "X-API-Key": "qo_tk_YOUR_KEY" } } } } ``` VS Code: .vscode/mcp.json in your workspace (Copilot agent mode). VS Code asks for the key once and stores it. ``` { "inputs": [ { "type": "promptString", "id": "qo-key", "description": "quantedTrader API key", "password": true } ], "servers": { "quantedtrader": { "type": "http", "url": "https://api.quantedoptions.com/v1/mcp", "headers": { "X-API-Key": "${input:qo-key}" } } } } ``` Windsurf: ~/.codeium/windsurf/mcp_config.json. ``` { "mcpServers": { "quantedtrader": { "serverUrl": "https://api.quantedoptions.com/v1/mcp", "headers": { "X-API-Key": "qo_tk_YOUR_KEY" } } } } ``` Any MCP client: Streamable HTTP at the URL below; send the key in the X-API-Key header (or Authorization: Bearer). ``` { "mcpServers": { "quantedtrader": { "type": "http", "url": "https://api.quantedoptions.com/v1/mcp", "headers": { "X-API-Key": "qo_tk_YOUR_KEY" } } } } ``` claude.ai and ChatGPT: add a custom connector with the URL above and sign in with your quantedOptions account (no key to paste). ### Tools - get_levels: Walls, zero gamma and the largest gamma nodes for a symbol, relative to spot, with max pain, the highest open interest strikes, the front expiry’s magnet and pin score, and the dealer hedge for a 1% move. - get_0dte: The front expiry (0DTE on names with daily expiries): walls, zero gamma, magnet, max pain, pin score (0–100), expected move to settlement, its share of the name’s gamma and the dealer hedge for ±0.5% and ±1%. - get_hedge_flow: What dealers would buy or sell to stay hedged if spot moved ±0.5, ±1 or ±2% (shares and dollars, contracts repriced from their own IV), and the charm drift to the close. - get_exposure_by_expiry: GEX, DEX, VEX and CEX with open interest by expiry bucket (0dte, 1-7d, 8-30d, 31-90d, 91d+) and per expiry, in one call. - get_oi_changes: Open interest vs the previous close: totals by side, the strikes with the largest builds and unwinds, and the contracts that changed most. - get_exposure_profile: GEX, DEX, VEX or CEX by strike for a symbol and expiry. - get_vol_snapshot: ATM IV, IV rank, skew and the term structure shape (iv7 vs iv30, as in term-structure) in one call, with the front expected move. - get_flow: The session’s options flow: premium by side and the notable prints. - get_session_story: How the positioning changed through a session (today or any session since 2026-06-12), minute by minute, summarised; optionally for a window (start / end HH:MM). - compare_symbols: Side-by-side gamma positioning for up to 6 tickers: net GEX, zero gamma and walls vs spot (extra tickers are listed as not compared). For vol across names use get_bulk_snapshot with resource vol. - scan_universe: Screen every covered symbol by gamma (net GEX, distance to the flip, largest node), IV and IV rank, flow premium, what changed since the open or the previous close, realized vol vs IV, or gamma by expiry bucket. - get_sector_summary: Gamma, IV rank, IV vs realized vol and premium by sector across every covered symbol. - get_history: Past sessions for a symbol (from June 2026 onward): each session’s close, one request per 10 sessions returned; or the same minute of each session (minute = HH:MM, up to 20 sessions), one request per session. - find_symbols: Look up covered tickers by name or sector. - get_quantedflow: quantedFlow for one symbol: qualifying premium by side, flow over the last 5/30/60 minutes, top strikes. - get_flow_signals: The quantedFlow Flow Signals board across all names. - get_flow_premium: Names ranked by quantedFlow premium, today or over the last 5 sessions. - get_term_structure: ATM IV, expected move and 25-delta risk reversal per expiry. - get_bulk_snapshot: Levels, vol, flow or quantedFlow for up to 50 symbols at once (one request per symbol). - get_vol_surface: The implied volatility surface (strikes × expiries) for a symbol at any minute: IV at fixed distances from spot per expiry, the ±5% skew and the constant-maturity ATM IVs; the structured answer carries every point. - get_account: Your plan, requests used and remaining today, when the quota resets, the rate limit and how fresh the data is. Free (not counted). ### Resources (free) - quantedoptions://docs/fields (Field reference): Every field the tools return (levels, exposures, vol, flow, quantedFlow, screener, sector summary) with its definition and unit. - quantedoptions://docs/methodology (Methodology): How GEX, DEX, VEX and CEX, walls, zero gamma, the gamma flip, IV, IV rank, realized vol and quantedFlow are computed. - quantedoptions://docs/limits (Limits and costs): Daily quota, rate limit, what each tool call costs, fair-use and credential rules. - quantedoptions://coverage (Coverage): Universe size, capture cadence, history start and current data freshness. ### Prompts (free) - morning_gamma_brief(symbols?): Levels, gamma regime and the change since the prior close for a watchlist (default SPY, QQQ, IWM and the largest names). - negative_gamma_near_flip(sector?): Names in negative gamma trading within about 2% of their zero-gamma flip. - high_iv_rank_screen(min_rank? (70), regime?): IV rank screen with skew and term structure context. - unusual_flow_today(dte?): quantedFlow signals and premium leaders, each with its gamma context. - symbol_deep_dive(symbol): Levels, exposure by strike, vol, term structure, flow and the session story for one name. - what_changed_since_open(symbol): The session story and the levels now versus the open. - compare_watchlist(symbols): Gamma positioning and vol side by side for a list of tickers. - sector_overview(): The market-wide screen grouped by sector: regime, flip distance, IV rank and flow. ## REST endpoints Base URL: https://api.quantedoptions.com. All GET, all JSON. Tables come as fields + data (rows as arrays). ### GET /v1/ticker/{symbol}/levels Key levels at a minute: call and put walls (largest positive / most negative net GEX strike, either side of spot), gamma walls (call-only / put-only), zero gamma, the gamma flip the quantedTrader page draws, the regime, and the largest gamma nodes with their distance from spot. From 2026-10-05 also: max pain (the strike where the book’s open contracts would pay the least at settlement) and the highest call / put / total open interest strikes; hedge_flow, the shares and dollars dealers would trade to stay hedged for spot moves of ±0.5, ±1 and ±2% (each contract’s delta repriced at the moved spot from its own IV; dealers long calls and short puts as in GEX; negative = dealers sell, positive = buy) plus the charm drift to the 16:00 close (−CEX × minutes left / 1440); and front, the front expiry’s magnet (largest |net GEX| strike), max pain, pin score (0–100: net GEX within ±1% of spot ÷ the front expiry’s gross |net GEX|, floored at 0), share of the name’s gamma and 1-sigma expected move to settlement. Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). - expiry (string): "all" (default), "0dte" (alias "front"), "allx0" (all but the front expiry) or an expiry date YYYY-MM-DD listed for that symbol and minute. "0dte" / "front" is the front expiry: the nearest listed expiry on or after the session date, so it is a true 0DTE only for names with a daily expiry (SPX, SPY, QQQ, IWM); /levels names it in front_expiry. Named books are case-insensitive; anything else is a 400, an unlisted date a 404 with the listed ones. - minute (HH:MM): A single minute (ET), for today or any session since 2026-06-12. Default: the latest minute: the newest published capture of the 16:00 minute or earlier (a few seconds after each minute, at most 5 minutes behind; after the close, 16:00). A minute that was not captured answers 404 with the nearest minutes; a past minute costs one request like any other. ### GET /v1/ticker/{symbol}/exposure-buckets GEX, DEX, VEX and CEX with call / put open interest by expiry bucket (0dte, 1-7d, 8-30d, 31-90d, 91d+: calendar days from the session date to expiry) and for every listed expiry, in one call, plus the front expiry’s share of gamma. Buckets sum to the totals up to rounding. Sessions from 2026-10-05 (earlier dates answer 404 with available_from). Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). - minute (HH:MM): A single minute (ET), for today or any session since 2026-06-12. Default: the latest minute: the newest published capture of the 16:00 minute or earlier (a few seconds after each minute, at most 5 minutes behind; after the close, 16:00). A minute that was not captured answers 404 with the nearest minutes; a past minute costs one request like any other. ### GET /v1/ticker/{symbol}/oi-changes Open interest now vs the previous session’s close: call / put totals and changes, the strikes with the largest builds and unwinds (every live expiry summed) and the contracts that changed the most. Contracts that expired since are reported apart (expired_oi), not as unwinds. Open interest is settled once a day before the open: until it is published (early premarket) oi_updated is false and changes read 0. Sessions from 2026-10-05 (earlier dates answer 404 with available_from). Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). - minute (HH:MM): A single minute (ET), for today or any session since 2026-06-12. Default: the latest minute: the newest published capture of the 16:00 minute or earlier (a few seconds after each minute, at most 5 minutes behind; after the close, 16:00). A minute that was not captured answers 404 with the nearest minutes; a past minute costs one request like any other. ### GET /v1/ticker/{symbol}/exposures GEX, DEX, VEX or CEX (gamma, delta, vanna, charm exposure) by strike (calls, puts, net), every minute. Dollars; units and signs under Definitions. Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. - metric (string, required): "gex", "dex", "vex" or "cex". - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). - expiry (string): "all" (default), "0dte" (alias "front"), "allx0" (all but the front expiry) or an expiry date YYYY-MM-DD listed for that symbol and minute. "0dte" / "front" is the front expiry: the nearest listed expiry on or after the session date, so it is a true 0DTE only for names with a daily expiry (SPX, SPY, QQQ, IWM); /levels names it in front_expiry. Named books are case-insensitive; anything else is a 400, an unlisted date a 404 with the listed ones. - minute (HH:MM): A single minute (ET), for today or any session since 2026-06-12. Default: the latest minute: the newest published capture of the 16:00 minute or earlier (a few seconds after each minute, at most 5 minutes behind; after the close, 16:00). A minute that was not captured answers 404 with the nearest minutes; a past minute costs one request like any other. - band (number): Strikes within ± this fraction of spot: 0.02, 0.05, 0.1 or 0.2. Default: every strike. ### GET /v1/ticker/{symbol}/surface Implied volatility surface: IV by strike and expiry, skew and term structure. Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). - minute (HH:MM): A single minute (ET), for today or any session since 2026-06-12. Default: the latest minute: the newest published capture of the 16:00 minute or earlier (a few seconds after each minute, at most 5 minutes behind; after the close, 16:00). A minute that was not captured answers 404 with the nearest minutes; a past minute costs one request like any other. - max_expiries (number): 12 (default), 24 or 60. - band (number): Strikes within ± this fraction of spot: 0.1, 0.2 (default) or 0.5. ### GET /v1/ticker/{symbol}/iv-rank IV rank and IV percentile with the ATM implied volatility they are computed from. Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). ### GET /v1/ticker/{symbol}/flow Options flow: premium and volume by side, unusual prints, call/put balance through the session. Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). - expiry (string): "all" (default), "0dte" (alias "front"), "allx0" (all but the front expiry) or an expiry date YYYY-MM-DD listed for that symbol and minute. "0dte" / "front" is the front expiry: the nearest listed expiry on or after the session date, so it is a true 0DTE only for names with a daily expiry (SPX, SPY, QQQ, IWM); /levels names it in front_expiry. Named books are case-insensitive; anything else is a 400, an unlisted date a 404 with the listed ones. - minute (HH:MM): A single minute (ET), for today or any session since 2026-06-12. Default: the latest minute: the newest published capture of the 16:00 minute or earlier (a few seconds after each minute, at most 5 minutes behind; after the close, 16:00). A minute that was not captured answers 404 with the nearest minutes; a past minute costs one request like any other. - window (minutes): Look-back window for the premium split and top contracts: 5, 15 (default), 30 or 60. ### GET /v1/ticker/{symbol}/timeline Minute-by-minute series for the session: spot, net GEX, net DEX and session call / put premium (fields ts, spot, gex, dex, call_prem, put_prem). Levels at any minute: /levels with date and minute (or the get_session_story tool). Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). ### GET /v1/ticker/{symbol}/signals quantedFlow for one symbol: the contracts trading above their open interest (at least 500 contracts) at the latest scan, their premium by side, the dollars traded in the last 5, 30 and 60 minutes, and the top strikes. Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). - timestamp (HH:MM): The latest quantedFlow scan at or before this minute (ET), on date (default: today). Alias: minute. Default: the latest scan. - limit (number): Signals listed: 10, 25 (default), 50, 100 or 200. ### GET /v1/flow/signals The quantedFlow Flow Signals board across all names: 50 contracts, at most 2 per ticker, index names excluded, ranked by volume / open interest, premium or the volume added in the latest scan. Each row also compares that latest burst with the contract’s own pace over the previous 30 minutes. Parameters: - sort (string): "voi" (default), "premium" or "delta_vol". - dte (string): "all" (default), "0", "7", "30", "90" or "90p". - sector (string): Sector slug: comm, cons_disc, cons_stap, energy, fin, health, industrial, materials, realestate, tech or utilities. - baseline (boolean): true (default) adds each row’s pace over the previous 30 minutes. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). - timestamp (HH:MM): The latest quantedFlow scan at or before this minute (ET), on date (default: today). Alias: minute. Default: the latest scan. ### GET /v1/flow/premium Names ranked by quantedFlow premium: today, the last 5 sessions, or the dollars traded in the last hour. Parameters: - period (string): "day" (default) or "week". - metric (string): "premium" (default) or "flow_1h" (day only). - side (string): "all" (default), "C" or "P". - limit (number): 10, 25 (default), 50, 100, 250, 500 or 1000 names. - include_index (boolean): false (default) keeps index names out. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). - timestamp (HH:MM): The latest quantedFlow scan at or before this minute (ET), on date (default: today). Alias: minute. Default: the latest scan. With period "week" it sets the last session’s scan; the 4 earlier sessions count their last scan. ### GET /v1/screen Screen every covered symbol from a snapshot refreshed every minute: net GEX, distance to zero gamma, walls and the largest node, IV, IV rank, skew (wings failing the sanity check read null), term slope, session premium and quantedFlow premium. What changed: net GEX vs the open (first capture at or after 09:30 ET) and vs the previous close in dollars and %, whether spot crossed the zero-gamma flip since the open, wall moves since the open and the previous close’s walls. Realized vol (rv10, rv20 from session closes: our /history closes, else the daily IV history’s; rv_source says which) and iv_rv_spread (iv30 − rv20). Gamma by expiry: front, within 7 days (net_gex_week), later, and the front expiry’s share. Front expiry and open interest: max_pain_front and max_pain_dist_pct, pin_score (0–100), oi_chg_total and oi_chg_pct (open interest vs the previous close). Parameters: - filter (string): Comma-separated conditions, e.g. "iv_rank>=80,net_gex<0,sector=tech" or "flip_crossed_today=above_to_below,iv_rv_spread>0.05". Operators >= <= > < = !=; every numeric field is filterable. String fields take = or !=: sector, type, regime, spot_vs_flip, spot_vs_flip_open (above | below), flip_crossed_today (above_to_below | below_to_above | none), rv_source (history | ivhistory | mixed). - sort (string): Field to rank by (default net_gex), e.g. net_gex_chg_open, net_gex_chg_prev_pct, rv20, iv_rv_spread, gex_0dte_share. /v1/screen?describe=true lists every field and its definition. - order (string): "desc" (default) or "asc". - limit (number): 1–500, default 50. - date (YYYY-MM-DD): A past session (or today with timestamp): the screen as stored then. Stored on the hour 10:00–15:00 ET and at the 16:00 close; without timestamp a past date is its close. The body’s as_of names the stored snapshot. Default: the live screen. - timestamp (HH:MM): With date (default: today): the latest stored snapshot at or before this minute (ET). Alias: minute. None stored then: 404 with the times stored that day. ### GET /v1/screen/sectors The same snapshot summarised by sector (ETFs and indexes as their own buckets): names, total and median net GEX, share of names in negative gamma, median IV rank, median iv_rv_spread, session call / put premium and quantedFlow premium. Sorted by total net GEX; describe=true lists the fields. Parameters: - date (YYYY-MM-DD): A past session (or today with timestamp): the screen as stored then. Stored on the hour 10:00–15:00 ET and at the 16:00 close; without timestamp a past date is its close. The body’s as_of names the stored snapshot. Default: the live screen. - timestamp (HH:MM): With date (default: today): the latest stored snapshot at or before this minute (ET). Alias: minute. None stored then: 404 with the times stored that day. ### GET /v1/ticker/{symbol}/term-structure Per expiry: ATM IV, the 1-sigma expected move and range, and the 25-delta risk reversal, skew and butterfly; the shape (iv7 vs iv30); wings dropped by the sanity check are listed in dropped_wings. Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). - minute (HH:MM): A single minute (ET), for today or any session since 2026-06-12. Default: the latest minute: the newest published capture of the 16:00 minute or earlier (a few seconds after each minute, at most 5 minutes behind; after the close, 16:00). A minute that was not captured answers 404 with the nearest minutes; a past minute costs one request like any other. - max_expiries (number): 6, 12, 24 (default) or 60. ### GET /v1/ticker/{symbol}/history One row per session (its last capture at or before 16:00 ET; market holidays are not sessions): spot, net GEX and DEX, zero gamma, walls, largest node, IV30, skew, IV rank and premium by side (walls as in /levels: largest positive / most negative net GEX strike). zero_gamma starts 2026-09-08 (earlier captures carry no per-contract IV); before that IV30, skew and IV rank come from the daily IV history. When the last row is today’s session still in progress, "partial" names its date (else null). Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. - start (YYYY-MM-DD): First session. - end (YYYY-MM-DD): Last session (start after end is a 400). - limit (number): 1–120 sessions, default 20. Counts one request per 10 sessions returned (rounded up). ### GET /v1/ticker/bulk Levels, exposures, vol, flow or quantedFlow signals for up to 50 symbols in one call, with a result or an error per symbol. Counts as one request per symbol. Parameters: - resource (string, required): "levels", "exposures", "vol", "flow" or "signals". - symbols (string, required): Up to 50 comma-separated tickers. - date (YYYY-MM-DD): Session date (ET). Default: the current or most recent session. Every session from 2026-06-12 on, minute by minute (with minute / timestamp); without a minute a past date returns that session’s close (its last capture of the 16:00 minute). - expiry (string): "all" (default), "0dte" (alias "front"), "allx0" (all but the front expiry) or an expiry date YYYY-MM-DD listed for that symbol and minute. "0dte" / "front" is the front expiry: the nearest listed expiry on or after the session date, so it is a true 0DTE only for names with a daily expiry (SPX, SPY, QQQ, IWM); /levels names it in front_expiry. Named books are case-insensitive; anything else is a 400, an unlisted date a 404 with the listed ones. - metric (string): exposures: "gex" (default), "dex", "vex" or "cex". - band (number): exposures: 0.02, 0.05, 0.1 (default) or 0.2. - window (minutes): flow: 5, 15 (default), 30 or 60. - limit (number): signals: 10 (default), 25, 50, 100 or 200. ### GET /v1/ticker/search Find covered symbols by ticker, company name or sector; each match has symbol, name, sector, sector_label and type. Parameters: - q (string): Ticker or name. - sector (string): Sector slug or name. ### GET /v1/ticker/universe Every covered symbol (5,000+ US stocks & ETFs); with detail=true, its name, type (stock, adr, etf, etn, fund or index; null when unknown), sector, first available date and latest capture. Parameters: - detail (boolean): true adds name, type, sector, first and latest capture per symbol. ### GET /v1/status Service status, read from the reference symbol SPY: the latest session, its last published minute, lag and the history stored. Your remaining quota is in every response's X-Quota-Remaining header. ### GET /v1/ticker/status The same service status (reference SPY), plus when the screener snapshot was last built. For one symbol’s freshness use /v1/ticker/{symbol}/status. ### GET /v1/ticker/{symbol}/status One symbol’s freshness: its latest session, last published minute, lag in minutes and the sessions stored. Parameters: - symbol (path, required): Ticker, e.g. NVDA, SPY, SPX. See /v1/ticker/universe. ## quantedTrader methodology How the numbers in the quantedTrader API and MCP server are computed. They are the same numbers the quantedOptions website draws. Everything is precomputed once per capture (every minute for the most active names) and served as stored; nothing is recalculated per request. ### Inputs - **Options chains** for every covered US stock and ETF, captured through the session from options market data: per contract the open interest, the day's volume and volume-weighted price, the quote, the implied volatility and the delta and gamma. - **Open interest** is the settled figure the exchanges publish once a day (the previous session's close). It does not change intraday, so exposure levels move during the session with spot and implied volatility, not with new positions. Intraday positioning shows up in volume and in quantedFlow (below). - **Vanna and charm** are computed per contract with Black-Scholes from that contract's implied volatility. - Session times are US/Eastern. The regular session is 09:30 to 16:00 ET; captures also run before the open. ### Dealer exposures (GEX, DEX, VEX, CEX) Each exposure is a sum over every contract of the book: the per-contract greek x open interest x 100 shares, scaled to dollars. Signs follow the dealer convention used across quantedOptions: call exposure is counted positive and put exposure negative. | Exposure | Per contract | Unit | |---|---|---| | GEX (gamma) | gamma x OI x 100 x spot^2 x 0.01 | dollars of delta change per 1% move in the underlying | | DEX (delta) | delta x OI x 100 x spot | dollars of underlying (natural delta sign: calls +, puts -) | | VEX (vanna) | vanna x OI x 100 x spot x 0.01 | dollars of delta change per 1 vol point | | CEX (charm) | charm x OI x 100 x spot / 365.25 | dollars of delta change per day | Net = calls + puts at a strike (or over the book). Per-strike tables give net, call and put side by side. DEX counts every open contract including deep in-the-money ones, so its level is dominated by deep ITM open interest on some names. Read its change through the session rather than its level. **Books.** `all` = every listed expiry; `0dte` (alias `front`) = the front expiry, the nearest listed expiry on or after the session date (a true same-day expiry only for names with daily expiries); `allx0` = all but the front expiry; or one expiry date. ### Levels - **Call wall**: the strike with the largest positive net GEX in the book. - **Put wall**: the strike with the most negative net GEX. Walls are not tied to a side of spot: a put wall can sit above price when put gamma dominates there. Null when the book has no positive (or no negative) strike. - **Gamma walls** (`gamma_call_wall`, `gamma_put_wall`): the strikes with the largest call-only and the most negative put-only GEX. - **Zero gamma**: the price at which the total gamma of the chain crosses zero when every contract is repriced at that hypothetical spot with its own implied volatility and open interest. We search within +/-15% of spot and keep the crossing nearest spot. When gamma keeps one sign across that range, zero gamma is null and `zero_gamma_note` says why. - **Gamma flip**: walk the strikes in price order, find neighbouring strikes whose net GEX changes sign, interpolate between them and keep the crossing nearest spot. It is a local level on the strike ladder (the one the quantedTrader page draws), not a regime boundary. Null beyond 15% of spot, with `gamma_flip_note`. - **Top nodes**: the strikes with the largest absolute net GEX, with their distance from spot in %. - **Regime**: `sign` is the sign of net GEX summed over the whole book; `spot_vs_zero_gamma` says whether spot is above or below zero gamma. They usually agree; when they do not (the book is close to its crossing) `note` says so. Reading the levels: positive net gamma means dealer hedging tends to lean against moves (buy dips, sell rips); negative means hedging tends to add to them. The largest nodes are where that hedging is concentrated. These are descriptions of positioning, not forecasts. ### Open interest levels, pin and hedge (sessions from 2026-10-05) - **Max pain**: for each strike K* of the book, the intrinsic value every open contract would pay if the underlying settled at K*: call OI x max(0, K* - K) + put OI x max(0, K - K*), summed over the strikes. Max pain is the strike where that total is smallest (ties: the lower strike). It is most often read on the front expiry (`front.max_pain`); the `all` book's value sums every expiry. - **Highest open interest**: the strikes with the most call, put and call + put open interest in the book. - **Magnet**: the front expiry's strike with the largest absolute net GEX. - **Pin score** (front expiry, 0 to 100): the net GEX of the strikes within 1% of spot (always including the strike nearest spot) divided by the sum of absolute net GEX over every strike of the front expiry, x 100, floored at 0. High when dealers are long gamma close to price (hedging tends to hold price near those strikes into expiry); 0 when they are net short gamma there (hedging tends to push price away) or when the front expiry has no gamma. - **Dealer hedge** (`hedge_flow`): for spot moves of -2, -1, -0.5, +0.5, +1 and +2%, the shares dealers would trade to stay delta-hedged, and their value at the moved price. Dealers are taken to be long the calls and short the puts (the same convention as GEX). Each contract's delta is repriced at the moved spot with its own implied volatility (the same repricing as zero gamma); a contract without an IV moves with its own GEX. Negative = dealers sell, positive = dealers buy. For a small move the dollar figure is close to minus net GEX x the move in %; for larger moves it bends with the gamma profile (a same-day expiry's delta cannot move by more than it has left). - **Charm to the close**: the book's CEX (dollars of delta change per day) x the minutes left to 16:00 ET / 1440: the hedge time decay alone implies by the close at the current rate (negative = dealers sell). - **Expected move to settlement** (front expiry): spot x ATM IV x sqrt(time to settlement) on the clock the IV is quoted on; null before 09:30 ET (premarket quotes are stale) and after the front expiry settles. - **Exposure by expiry**: each listed expiry's own GEX / DEX / VEX / CEX and open interest, and their sums in buckets by calendar days from the session date to expiry: 0dte (0), 1-7d, 8-30d, 31-90d, 91d+. - **Open interest change**: each contract's open interest now minus at the previous session's close capture, over the contracts that have not expired (a new contract counts from 0). Contracts that expired since are reported apart (`expired_oi`), not as unwinds. The settled figure is published once a day before the open: until then (early premarket captures) `oi_updated` is false and every change reads 0. ### Implied volatility - **ATM IV** per expiry: the mean of the call and put IV at the strike nearest spot, when that strike is within 3% of spot. - **Constant-maturity IV** (7, 14, 30, 60, 90 days): interpolated linearly in total variance (IV^2 x time) between the listed expiries that bracket the maturity; expiries under one day are left out. - **25-delta wings**: the IVs where |delta| = 0.25 on the call and put side (linear in delta between the two bracketing strikes). Risk reversal RR25 = call25 - put25 (negative when puts are richer); skew25 = put25 - call25; butterfly BF25 = (call25 + put25) / 2 - ATM IV. A wing more than 3x or less than a third of its expiry's ATM IV is treated as a bad quote: it reads null and is listed in `dropped_wings`. - **Term-structure shape**: 7-day against 30-day constant-maturity IV. Inverted when iv7 > 1.02 x iv30, upward when iv7 < 0.98 x iv30, flat in between. - **Expected move** (1 sigma) per expiry = spot x ATM IV x sqrt(days to expiry / 365); the range is spot +/- that amount. It comes from ATM IV, not from the straddle price. - **Surface**: IV per (expiry, strike) for strikes within a band around spot, as stored with the capture. - **IV rank**: (iv30 - low) / (high - low) x 100 over the previous 252 sessions with today's iv30 included in the low and high (0 to 100). **IV percentile**: the share of those sessions with a lower iv30. Both are null with fewer than 20 sessions of history. - **Before the open** the options are not trading, so vol answers use the previous session's close capture and say so (`vol_asof`). ### Realized volatility - **rv10 / rv20**: the standard deviation of the last 10 (20) daily log returns of session closes, x sqrt(252), in the same decimal unit as iv30 (0.25 = 25%). The window starts after the symbol's latest corporate action; null without enough consecutive closes. `rv_source` says where the closes came from. - **iv_rv_spread** = iv30 - rv20: positive when implied volatility is above realized. ### Flow - **Session premium** by side: volume x volume-weighted price x 100, summed over every contract, from 09:30 ET. Before the open it is 0. - **Window flow** (`get_flow`): premium and contracts traded over the last 5, 15, 30 or 60 minutes, and the largest contracts in that window. ### quantedFlow quantedFlow scans the options market through the session for contracts trading above their open interest. - **Qualifying set**: contracts whose volume today is at least their open interest and at least 500 contracts. - **Qualifying premium**: volume x mid x 100 summed over the qualifying set at a scan. It measures how big that set is today. - **Flow** (5, 30, 60 minutes): the volume each qualifying contract added since the previous scan x mid x 100, summed over the scans inside the window. It tells you when the money traded: use flow for timing, premium for size. - **Flow Signals board**: contracts ranked by volume / open interest, premium or the volume added in the latest scan, at most 2 per ticker, index names kept off the cross-name board. `size_vs_baseline` is the volume a contract added in the latest scan divided by its average per-scan addition over the previous 30 minutes. ### What changed (screener) "The open" is the session's first capture at or after 09:30 ET. Net GEX changes compare the book's total GEX now with the open and with the previous session's close (dollars and %; the % is null when the base is near zero). Wall moves are strike changes since the open. `flip_crossed_today` says whether spot crossed zero gamma since the open. ### History Every session from 2026-06-12 is stored minute by minute; a past date without a minute answers that session's close (its last capture of the 16:00 minute). Daily rows (`/history`) carry each session's close. Zero gamma in daily rows starts 2026-09-08. ## quantedTrader fields Units: exposures are dollars (not millions). IVs, realized vols and skews are decimals (0.25 = 25%, 0.01 = 1 vol point). Distances `*_dist_pct` are percent of spot ((level / spot - 1) x 100). Times are HH:MM US/Eastern, dates YYYY-MM-DD (the ET session date). Tables come as `fields` (column names) + `data` (rows). How each number is computed: quantedoptions://docs/methodology. ### Every per-symbol answer | Field | Meaning | |---|---| | symbol | Ticker | | date | Session date (ET) | | ts | Capture minute HH:MM ET | | published_at | When that capture was published (ISO, ET offset) | | live | True when the session is today's | | spot | Underlying price at the capture (2 decimals) | | corporate_action | Present around a split or similar action: answers before it describe another share count | | data_as_of | (MCP structured output) date, time, live, lag_minutes, basis of the answer | ### Levels (get_levels, /levels) | Field | Meaning | Unit | |---|---|---| | expiry | Book: all, 0dte (front expiry), allx0 (all but the front) or an expiry date | | | front_expiry | The nearest listed expiry on or after the session date | date | | call_wall | Strike with the largest positive net GEX | price | | put_wall | Strike with the most negative net GEX (can sit above spot) | price | | gamma_call_wall / gamma_put_wall | Strikes with the largest call-only / most negative put-only GEX | price | | zero_gamma | Price where the repriced total gamma crosses zero (nearest crossing within 15% of spot) | price or null | | zero_gamma_note | Why zero_gamma is null | text | | gamma_flip | Nearest sign change of net GEX on the strike ladder (interpolated) | price or null | | gamma_flip_note | Why gamma_flip is null | text | | regime.sign | Sign of net GEX over the book: positive, negative or zero | | | regime.spot_vs_zero_gamma | above or below zero gamma | | | regime.note | Set when the sign and the side of zero gamma disagree | text | | totals.gex | Net gamma exposure of the book | $ per 1% move | | totals.dex | Net delta exposure | $ of underlying | | totals.vex | Net vanna exposure | $ per vol point | | totals.cex | Net charm exposure | $ per day | | top_nodes | strike, gex ($ per 1%), dist_pct for the largest absolute net GEX strikes | table | | max_pain / max_pain_dist_pct | Strike where the book's open contracts would pay the least at settlement; its distance from spot | price, % | | highest_oi.call / put / total | Strike with the most call, put and call + put open interest in the book | price | | hedge_flow | move_pct, spot (moved), hedge_shares, hedge_usd for moves of -2, -1, -0.5, +0.5, +1, +2 %: what dealers would trade to stay hedged (negative = sell, positive = buy) | shares, $ | | hedge_flow.charm_to_close | minutes to 16:00 ET and the hedge implied by the book's charm over them | minutes, $ | | front | The front expiry, the same in every book's answer: see below | | Sessions from 2026-10-05 on carry the fields from max_pain down; earlier captures do not have them. ### Front expiry (get_0dte, /levels `front`) | Field | Meaning | Unit | |---|---|---| | expiry, dte | The front expiry and its calendar days from the session date (0 = same day) | date, days | | magnet, magnet_gex, magnet_dist_pct | The front expiry's strike with the largest absolute net GEX | price, $ per 1%, % | | max_pain, max_pain_dist_pct | Max pain of the front expiry alone | price, % | | pin_score | 0..100: net GEX within 1% of spot / the front expiry's gross gamma, floored at 0 | score | | pin_net_gex, gross_gex | The two sums behind pin_score | $ per 1% | | gex_share | The front expiry's share of the name's gamma (same as the screener's gex_0dte_share) | 0..1 | | atm_iv | ATM IV of the front expiry (strike nearest spot, within 3%) | decimal | | expected_move, expected_move_pct | 1 sigma move to the front expiry's settlement implied by that IV; null before 09:30 ET | $, % | | minutes_to_settle | Minutes from the capture to 16:00 ET on the front expiry | minutes | ### Exposure by expiry (get_exposure_by_expiry, /exposure-buckets) | Field | Meaning | Unit | |---|---|---| | buckets | bucket (0dte, 1-7d, 8-30d, 31-90d, 91d+ calendar days from the session date to expiry), expiries, gex, dex, vex, cex, call_oi, put_oi | table | | expiries | expiry, dte, bucket, gex, dex, vex, cex, call_oi, put_oi for every listed expiry | table | | totals | gex, dex, vex, cex of every expiry together (the buckets sum to it up to rounding) | | | gex_front_share | The front expiry's share of gamma (front vs other expiries within 7 days vs later) | 0..1 | ### Open interest change (get_oi_changes, /oi-changes) | Field | Meaning | Unit | |---|---|---| | prev_date, prev_ts | The previous session and its close capture: the baseline | date, HH:MM | | oi_updated | false until the session's settled open interest is published (before the open): changes read 0 then | | | totals | call_oi, put_oi, prev_call_oi, prev_put_oi, call_chg, put_chg, net_chg, net_chg_pct over contracts that have not expired; expired_oi = open interest of contracts that expired since; missing_contracts | contracts, % | | builds / unwinds | strike, chg, call_chg, put_chg, oi: the strikes with the largest increase / decrease (every live expiry summed) | table | | top_contracts | expiry, strike, cp, prev_oi, oi, chg: the contracts with the largest change | table | ### Exposures by strike (get_exposure_profile, /exposures) | Field | Meaning | Unit | |---|---|---| | metric | gex, dex, vex or cex | | | total | The metric summed over the whole book | metric unit | | data | strike, net, call, put | metric unit | | sum_above_spot / sum_at_or_below_spot | (MCP) net metric summed over the band's strikes above / at or below spot | metric unit | ### Volatility (get_vol_snapshot, get_term_structure, get_vol_surface, /term-structure, /iv-rank, /surface) | Field | Meaning | Unit | |---|---|---| | constant_maturity_iv | ATM IV at 7, 14, 30, 60, 90 days | decimal | | skew25_30d | put25 - call25 on the expiry nearest 30 days | decimal vol points | | shape | inverted / upward / flat (iv7 vs iv30) | | | expiries[].dte | Calendar days to settlement | days | | expiries[].atm_iv | ATM IV of the expiry | decimal | | expiries[].call25_iv / put25_iv | 25-delta wing IVs | decimal | | expiries[].expected_move | 1 sigma = spot x atm_iv x sqrt(dte / 365) | $ | | expiries[].expected_move_pct | The same in % of spot | % | | expiries[].range_low / range_high | spot -/+ expected_move | price | | expiries[].rr25 | call25 - put25 (negative = puts richer) | decimal vol points | | expiries[].skew25 | put25 - call25 | decimal vol points | | expiries[].bf25 | (call25 + put25) / 2 - atm_iv | decimal vol points | | dropped_wings | Wings dropped as bad quotes | list | | vol_asof | Before 09:30 ET: the previous close the vols come from | {date, ts} | | iv30 | 30-day constant-maturity ATM IV | decimal | | iv_rank | (iv30 - low) / (high - low) x 100 over the prior 252 sessions | 0..100 | | iv_percentile | Share of the prior 252 sessions with a lower iv30 | 0..100 | | history_days | Sessions behind iv_rank | count | | surface data | expiry, strike, iv | decimal IV | | grid | (MCP) IV at the strike nearest -20 .. +20% of spot per expiry | decimal | ### Flow (get_flow, /flow) | Field | Meaning | Unit | |---|---|---| | window_minutes, window_from, window_to | The look-back window | minutes, HH:MM | | call_premium / put_premium / net_premium | Premium traded in the window (volume x price x 100) | $ | | call_contracts / put_contracts | Contracts traded in the window | count | | top_contracts | expiry, strike, cp, contracts, premium | table | | session | Session totals so far: call / put premium and volume | $, count | ### quantedFlow (get_quantedflow, get_flow_signals, get_flow_premium, /signals, /flow/signals, /flow/premium) | Field | Meaning | Unit | |---|---|---| | scan_started_at / scan_date | The quantedFlow scan the answer is from | ISO time, date | | qualifying.call_premium / put_premium | Today's premium of the qualifying set (volume >= OI, >= 500 contracts) | $ | | qualifying.call_share | Call share of qualifying premium | 0..1 | | qualifying.call_contracts / put_contracts | Qualifying contracts by side | count | | flow_windows.{5m,30m,60m}.call_flow / put_flow / net_flow | Dollars traded in qualifying contracts in the window (volume added x mid x 100) | $ | | top_strikes | strike, side, premium, volume, expiries | table | | signals | contract, expiry, strike, side, day_vol, oi, vol_oi, premium_dollars, mid, iv, delta, delta_vol | table | | day_vol, oi, vol_oi | Board row: day volume, open interest, volume / open interest | count, ratio | | premium_dollars | Board row: day premium of the contract | $ | | delta_vol | Volume added in the latest scan | count | | size_vs_baseline | Latest addition / average per-scan addition over the previous 30 minutes | ratio | | names[].premium, call_share | Premium ranking: premium ($) and call share (0..1) | | ### History (get_history, /history) One row per session (its last capture at or before 16:00 ET): date, close_ts, spot, net_gex ($ per 1%), net_dex ($), zero_gamma, call_wall, put_wall, top_node, iv30, skew25, iv_rank, iv_percentile, call_premium, put_premium ($). `partial` names today's date while its row is still in progress. zero_gamma starts 2026-09-08. ### Status (get_account freshness, /status) | Field | Meaning | |---|---| | date, last_ts | Latest session and its last published minute (reference symbol) | | lag_minutes | Minutes since that minute (today's session) | | history_from, sessions | First stored session and the count | | symbol_count | Covered symbols | | universe_snapshot.built_at | When the screener snapshot was last built | The screener's full field list with definitions: GET https://api.quantedoptions.com/v1/screen?describe=true (or the MCP resource quantedoptions://docs/fields). Answers describe positioning and data; they are not investment advice.