{"openapi":"3.1.0","info":{"title":"OptionWhales Pro API","description":"Premium API for intent flow, momentum, abnormal trades, earnings intelligence, economic events, directional scores, GEX, dark pool, implied-volatility analytics, open interest, and an MCP server for AI agents","version":"1.2.0"},"paths":{"/v1/flow/sessions":{"get":{"tags":["flow"],"summary":"Flow Sessions","description":"Available sessions list (Pro+ only).","operationId":"flow_sessions_v1_flow_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/flow/current":{"get":{"tags":["flow"],"summary":"Flow Current","description":"Current session intent rankings (Free: top 3 limited fields).","operationId":"flow_current_v1_flow_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/flow/{session}":{"get":{"tags":["flow"],"summary":"Flow Session","description":"Session-level rankings (Free: top 3 limited fields).","operationId":"flow_session_v1_flow__session__get","parameters":[{"name":"session","in":"path","required":true,"schema":{"type":"string","title":"Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/flow/{session}/{ticker}":{"get":{"tags":["flow"],"summary":"Flow Session Ticker","description":"Full ticker intent detail — clusters, trades, time series (Pro+ only).","operationId":"flow_session_ticker_v1_flow__session___ticker__get","parameters":[{"name":"session","in":"path","required":true,"schema":{"type":"string","title":"Session"}},{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/momentum/rankings":{"get":{"tags":["momentum"],"summary":"Momentum Rankings","description":"Momentum-sorted ticker rankings (Free: top 3 limited fields).","operationId":"momentum_rankings_v1_momentum_rankings_get","parameters":[{"name":"top","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Top"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/momentum/{ticker}/history":{"get":{"tags":["momentum"],"summary":"Momentum Ticker History","description":"Multi-session momentum history for one ticker (Pro+ only).\n\nFetches the latest sessions and extracts the given ticker's momentum data.","operationId":"momentum_ticker_history_v1_momentum__ticker__history_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"sessions","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":5,"title":"Sessions"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/abnormal-trades/current":{"get":{"tags":["abnormal-trades"],"summary":"Abnormal Trades Current","description":"Current session abnormal trades (Free: last 5 with limited fields).","operationId":"abnormal_trades_current_v1_abnormal_trades_current_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/abnormal-trades/{session}":{"get":{"tags":["abnormal-trades"],"summary":"Abnormal Trades Session","description":"Historical session abnormal trades (Pro+ only).","operationId":"abnormal_trades_session_v1_abnormal_trades__session__get","parameters":[{"name":"session","in":"path","required":true,"schema":{"type":"string","title":"Session"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account/usage":{"get":{"tags":["account"],"summary":"Account Usage","description":"Current key usage stats.","operationId":"account_usage_v1_account_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/account/register":{"post":{"tags":["account"],"summary":"Account Register","description":"Get a FREE API key for the person an AI agent acts for.\n\nBody: ``{\"email\": \"...\", \"agent_name\": \"optional\"}``. The key in the response\nworks immediately for 24 hours; the person confirms it from the\n\"Confirm your OptionWhales API key\" email (link, or POST /v1/account/confirm\nwith the code), after which it is permanent.","operationId":"account_register_v1_account_register_post","requestBody":{"content":{"application/json":{"schema":{"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/account/confirm":{"post":{"tags":["account"],"summary":"Account Confirm","description":"Confirm a provisional key. Body: ``{\"code\": \"<code from the email>\"}``.","operationId":"account_confirm_v1_account_confirm_post","requestBody":{"content":{"application/json":{"schema":{"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/earnings/current":{"get":{"tags":["earnings"],"summary":"Earnings Current","description":"Current session earnings intelligence — all tickers with earnings today (Pro+ only).","operationId":"earnings_current_v1_earnings_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/earnings/sessions":{"get":{"tags":["earnings"],"summary":"Earnings Sessions","description":"List sessions with materialized earnings intelligence data (Pro+ only).","operationId":"earnings_sessions_v1_earnings_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/earnings/{session}/{ticker}":{"get":{"tags":["earnings"],"summary":"Earnings Session Ticker","description":"Full earnings detail for one ticker — orders, Greeks, scatter, abnormal trades (Pro+ only).","operationId":"earnings_session_ticker_v1_earnings__session___ticker__get","parameters":[{"name":"session","in":"path","required":true,"schema":{"type":"string","title":"Session"}},{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/earnings/{session}":{"get":{"tags":["earnings"],"summary":"Earnings Session","description":"Earnings intelligence for a specific session (Pro+ only).","operationId":"earnings_session_v1_earnings__session__get","parameters":[{"name":"session","in":"path","required":true,"schema":{"type":"string","title":"Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/economic/calendar":{"get":{"tags":["economic"],"summary":"Economic Calendar","description":"Economic events calendar with impact levels and ETF sensitivity metadata (Pro+ only).","operationId":"economic_calendar_v1_economic_calendar_get","parameters":[{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},{"name":"impact","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact"}},{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/economic/etf-flow/{symbol}":{"get":{"tags":["economic"],"summary":"Etf Flow Symbol","description":"Full option flow detail for one ETF — orders, Greeks, strike analysis (Pro+ only).","operationId":"etf_flow_symbol_v1_economic_etf_flow__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/economic/etf-flow":{"get":{"tags":["economic"],"summary":"Etf Flow","description":"ETF option flow summary for SPY, QQQ, IWM, TLT (Pro+ only).","operationId":"etf_flow_v1_economic_etf_flow_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/economic/etf-timeseries":{"get":{"tags":["economic"],"summary":"Etf Timeseries","description":"Multi-session ETF flow timeseries (Pro+ only).","operationId":"etf_timeseries_v1_economic_etf_timeseries_get","parameters":[{"name":"symbol","in":"query","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/economic/event-history":{"get":{"tags":["economic"],"summary":"Event History","description":"Historical actual vs consensus for a specific economic event series (Pro+ only).","operationId":"event_history_v1_economic_event_history_get","parameters":[{"name":"event_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Name"}},{"name":"time","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Time"}},{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}},{"name":"periods","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Periods"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/directional/current":{"get":{"tags":["directional"],"summary":"Directional Current","description":"Current session directional scores for all tickers (Pro+ only).\n\nFalls back to resolving the latest session via /intent/health if the\ndata-api does not expose /scatter/current directly.","operationId":"directional_current_v1_directional_current_get","parameters":[{"name":"max_display","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":10,"default":100,"title":"Max Display"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/directional/{ticker}/history":{"get":{"tags":["directional"],"summary":"Directional Ticker History","description":"Multi-session directional score history for one ticker (Pro+ only).","operationId":"directional_ticker_history_v1_directional__ticker__history_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"max_sessions","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":1,"default":30,"title":"Max Sessions"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/directional/{session}":{"get":{"tags":["directional"],"summary":"Directional Session","description":"Directional score snapshot for all tickers in a session (Pro+ only).","operationId":"directional_session_v1_directional__session__get","parameters":[{"name":"session","in":"path","required":true,"schema":{"type":"string","title":"Session"}},{"name":"max_display","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":10,"default":100,"title":"Max Display"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/gex/{ticker}/timeseries":{"get":{"tags":["gex"],"summary":"Gex Timeseries","description":"Multi-session GEX timeseries — gamma flip, max pain, net GEX trend (Pro+ only).","operationId":"gex_timeseries_v1_gex__ticker__timeseries_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End"}},{"name":"dte_filter","in":"query","required":false,"schema":{"type":"string","description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)","default":"all","title":"Dte Filter"},"description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/gex/{session}/{ticker}/levels":{"get":{"tags":["gex"],"summary":"Gex Levels","description":"Key GEX levels — spot, gamma flip, max pain, call wall, put wall (Pro+ only).\n\nDefinitions (data-api key levels v2, 2026-10-05): call wall = the strike\nat/above spot with the largest call gamma; put wall = the strike at/below\nspot with the largest put gamma; max pain = per expiration, headline struck\nfor the front expiry in the DTE filter (``max_pain_expiry``). ``wall_basis``\nand ``max_pain_basis`` state which definition each field carries; the\nlegacy readings ride along as ``net_call_wall`` / ``net_put_wall`` /\n``max_pain_blended``.","operationId":"gex_levels_v1_gex__session___ticker__levels_get","parameters":[{"name":"session","in":"path","required":true,"schema":{"type":"string","title":"Session"}},{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"dte_filter","in":"query","required":false,"schema":{"type":"string","description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)","default":"all","title":"Dte Filter"},"description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/gex/{session}/{ticker}/greek-exposure":{"get":{"tags":["gex"],"summary":"Gex Greek Exposure","description":"Second-order dealer greek exposure — gamma, charm AND vanna — decomposed\nby strike AND by expiry, split call/put (Pro+ only).\n\nEach ``by_strike`` / ``by_expiry`` row carries ``call_gex/put_gex/net_gex``\n(gamma $-exposure per 1% move), ``call_charm/put_charm/net_charm`` ($ per\nday of decay), ``call_vanna/put_vanna/net_vanna`` ($ per vol-point) and\n``call_oi/put_oi``. Pass ``include_strike_expiry=true`` for the full grid.","operationId":"gex_greek_exposure_v1_gex__session___ticker__greek_exposure_get","parameters":[{"name":"session","in":"path","required":true,"schema":{"type":"string","title":"Session"}},{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"dte_filter","in":"query","required":false,"schema":{"type":"string","description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)","default":"all","title":"Dte Filter"},"description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)"},{"name":"include_strike_expiry","in":"query","required":false,"schema":{"type":"boolean","description":"Also return the per-strike-per-expiry grid","default":false,"title":"Include Strike Expiry"},"description":"Also return the per-strike-per-expiry grid"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/gex/{session}/{ticker}/intraday-exposures":{"get":{"tags":["gex"],"summary":"Gex Intraday Exposures","description":"Intraday spot-GEX — net dealer gamma/charm/vanna recomputed at each intraday\nspot (minute bars), with OI/IV held fixed from the twice-daily snapshot. Shows\nhow dealer positioning evolves as price moves through the day (Pro+).\n\nReturns a ``series`` of ``{t, spot, net_gex, net_charm, net_vanna, call_gex,\nput_gex}`` plus a ``summary`` (open/last/min/max net_gex, contracts_used).","operationId":"gex_intraday_exposures_v1_gex__session___ticker__intraday_exposures_get","parameters":[{"name":"session","in":"path","required":true,"schema":{"type":"string","title":"Session"}},{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"dte_filter","in":"query","required":false,"schema":{"type":"string","description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)","default":"all","title":"Dte Filter"},"description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)"},{"name":"step_min","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"description":"Minutes between sampled spots","default":5,"title":"Step Min"},"description":"Minutes between sampled spots"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/gex/{session}/{ticker}/with-flow":{"get":{"tags":["gex"],"summary":"Gex With Flow","description":"GEX including option flow — the same computation the OptionWhales panel renders.\n\nPrefer this over ``GET /v1/gex/{session}/{ticker}`` when you want the numbers\nour dashboard shows. The two endpoints agree on ``structural_gex`` to the\ndollar but **not** on ``net_gex`` or ``key_levels``, because they differ on\none thing — flow:\n\n* ``/v1/gex/{session}/{ticker}`` is **structural only** on a past session\n  (``flow_included: false``, ``flow_gex: 0``).\n* this route adds flow on **every** session: reconstructed from that\n  session's archived large-order tape for a past date, and from the **live\n  streaming tape** for the current one.\n\nBecause ``key_levels`` (call wall, put wall, gamma flip, at-spot regime) are\nderived from ``structural + flow``, the flow difference moves the LEVELS too,\nnot just the totals — on SPY 2026-09-01 the call wall is 800 without flow and\n780 with it. If you alert on a level, read it from here.\n\nThe payload declares its own bases: ``summary.basis`` names the basis of\nevery money column, ``summary.key_levels_structural`` carries the\nstructural-only levels alongside the flow-inclusive ``summary.key_levels``,\nand ``summary.gamma_basis`` names the gamma model. ``summary.flow_source``\nreports where the flow came from (``computed_from_streaming`` /\n``computed_from_archive`` / ``historical_no_flow``) and\n``summary.flow_orders_count`` how many orders backed it.\n\nNote the flow tape is filtered at ingest to trades of **100+ contracts**, so\n``flow_gex`` reflects large-order flow, not the session's full volume.","operationId":"gex_with_flow_v1_gex__session___ticker__with_flow_get","parameters":[{"name":"session","in":"path","required":true,"schema":{"type":"string","title":"Session"}},{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"dte_filter","in":"query","required":false,"schema":{"type":"string","description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)","default":"all","title":"Dte Filter"},"description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/gex/{session}/{ticker}":{"get":{"tags":["gex"],"summary":"Gex Full","description":"Full GEX profile — by_strike array, IV smile, optional flow overlay and OHLC (Pro+ only).","operationId":"gex_full_v1_gex__session___ticker__get","parameters":[{"name":"session","in":"path","required":true,"schema":{"type":"string","title":"Session"}},{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"include_flow","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Flow"}},{"name":"include_ohlc","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Ohlc"}},{"name":"dte_filter","in":"query","required":false,"schema":{"type":"string","description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)","default":"all","title":"Dte Filter"},"description":"all | 0dte | 0+1 | weekly | monthly (legacy integer days also accepted)"},{"name":"smile_expiry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Smile Expiry"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/health":{"get":{"tags":["darkpool"],"summary":"Darkpool Health","description":"Service health + session coverage (any tier — lets a key be smoke-tested).","operationId":"darkpool_health_v1_darkpool_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/darkpool/sessions":{"get":{"tags":["darkpool"],"summary":"Darkpool Sessions","description":"All available dark-pool sessions (dates).","operationId":"darkpool_sessions_v1_darkpool_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/darkpool/blocks":{"get":{"tags":["darkpool"],"summary":"Darkpool Blocks","description":"Detected off-exchange BLOCKS (>= max($1M, rolling P99.5) per ticker) with %ADV,\npost-print impact (bps) and the options-confirmation read. ``outside_nbbo`` flags a print\nreported beyond the quote, ``away_from_quote`` one priced away from it (more than 0.1 %\nand 2 cents outside); null = quote unknown.","operationId":"darkpool_blocks_v1_darkpool_blocks_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD; default latest","title":"Date"},"description":"YYYY-MM-DD; default latest"},{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"filter, CSV ok","title":"Ticker"},"description":"filter, CSV ok"},{"name":"nbbo_label","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nbbo Label"}},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":0.0,"title":"Min Premium"}},{"name":"min_size","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Min Size"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/ranking":{"get":{"tags":["darkpool"],"summary":"Darkpool Ranking","description":"Whole-market off-exchange share + per-ticker notional ranking.","operationId":"darkpool_ranking_v1_darkpool_ranking_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/alerts":{"get":{"tags":["darkpool"],"summary":"Darkpool Alerts","description":"Large off-exchange blocks with DIRECTIONAL options confirmation, by severity.","operationId":"darkpool_alerts_v1_darkpool_alerts_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/pressure":{"get":{"tags":["darkpool"],"summary":"Darkpool Pressure","description":"Market + per-ticker NBBO-location pressure windows (buy/sell/net/ratio).\n\n``market_windows_ex_away`` and each ticker's ``darkpool_windows_ex_away`` are the same\nwindows with prints away from the quote left out; each window adds ``away_notional`` and\n``away_n`` (what was left out). null for a session built before the adjustment.","operationId":"darkpool_pressure_v1_darkpool_pressure_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},{"name":"window","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"1m|5m|15m|30m|1h|day","title":"Window"},"description":"1m|5m|15m|30m|1h|day"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/pressure/{ticker}":{"get":{"tags":["darkpool"],"summary":"Darkpool Pressure Ticker","description":"One ticker's pressure windows + the cumulative intraday curve\n(price vs cumulative dark-pool pressure vs cumulative option intent).\n\n``darkpool_windows_ex_away`` / ``curve.dp_cum_ex_away``: the same with prints away from the\nquote left out (null / absent for a session built before the adjustment).","operationId":"darkpool_pressure_ticker_v1_darkpool_pressure__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},{"name":"window","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/ticker/{ticker}":{"get":{"tags":["darkpool"],"summary":"Darkpool Ticker","description":"Per-ticker session detail: off-exchange summary, rolling baseline (P95/P99/P99.5),\nADV, NBBO-location split and that ticker's blocks.","operationId":"darkpool_ticker_v1_darkpool_ticker__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/time-profile/{ticker}":{"get":{"tags":["darkpool"],"summary":"Darkpool Time Profile","description":"WHEN one ticker's off-exchange volume traded, by price, for one session: a sparse\n5-minute × price grid of shares, per-row and per-bucket totals, the POC and 70 % value\narea, and the largest block prints at their report time. A session still being built\nanswers 503 with ``Retry-After``.\n\n``cells_side`` = flat [buy, sell, away] share triples in ``cells`` order: buy pressure =\nshares at the ask + 60 % of those near it, sell = at the bid + 60 % near it, away = more\nthan 0.1 % (and 2 cents) outside the quote, left out of pressure; the rest of a cell is\nneutral. ``totals`` adds ``buy_volume`` / ``sell_volume`` / ``away_volume``. Absent when\nthe profile was built without quotes.","operationId":"darkpool_time_profile_v1_darkpool_time_profile__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD; default latest","title":"Date"},"description":"YYYY-MM-DD; default latest"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/prints/{ticker}":{"get":{"tags":["darkpool"],"summary":"Darkpool Prints","description":"Raw off-exchange (TRF) prints for one ticker+date — individual trades with NBBO\ncontext (standard per-key rate limits apply). Page with ``older_than``/``newer_than``\ntime cursors (UTC, YYYY-MM-DDTHH:MM:SS).","operationId":"darkpool_prints_v1_darkpool_prints__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},{"name":"newer_than","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Newer Than"}},{"name":"older_than","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Older Than"}},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":0.0,"title":"Min Premium"}},{"name":"max_premium","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Max Premium"}},{"name":"min_size","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Min Size"}},{"name":"max_size","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Max Size"}},{"name":"nbbo_label","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nbbo Label"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"desc","title":"Order"}},{"name":"order_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(executed_at|premium|size|price)$","default":"executed_at","title":"Order By"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/recent":{"get":{"tags":["darkpool"],"summary":"Darkpool Recent","description":"Recent NOTABLE off-exchange prints market-wide. Explicitly block-gated (the\ndetected-block tape, not the full raw market tape) — see ``data.feed``.","operationId":"darkpool_recent_v1_darkpool_recent_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"}},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":0.0,"title":"Min Premium"}},{"name":"min_size","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Min Size"}},{"name":"nbbo_label","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nbbo Label"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/sectors":{"get":{"tags":["darkpool"],"summary":"Darkpool Sectors","description":"Per-SPDR-sector off-exchange aggregate for one session (heatmap): notional, share,\nnet NBBO-location pressure and top names per sector. Coverage is the calibrated liquid\nuniverse intersected with each sector — NOT full sector constituents. Each sector also\ncarries its pressure with prints away from the quote left out (``*_ex_away`` +\n``away_notional``; null for a session built before the adjustment).","operationId":"darkpool_sectors_v1_darkpool_sectors_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD; default latest","title":"Date"},"description":"YYYY-MM-DD; default latest"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/sector/{key}":{"get":{"tags":["darkpool"],"summary":"Darkpool Sector Composition","description":"One SPDR sector's constituent equities + alignment metrics: each ticker's off-exchange\n$, share of sector, net lean and intensity, plus concentration (top-1/top-3 share) and\ndirection-agreement (how unanimous the sector's flow is). The ``*_ex_away`` keys (sector\nand per ticker) repeat the lean with prints away from the quote left out; null for a\nsession built before the adjustment.","operationId":"darkpool_sector_composition_v1_darkpool_sector__key__get","parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":300,"minimum":1,"default":60,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/sector_rotation":{"get":{"tags":["darkpool"],"summary":"Darkpool Sector Rotation","description":"Per-(sector, session) rotation matrix over the last ``display`` sessions — each cell is\nthat session's sector DP-$ vs its trailing 20-day average — plus a one-line rotation\nsummary and the most-elevated sector.","operationId":"darkpool_sector_rotation_v1_darkpool_sector_rotation_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":120,"minimum":3,"default":25,"title":"Days"}},{"name":"display","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":2,"default":5,"title":"Display"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/daily-candles/{ticker}":{"get":{"tags":["darkpool"],"summary":"Darkpool Daily Candles","description":"Daily OHLC candles for the last N calendar days (pairs with ``/print-levels`` for\nthe 30-day cost-basis chart).","operationId":"darkpool_daily_candles_v1_darkpool_daily_candles__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":180,"minimum":2,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/darkpool/print-levels/{ticker}":{"get":{"tags":["darkpool"],"summary":"Darkpool Print Levels","description":"Top-N off-exchange price LEVELS (print clusters ≈ institutional cost basis) over the\nlast N sessions — the horizontal dashed lines on the 30-day chart.","operationId":"darkpool_print_levels_v1_darkpool_print_levels__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":120,"minimum":1,"default":30,"title":"Days"}},{"name":"top","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":10,"title":"Top"}},{"name":"band_pct","in":"query","required":false,"schema":{"type":"number","maximum":5.0,"minimum":0.05,"default":0.5,"title":"Band Pct"}},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":0.0,"title":"Min Premium"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/volatility/atm":{"get":{"tags":["volatility"],"summary":"Volatility Atm Batch","description":"Batch ATM implied vol at ~``target_dte`` days for many tickers (Pro+).\n\nTickers absent from the vol-intel index are simply omitted from ``results``.","operationId":"volatility_atm_batch_v1_volatility_atm_get","parameters":[{"name":"symbols","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated tickers, e.g. SPY,QQQ,NVDA","title":"Symbols"},"description":"Comma-separated tickers, e.g. SPY,QQQ,NVDA"},{"name":"target_dte","in":"query","required":false,"schema":{"type":"number","maximum":365.0,"minimum":1.0,"default":30.0,"title":"Target Dte"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/volatility/movers":{"get":{"tags":["volatility"],"summary":"Volatility Movers","description":"Top ATM-IV(30d) movers vs prior-session close (Pro+).","operationId":"volatility_movers_v1_volatility_movers_get","parameters":[{"name":"direction","in":"query","required":false,"schema":{"type":"string","pattern":"^(both|expansions|compressions)$","default":"both","title":"Direction"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/volatility/{ticker}/surface":{"get":{"tags":["volatility"],"summary":"Volatility Surface","description":"Full implied-vol surface — ``iv[][]`` over moneyness × DTE, with the\naligned strike/delta/oi/volume matrices and ATM stats (Pro+).","operationId":"volatility_surface_v1_volatility__ticker__surface_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"dte_min","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":0,"default":3,"title":"Dte Min"}},{"name":"dte_max","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":1,"default":400,"title":"Dte Max"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string","pattern":"^(mid|call|put)$","default":"mid","title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/volatility/{ticker}/term-structure":{"get":{"tags":["volatility"],"summary":"Volatility Term Structure","description":"ATM-IV term structure — ATM implied vol per expiry/DTE plus the mean\nATM-IV, extracted from the surface (Pro+).","operationId":"volatility_term_structure_v1_volatility__ticker__term_structure_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"dte_min","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":0,"default":3,"title":"Dte Min"}},{"name":"dte_max","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":1,"default":400,"title":"Dte Max"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string","pattern":"^(mid|call|put)$","default":"mid","title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/volatility/{ticker}/history":{"get":{"tags":["volatility"],"summary":"Volatility History","description":"Historical ATM-IV(30d) series (+ per-expiry term) from the immutable\niv-history store (Pro+).","operationId":"volatility_history_v1_volatility__ticker__history_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"title":"From"}},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},{"type":"null"}],"title":"To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/volatility/{ticker}/percentile":{"get":{"tags":["volatility"],"summary":"Volatility Percentile","description":"Through-time IV percentile / z-score / bands at a (moneyness, DTE) cell —\nthe empirical percentile of current IV over the lookback window (Pro+).","operationId":"volatility_percentile_v1_volatility__ticker__percentile_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"dte","in":"query","required":false,"schema":{"type":"number","maximum":730.0,"minimum":1.0,"default":30.0,"title":"Dte"}},{"name":"moneyness","in":"query","required":false,"schema":{"type":"number","description":"Display percent, e.g. 4.2 = +4.2%","default":0.0,"title":"Moneyness"},"description":"Display percent, e.g. 4.2 = +4.2%"},{"name":"lookback_days","in":"query","required":false,"schema":{"type":"integer","maximum":252,"minimum":5,"default":90,"title":"Lookback Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/volatility/{ticker}/realized":{"get":{"tags":["volatility"],"summary":"Volatility Realized","description":"Annualized close-to-close REALIZED volatility for several trailing windows\n(10/20/30/60/90/120/252 days), from adjusted daily bars (Pro+).","operationId":"volatility_realized_v1_volatility__ticker__realized_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/volatility/{ticker}/iv-rank":{"get":{"tags":["volatility"],"summary":"Volatility Iv Rank","description":"IV rank + IV percentile of the CURRENT ATM-IV(30d) within its historical\nrange — rank = (iv-min)/(max-min); percentile = % of days at or below current\n(Pro+). Computed from the immutable ATM-IV history.","operationId":"volatility_iv_rank_v1_volatility__ticker__iv_rank_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/volatility/{ticker}/stats":{"get":{"tags":["volatility"],"summary":"Volatility Stats","description":"Descriptive stats of the ATM-IV(30d) history — mean / std / min / max /\np25 / median / p75, plus the current value and its z-score (Pro+).","operationId":"volatility_stats_v1_volatility__ticker__stats_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/volatility/{ticker}/risk-reversal":{"get":{"tags":["volatility"],"summary":"Volatility Risk Reversal","description":"Risk-reversal skew ≈ call-wing IV − put-wing IV at ± `moneyness`% (a\nnegative value = the usual equity put skew), read from the IV surface near\nthe target DTE band (Pro+).","operationId":"volatility_risk_reversal_v1_volatility__ticker__risk_reversal_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"moneyness","in":"query","required":false,"schema":{"type":"number","maximum":25.0,"minimum":1.0,"description":"Wing distance in % (e.g. 5 = ±5%)","default":5.0,"title":"Moneyness"},"description":"Wing distance in % (e.g. 5 = ±5%)"},{"name":"dte_min","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":0,"default":20,"title":"Dte Min"}},{"name":"dte_max","in":"query","required":false,"schema":{"type":"integer","maximum":730,"minimum":1,"default":40,"title":"Dte Max"}},{"name":"mode","in":"query","required":false,"schema":{"type":"string","pattern":"^(mid|call|put)$","default":"mid","title":"Mode"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/oi/health":{"get":{"tags":["open-interest"],"summary":"Oi Health","description":"OI service health (any tier — lets a key be smoke-tested).","operationId":"oi_health_v1_oi_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/oi/tickers":{"get":{"tags":["open-interest"],"summary":"Oi Tickers","description":"Tickers with available OI snapshots (Pro+).","operationId":"oi_tickers_v1_oi_tickers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/oi/movers":{"get":{"tags":["open-interest"],"summary":"Oi Movers","description":"Market-wide OI movers — tickers ranked by DAY-OVER-DAY total-OI change\n(latest OI date vs the prior): top_gainers, top_losers, most_active. The\nresponse ``as_of`` / ``prior_as_of`` carry the two oi_dates being diffed (Pro+).","operationId":"oi_movers_v1_oi_movers_get","parameters":[{"name":"dte","in":"query","required":false,"schema":{"type":"string","description":"DTE bucket: all|lt8|gte8","default":"all","title":"Dte"},"description":"DTE bucket: all|lt8|gte8"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/oi/contract/{occ}":{"get":{"tags":["open-interest"],"summary":"Oi Contract","description":"Open interest for a single option contract by OCC symbol\n(e.g. ``O:SPY260130C00600000``), from the latest snapshot (Pro+).","operationId":"oi_contract_v1_oi_contract__occ__get","parameters":[{"name":"occ","in":"path","required":true,"schema":{"type":"string","title":"Occ"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/oi/{ticker}/timeseries":{"get":{"tags":["open-interest"],"summary":"Oi Timeseries","description":"Per-ticker OI + volume timeseries across AM/PM snapshots (Pro+).","operationId":"oi_timeseries_v1_oi__ticker__timeseries_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD","title":"Start"},"description":"YYYY-MM-DD"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD","title":"End"},"description":"YYYY-MM-DD"},{"name":"dte","in":"query","required":false,"schema":{"type":"string","description":"DTE bucket: all|lt8|gte8","default":"all","title":"Dte"},"description":"DTE bucket: all|lt8|gte8"},{"name":"slot","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"AM|PM (default both)","title":"Slot"},"description":"AM|PM (default both)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/oi/{ticker}/change":{"get":{"tags":["open-interest"],"summary":"Oi Change","description":"OI change for a ticker between the two most-recent snapshots — call/put/\ntotal OI and volume deltas (+ % change) (Pro+).","operationId":"oi_change_v1_oi__ticker__change_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"dte","in":"query","required":false,"schema":{"type":"string","description":"DTE bucket: all|lt8|gte8","default":"all","title":"Dte"},"description":"DTE bucket: all|lt8|gte8"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/oi/{ticker}/strike-change":{"get":{"tags":["open-interest"],"summary":"Oi Strike Change","description":"Per-STRIKE and per-EXPIRY day-over-day OI change for a ticker (call/put/\ntotal, latest OI date vs the prior). Complements /{ticker}/change, which is\nthe ticker-level total (Pro+).","operationId":"oi_strike_change_v1_oi__ticker__strike_change_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"dte","in":"query","required":false,"schema":{"type":"string","description":"DTE bucket: all|lt8|gte8","default":"all","title":"Dte"},"description":"DTE bucket: all|lt8|gte8"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max strike rows","default":100,"title":"Limit"},"description":"Max strike rows"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/oi/{ticker}/latest":{"get":{"tags":["open-interest"],"summary":"Oi Latest","description":"Most recent OI snapshot summary for a ticker (Pro+).","operationId":"oi_latest_v1_oi__ticker__latest_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp":{"get":{"tags":["mcp"],"summary":"Mcp Info","operationId":"mcp_info_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["mcp"],"summary":"Mcp Endpoint","description":"MCP Streamable-HTTP JSON-RPC endpoint, dual-era: 2026-07-28 requests (per-\nrequest ``_meta``) are served statelessly; legacy clients use ``initialize``\nand may batch. ``initialize`` / ``server/discover`` / ``tools/list`` need no\nkey; tool calls authenticate with the ``X-API-Key`` header, an OAuth access\ntoken, or a legacy session bound by ``register_free_key`` / ``use_api_key``.","operationId":"mcp_endpoint_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp/connect":{"get":{"tags":["mcp"],"summary":"Mcp Connect Info","operationId":"mcp_connect_info_mcp_connect_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["mcp"],"summary":"Mcp Connect Endpoint","description":"Sign-in profile for Claude and other OAuth MCP clients (lazy HTTP-401 auth).","operationId":"mcp_connect_endpoint_mcp_connect_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp/chatgpt":{"get":{"tags":["mcp"],"summary":"Mcp Chatgpt Info","operationId":"mcp_chatgpt_info_mcp_chatgpt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["mcp"],"summary":"Mcp Chatgpt Endpoint","description":"ChatGPT apps profile (incl. dots): per-tool securitySchemes, _meta sign-in challenges.","operationId":"mcp_chatgpt_endpoint_mcp_chatgpt_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-protected-resource":{"get":{"tags":["mcp"],"summary":"Protected Resource Root","operationId":"protected_resource_root__well_known_oauth_protected_resource_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-protected-resource/mcp":{"get":{"tags":["mcp"],"summary":"Protected Resource Mcp","operationId":"protected_resource_mcp__well_known_oauth_protected_resource_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-protected-resource/mcp/connect":{"get":{"tags":["mcp"],"summary":"Protected Resource Connect","operationId":"protected_resource_connect__well_known_oauth_protected_resource_mcp_connect_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-protected-resource/mcp/chatgpt":{"get":{"tags":["mcp"],"summary":"Protected Resource Chatgpt","operationId":"protected_resource_chatgpt__well_known_oauth_protected_resource_mcp_chatgpt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/openai-apps-challenge":{"get":{"tags":["mcp"],"summary":"Openai Apps Challenge","description":"OpenAI Apps domain verification: the token from the app submission form.","operationId":"openai_apps_challenge__well_known_openai_apps_challenge_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/glama.json":{"get":{"tags":["mcp"],"summary":"Glama Claim","description":"Glama connector ownership (HTTP challenge): served byte-for-byte as Glama\nissued it. Unset or not JSON -> 404, so a bad paste never publishes garbage.","operationId":"glama_claim__well_known_glama_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/tide/market":{"get":{"tags":["tide"],"summary":"Tide Market","description":"Market-wide large-order net-premium tide: summary, DTE×type×moneyness\nbreakdown, intraday cumulative curve, and top tickers by |net premium|.","operationId":"tide_market_v1_tide_market_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD; default latest","title":"Date"},"description":"YYYY-MM-DD; default latest"},{"name":"top_n","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":25,"title":"Top N"}},{"name":"time_bin_min","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":30,"title":"Time Bin Min"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tide/sectors":{"get":{"tags":["tide"],"summary":"Tide Sectors","description":"Sector-level large-order net-premium tide (net call/put premium by sector).","operationId":"tide_sectors_v1_tide_sectors_get","parameters":[{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD; default latest","title":"Date"},"description":"YYYY-MM-DD; default latest"},{"name":"time_bin_min","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":30,"title":"Time Bin Min"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/tide/{ticker}":{"get":{"tags":["tide"],"summary":"Tide Ticker","description":"Per-ticker large-order net-premium tide + intraday cumulative curve.","operationId":"tide_ticker_v1_tide__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD; default latest","title":"Date"},"description":"YYYY-MM-DD; default latest"},{"name":"time_bin_min","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":30,"title":"Time Bin Min"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/chain/{ticker}":{"get":{"tags":["contracts"],"summary":"Contracts Chain","description":"Option chain for an underlying (from the last OI snapshot; OI>0) (Pro+).","operationId":"contracts_chain_v1_contracts_chain__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Session YYYY-MM-DD; default latest","title":"Date"},"description":"Session YYYY-MM-DD; default latest"},{"name":"expiry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one expiry YYYY-MM-DD","title":"Expiry"},"description":"Filter to one expiry YYYY-MM-DD"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"call | put","title":"Type"},"description":"call | put"},{"name":"min_oi","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Min Oi"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":2000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/atm/{ticker}":{"get":{"tags":["contracts"],"summary":"Contracts Atm","description":"Near-spot (ATM) strikes grouped by expiry (Pro+).","operationId":"contracts_atm_v1_contracts_atm__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}},{"name":"width","in":"query","required":false,"schema":{"type":"number","maximum":0.5,"exclusiveMinimum":0.0,"default":0.05,"title":"Width"}},{"name":"per_expiry","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Per Expiry"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/expiries/{ticker}":{"get":{"tags":["contracts"],"summary":"Contracts Expiries","description":"Per-expiry OI breakdown for an underlying (Pro+).","operationId":"contracts_expiries_v1_contracts_expiries__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{occ}/historic":{"get":{"tags":["contracts"],"summary":"Contract Historic","description":"Daily OHLC bars for one contract over [from, to] — ~1yr look-back (Pro+).","operationId":"contract_historic_v1_contracts__occ__historic_get","parameters":[{"name":"occ","in":"path","required":true,"schema":{"type":"string","title":"Occ"}},{"name":"from","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"From"}},{"name":"to","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{occ}/intraday":{"get":{"tags":["contracts"],"summary":"Contract Intraday","description":"Intraday minute bars for one contract on a date — recent-window only (Pro+).","operationId":"contract_intraday_v1_contracts__occ__intraday_get","parameters":[{"name":"occ","in":"path","required":true,"schema":{"type":"string","title":"Occ"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Date"}},{"name":"timespan","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":1,"title":"Timespan"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{occ}/trades":{"get":{"tags":["contracts"],"summary":"Contract Trades","description":"Per-contract time & sales for a date — metered, bounded to `limit` (Pro+).","operationId":"contract_trades_v1_contracts__occ__trades_get","parameters":[{"name":"occ","in":"path","required":true,"schema":{"type":"string","title":"Occ"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Date"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{occ}/volume-profile":{"get":{"tags":["contracts"],"summary":"Contract Volume Profile","description":"Volume-by-price-level for a contract on a date, + POC + VWAP (Pro+).","operationId":"contract_volume_profile_v1_contracts__occ__volume_profile_get","parameters":[{"name":"occ","in":"path","required":true,"schema":{"type":"string","title":"Occ"}},{"name":"date","in":"query","required":true,"schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{occ}/oi-history":{"get":{"tags":["contracts"],"summary":"Contract Oi History","description":"Per-contract OI/IV/greeks trajectory across the last `days` twice-daily\nsnapshots (~Nov-2025 on) (Pro+).","operationId":"contract_oi_history_v1_contracts__occ__oi_history_get","parameters":[{"name":"occ","in":"path","required":true,"schema":{"type":"string","title":"Occ"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Number of recent snapshot dates","default":10,"title":"Days"},"description":"Number of recent snapshot dates"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contracts/{occ}":{"get":{"tags":["contracts"],"summary":"Contract Profile","description":"Per-contract profile — OCC parse + OI/IV/greeks/quote as-of the snapshot (Pro+).","operationId":"contract_profile_v1_contracts__occ__get","parameters":[{"name":"occ","in":"path","required":true,"schema":{"type":"string","title":"Occ"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/short/{ticker}/interest":{"get":{"tags":["short-selling"],"summary":"Short Interest","description":"Bi-weekly FINRA short-interest history + days-to-cover for a ticker (Pro+).","operationId":"short_interest_v1_short__ticker__interest_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Number of settlements (latest first)","default":24,"title":"Limit"},"description":"Number of settlements (latest first)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/short/{ticker}/volume":{"get":{"tags":["short-selling"],"summary":"Short Volume","description":"Daily FINRA short-volume history + per-venue split for a ticker (Pro+).","operationId":"short_volume_v1_short__ticker__volume_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Number of days (latest first)","default":30,"title":"Limit"},"description":"Number of days (latest first)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/news/{ticker}":{"get":{"tags":["news"],"summary":"Ticker News","description":"Recent news for a ticker, each article carrying a pre-computed per-ticker\nsentiment (positive / negative / neutral) + reasoning (Pro+).","operationId":"ticker_news_v1_news__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of articles (latest first)","default":20,"title":"Limit"},"description":"Number of articles (latest first)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ta/{ticker}/{indicator}":{"get":{"tags":["technical-indicators"],"summary":"Technical Indicator","description":"Technical-indicator time series — one of sma / ema / rsi / macd (Pro+).\nMACD rows carry value + signal + histogram; others carry value.","operationId":"technical_indicator_v1_ta__ticker___indicator__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"indicator","in":"path","required":true,"schema":{"type":"string","title":"Indicator"}},{"name":"timespan","in":"query","required":false,"schema":{"type":"string","description":"minute|hour|day|week|month|quarter|year","default":"day","title":"Timespan"},"description":"minute|hour|day|week|month|quarter|year"},{"name":"window","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Lookback window (sma/ema/rsi)","default":14,"title":"Window"},"description":"Lookback window (sma/ema/rsi)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Points returned (latest first)","default":50,"title":"Limit"},"description":"Points returned (latest first)"},{"name":"short_window","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"MACD fast window","default":12,"title":"Short Window"},"description":"MACD fast window"},{"name":"long_window","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"MACD slow window","default":26,"title":"Long Window"},"description":"MACD slow window"},{"name":"signal_window","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"MACD signal window","default":9,"title":"Signal Window"},"description":"MACD signal window"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/insider/{ticker}":{"get":{"tags":["sec-filings"],"summary":"Insider","description":"SEC Form 4 insider transactions for a ticker — latest first, each with\ntransaction code / shares / price / value + the SEC filing link (Pro+).","operationId":"insider_v1_insider__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Transactions (latest first)","default":50,"title":"Limit"},"description":"Transactions (latest first)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/institutions/{filer_cik}":{"get":{"tags":["sec-filings"],"summary":"Institution Holdings","description":"SEC 13F-HR institutional holdings for a filer (by SEC CIK) — issuer, CUSIP,\nshares, market value, voting authority (Pro+). 13F is filer-centric (no ticker\nfilter upstream); quarterly, ~45-day lag.","operationId":"institution_holdings_v1_institutions__filer_cik__get","parameters":[{"name":"filer_cik","in":"path","required":true,"schema":{"type":"string","title":"Filer Cik"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Holdings (latest filing first)","default":100,"title":"Limit"},"description":"Holdings (latest filing first)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/financials/{ticker}":{"get":{"tags":["fundamentals"],"summary":"Financials","description":"Company financial statements — income, balance-sheet, cash-flow and\ncomprehensive-income line items per period (Pro+).","operationId":"financials_v1_financials__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"timeframe","in":"query","required":false,"schema":{"type":"string","description":"ttm | quarterly | annual","default":"ttm","title":"Timeframe"},"description":"ttm | quarterly | annual"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":40,"minimum":1,"description":"Periods (latest first)","default":4,"title":"Limit"},"description":"Periods (latest first)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dividends/{ticker}":{"get":{"tags":["fundamentals"],"summary":"Dividends","description":"Cash-dividend history — amount, type, frequency and the key dates (Pro+).","operationId":"dividends_v1_dividends__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/splits/{ticker}":{"get":{"tags":["fundamentals"],"summary":"Splits","description":"Stock-split history — execution date + split ratio (Pro+).","operationId":"splits_v1_splits__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/ipos/{ticker}":{"get":{"tags":["fundamentals"],"summary":"Ipos","description":"IPO calendar entries for a ticker — dates, price range, shares (Pro+).","operationId":"ipos_v1_ipos__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/seasonality/{ticker}":{"get":{"tags":["seasonality"],"summary":"Seasonality","description":"Monthly seasonality — for each calendar month, the average close-to-close\nreturn, median, hit rate (% of years positive), best/worst, and sample count\nover the look-back window (Pro+).","operationId":"seasonality_v1_seasonality__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"years","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Look-back window in years","default":10,"title":"Years"},"description":"Look-back window in years"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/congress/recent":{"get":{"tags":["congress"],"summary":"Congress Recent","description":"Most-recent congressional trades across all tickers (Pro+).","operationId":"congress_recent_v1_congress_recent_get","parameters":[{"name":"chamber","in":"query","required":false,"schema":{"type":"string","pattern":"^(both|house|senate)$","default":"both","title":"Chamber"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/congress/stats":{"get":{"tags":["congress"],"summary":"Congress Stats","description":"Coverage stats — row counts per chamber + latest transaction / ingest (Pro+).","operationId":"congress_stats_v1_congress_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/congress/members":{"get":{"tags":["congress"],"summary":"Congress Members","description":"Per-member roll-up of the disclosure stream — one row per member (trade &\nside counts, unique tickers, disclosed $ by side, last trade), sorted by\ndisclosed $. Reconstructed from PTR *transactions*; $ are bracket midpoints\n(Pro+). Reshapes the same Pro data the dashboard used to aggregate client-side.","operationId":"congress_members_v1_congress_members_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/congress/tickers":{"get":{"tags":["congress"],"summary":"Congress Tickers","description":"Per-ticker roll-up — one row per stock (distinct member count, trade & side\ncounts, disclosed $ by side), sorted by member count. Powers the by-ticker\nlens table without paging the whole feed client-side (Pro+).","operationId":"congress_tickers_v1_congress_tickers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/congress/member/{name}":{"get":{"tags":["congress"],"summary":"Congress Member","description":"Trades for a member (case-insensitive substring match on name) (Pro+).","operationId":"congress_member_v1_congress_member__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/congress/{ticker}":{"get":{"tags":["congress"],"summary":"Congress Ticker","description":"Congressional trades in a given ticker, latest first (Pro+).","operationId":"congress_ticker_v1_congress__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/congress/{ticker}/holders":{"get":{"tags":["congress"],"summary":"Congress Holders","description":"Members trading `ticker`, aggregated per member (roster + disclosed $ by\nside + direction). Powers the by-ticker lens (Pro+).","operationId":"congress_holders_v1_congress__ticker__holders_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/congress/ingest":{"post":{"tags":["admin"],"summary":"Congress Ingest","description":"Trigger a congress-data ingest (House PTR PDFs + Senate eFD) into our\nPostgres. Default: BACKGROUND (returns immediately; poll /v1/congress/stats).\n``wait=true`` runs it synchronously and returns the counts (keep the scope\nsmall so it finishes within the request window). Admin only.","operationId":"congress_ingest_v1_admin_congress_ingest_post","parameters":[{"name":"house_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":45,"title":"House Days"}},{"name":"senate_days","in":"query","required":false,"schema":{"type":"integer","maximum":3650,"minimum":1,"default":365,"title":"Senate Days"}},{"name":"max_house_pdfs","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":0,"default":150,"title":"Max House Pdfs"}},{"name":"max_senate_ptrs","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":0,"default":60,"title":"Max Senate Ptrs"}},{"name":"do_house","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Do House"}},{"name":"do_senate","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Do Senate"}},{"name":"wait","in":"query","required":false,"schema":{"type":"boolean","description":"Run synchronously and return the counts","default":false,"title":"Wait"},"description":"Run synchronously and return the counts"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/fda/calendar":{"get":{"tags":["fda"],"summary":"Fda Calendar","description":"Upcoming Phase 2/3 trial catalysts across the pharma universe, soonest first (Pro+).","operationId":"fda_calendar_v1_fda_calendar_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":1095,"minimum":1,"default":180,"title":"Days"}},{"name":"phase","in":"query","required":false,"schema":{"type":"string","pattern":"^(both|PHASE2|PHASE3)$","default":"both","title":"Phase"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/fda/stats":{"get":{"tags":["fda"],"summary":"Fda Stats","description":"Coverage stats — total/upcoming catalysts, distinct tickers, next date (Pro+).","operationId":"fda_stats_v1_fda_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/fda/catalysts":{"get":{"tags":["fda"],"summary":"Fda Catalysts","description":"Scored, enriched catalyst calendar — priority score (imminence × phase ×\nliquidity), oncology flag, and trial fundamentals joined at serve time.\ndays_to/score are recomputed from today so they're always current. Frames\ncatalysts as VOLATILITY events (direction is a documented null). Dark unless\nENABLE_FDA_SCORING (Pro+).","operationId":"fda_catalysts_v1_fda_catalysts_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":1095,"minimum":1,"default":365,"title":"Days"}},{"name":"phase","in":"query","required":false,"schema":{"type":"string","pattern":"^(both|PHASE2|PHASE3)$","default":"both","title":"Phase"}},{"name":"area","in":"query","required":false,"schema":{"type":"string","pattern":"^(all|onco|nononco)$","default":"all","title":"Area"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":900,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/fda/{ticker}":{"get":{"tags":["fda"],"summary":"Fda Ticker","description":"A ticker's upcoming clinical-trial catalysts, soonest first (Pro+).","operationId":"fda_ticker_v1_fda__ticker__get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"include_past","in":"query","required":false,"schema":{"type":"boolean","description":"Include already-passed readouts","default":false,"title":"Include Past"},"description":"Include already-passed readouts"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/fda/ingest":{"post":{"tags":["admin"],"summary":"Fda Ingest","description":"Trigger an FDA-catalyst ingest (CT.gov crawl over the pharma universe) into\nour Postgres. Default: BACKGROUND (returns immediately; poll /v1/fda/stats).\n``wait=true`` runs synchronously and returns counts (keep ``max_tickers`` small\nso it finishes within the request window). Admin only.","operationId":"fda_ingest_v1_admin_fda_ingest_post","parameters":[{"name":"max_tickers","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":0,"description":"0 = full universe","default":0,"title":"Max Tickers"},"description":"0 = full universe"},{"name":"concurrency","in":"query","required":false,"schema":{"type":"integer","maximum":12,"minimum":1,"default":5,"title":"Concurrency"}},{"name":"lookback_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":0,"default":30,"title":"Lookback Days"}},{"name":"wait","in":"query","required":false,"schema":{"type":"boolean","description":"Run synchronously and return the counts","default":false,"title":"Wait"},"description":"Run synchronously and return the counts"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/screener":{"get":{"tags":["screener"],"summary":"Screen","description":"Screen tickers across flow / OI / FDA-catalyst / congress signals (Pro+).","operationId":"screen_v1_screener_get","parameters":[{"name":"session","in":"query","required":false,"schema":{"type":"string","description":"Flow session date or 'latest'","default":"latest","title":"Session"},"description":"Flow session date or 'latest'"},{"name":"direction","in":"query","required":false,"schema":{"type":"string","pattern":"^(any|bullish|bearish)$","default":"any","title":"Direction"}},{"name":"min_abs_premium","in":"query","required":false,"schema":{"type":"number","minimum":0,"default":0.0,"title":"Min Abs Premium"}},{"name":"min_oi_change","in":"query","required":false,"schema":{"type":"integer","description":"Minimum day-over-day total OI change","default":0,"title":"Min Oi Change"},"description":"Minimum day-over-day total OI change"},{"name":"fda_within_days","in":"query","required":false,"schema":{"type":"integer","maximum":1095,"minimum":0,"description":"0 = don't require an FDA catalyst","default":0,"title":"Fda Within Days"},"description":"0 = don't require an FDA catalyst"},{"name":"phase","in":"query","required":false,"schema":{"type":"string","pattern":"^(any|PHASE2|PHASE3)$","default":"any","title":"Phase"}},{"name":"has_congress","in":"query","required":false,"schema":{"type":"boolean","description":"Require congressional activity (last 30d)","default":false,"title":"Has Congress"},"description":"Require congressional activity (last 30d)"},{"name":"signals","in":"query","required":false,"schema":{"type":"string","description":"Comma-list of required signals: flow,oi,fda,congress","default":"","title":"Signals"},"description":"Comma-list of required signals: flow,oi,fda,congress"},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","pattern":"^(abs_premium|net_premium|oi_change|order_count|congress_30d|next_fda_days)$","default":"abs_premium","title":"Sort By"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(desc|asc)$","default":"desc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/health":{"get":{"tags":["options-flow"],"summary":"Flow Health","description":"Feature availability (any tier — lets a key be smoke-tested).","operationId":"flow_health_v1_options_flow_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/options-flow/sessions":{"get":{"tags":["options-flow"],"summary":"Flow Sessions","description":"Available sessions + the recording threshold.","operationId":"flow_sessions_v1_options_flow_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/options-flow/tickers":{"get":{"tags":["options-flow"],"summary":"Flow Tickers","description":"Underlyings with recorded large-order flow in a session.\n\nNOT the listed-options universe — this is \"what printed size\", which is the\nquestion the rest of this family can act on. The response `basis` says so.","operationId":"flow_tickers_v1_options_flow_tickers_get","parameters":[{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20000,"minimum":1,"default":10000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/multi-leg":{"get":{"tags":["options-flow"],"summary":"Flow Multi Leg","description":"Reconstructed multi-leg strategies — verticals, calendars, condors and\nfriends — with net premium, net delta and a directional label.\n\nDetection is structural, not heuristic: legs are gated on the OPRA multi-leg\ncondition codes (232-247) and matched within a ~100ms coincidence window, so\na package is a genuine complex order rather than trades that merely landed\nclose together.","operationId":"flow_multi_leg_v1_options_flow_multi_leg_get","parameters":[{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}},{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"}},{"name":"structure","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"vertical_spread | ratio_spread | diagonal_spread | calendar_spread | straddle | strangle | butterfly | condor | iron_condor | iron_butterfly","title":"Structure"},"description":"vertical_spread | ratio_spread | diagonal_spread | calendar_spread | straddle | strangle | butterfly | condor | iron_condor | iron_butterfly"},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"bullish | bearish | neutral","title":"Direction"},"description":"bullish | bearish | neutral"},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"description":"Absolute net-premium floor","default":0.0,"title":"Min Premium"},"description":"Absolute net-premium floor"},{"name":"min_legs","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":2},{"type":"null"}],"title":"Min Legs"}},{"name":"max_legs","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":2},{"type":"null"}],"title":"Max Legs"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/multi-leg/{package_id}":{"get":{"tags":["options-flow"],"summary":"Flow Multi Leg One","description":"One strategy and its individual legs.","operationId":"flow_multi_leg_one_v1_options_flow_multi_leg__package_id__get","parameters":[{"name":"package_id","in":"path","required":true,"schema":{"type":"string","title":"Package Id"}},{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}},{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Narrows the scan when known","title":"Ticker"},"description":"Narrows the scan when known"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/tape":{"get":{"tags":["options-flow"],"summary":"Flow Tape","description":"Filtered, cursor-paginated recorded-order tape, newest first.\n\nHistorical sessions require a ``ticker`` or ``occ`` filter — the session index\nis sorted by ticker, so an unfiltered historical read is a bulk export.","operationId":"flow_tape_v1_options_flow_tape_get","parameters":[{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Session YYYY-MM-DD; default live","title":"Session"},"description":"Session YYYY-MM-DD; default live"},{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Underlying(s); required for historical","title":"Ticker"},"description":"Underlying(s); required for historical"},{"name":"occ","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"OCC contract symbol(s)","title":"Occ"},"description":"OCC contract symbol(s)"},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"call | put","title":"Type"},"description":"call | put"},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"buy | sell","title":"Direction"},"description":"buy | sell"},{"name":"order_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order Type"}},{"name":"min_contracts","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Min Contracts"}},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":0.0,"title":"Min Premium"}},{"name":"min_confidence","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Min Confidence"}},{"name":"dte_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Dte Min"}},{"name":"dte_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Dte Max"}},{"name":"strike_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Strike Min"}},{"name":"strike_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Strike Max"}},{"name":"expiry_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiry From"}},{"name":"expiry_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiry To"}},{"name":"older_than","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor — rows strictly older","title":"Older Than"},"description":"Cursor — rows strictly older"},{"name":"newer_than","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Newer Than"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/contract/{occ}/summary":{"get":{"tags":["options-flow"],"summary":"Flow Contract Summary","description":"Aggregate flow for one contract — buy/sell split, VWAP, counts.\n\nUndelayed and off the row budget: one row per contract is not reproducible\ninto a competing tape, so none of the tape controls apply.","operationId":"flow_contract_summary_v1_options_flow_contract__occ__summary_get","parameters":[{"name":"occ","in":"path","required":true,"schema":{"type":"string","title":"Occ"}},{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/contract/{occ}":{"get":{"tags":["options-flow"],"summary":"Flow Contract","description":"Recorded orders on ONE contract, newest first.","operationId":"flow_contract_v1_options_flow_contract__occ__get","parameters":[{"name":"occ","in":"path","required":true,"schema":{"type":"string","title":"Occ"}},{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direction"}},{"name":"min_contracts","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Min Contracts"}},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":0.0,"title":"Min Premium"}},{"name":"older_than","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Older Than"}},{"name":"newer_than","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Newer Than"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/ticker/{ticker}/strikes":{"get":{"tags":["options-flow"],"summary":"Flow Ticker Strikes","description":"Large-order flow per strike, call/put split, with buy/sell premium.","operationId":"flow_ticker_strikes_v1_options_flow_ticker__ticker__strikes_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"call | put","title":"Type"},"description":"call | put"},{"name":"dte_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Dte Min"}},{"name":"dte_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Dte Max"}},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":0.0,"title":"Min Premium"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/ticker/{ticker}/expiries":{"get":{"tags":["options-flow"],"summary":"Flow Ticker Expiries","description":"Large-order flow per expiry, call/put split, with DTE.","operationId":"flow_ticker_expiries_v1_options_flow_ticker__ticker__expiries_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"call | put","title":"Type"},"description":"call | put"},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":0.0,"title":"Min Premium"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/ticker/{ticker}/ticks":{"get":{"tags":["options-flow"],"summary":"Flow Ticker Ticks","description":"Net call/put premium per time bucket, plus the running cumulative series.","operationId":"flow_ticker_ticks_v1_options_flow_ticker__ticker__ticks_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}},{"name":"interval","in":"query","required":false,"schema":{"type":"integer","description":"Bucket minutes: 1|5|15|30|60","default":1,"title":"Interval"},"description":"Bucket minutes: 1|5|15|30|60"},{"name":"dte_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Dte Min"}},{"name":"dte_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Dte Max"}},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":0.0,"title":"Min Premium"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/ticker/{ticker}/intraday":{"get":{"tags":["options-flow"],"summary":"Flow Ticker Intraday","description":"Flow per (strike, time bucket), bounded to the busiest strikes by premium.","operationId":"flow_ticker_intraday_v1_options_flow_ticker__ticker__intraday_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}},{"name":"interval","in":"query","required":false,"schema":{"type":"integer","description":"Bucket minutes: 1|5|15|30|60","default":5,"title":"Interval"},"description":"Bucket minutes: 1|5|15|30|60"},{"name":"top_strikes","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Top Strikes"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"call | put","title":"Type"},"description":"call | put"},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":0.0,"title":"Min Premium"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/ticker/{ticker}/greek-flow":{"get":{"tags":["options-flow"],"summary":"Flow Ticker Greek Flow","description":"Signed DELTA flow per time bucket — directional exposure transacted.\n\nDelta only. Our per-order schema carries delta but not vega, and estimating\nvega from IV and DTE would be a model output wearing the name of a\nmeasurement, so the field is omitted rather than approximated.","operationId":"flow_ticker_greek_flow_v1_options_flow_ticker__ticker__greek_flow_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}},{"name":"interval","in":"query","required":false,"schema":{"type":"integer","description":"Bucket minutes: 1|5|15|30|60","default":1,"title":"Interval"},"description":"Bucket minutes: 1|5|15|30|60"},{"name":"dte_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Dte Min"}},{"name":"dte_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Dte Max"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/options-flow/ticker/{ticker}/contracts":{"get":{"tags":["options-flow"],"summary":"Flow Ticker Contracts","description":"Per-contract roll-up for one underlying, ranked.\n\nAggregate like ``/summary`` — undelayed and off the row budget.","operationId":"flow_ticker_contracts_v1_options_flow_ticker__ticker__contracts_get","parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","title":"Ticker"}},{"name":"session","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"dte_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Dte Min"}},{"name":"dte_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Dte Max"}},{"name":"min_premium","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":0.0,"title":"Min Premium"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"premium|contracts|orders|net_premium|notional|trades","default":"premium","title":"Sort"},"description":"premium|contracts|orders|net_premium|notional|trades"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":2000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/analytics/summary":{"get":{"tags":["admin-analytics"],"summary":"Usage Summary","description":"Aggregate API usage summary — requests, keys, top endpoints, errors.","operationId":"usage_summary_v1_admin_analytics_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/admin/analytics/top-users":{"get":{"tags":["admin-analytics"],"summary":"Top Users","description":"Top API users by request volume (last 7 days).","operationId":"top_users_v1_admin_analytics_top_users_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/quotes/watchlist":{"get":{"tags":["quotes"],"summary":"Get Watchlist","description":"The caller's real-time watchlist and entitlement caps.","operationId":"get_watchlist_v1_quotes_watchlist_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["quotes"],"summary":"Put Watchlist","description":"Replace the real-time watchlist (idempotent). Enforces the size cap and\nthe daily distinct-additions anti-sweep budget.","operationId":"put_watchlist_v1_quotes_watchlist_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Payload","examples":[{"symbols":["SPY","QQQ","NVDA"]}]}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/quotes":{"get":{"tags":["quotes"],"summary":"Quotes Batch","description":"Batch real-time quotes for watchlisted symbols (?symbols=A,B,C).","operationId":"quotes_batch_v1_quotes_get","parameters":[{"name":"symbols","in":"query","required":true,"schema":{"type":"string","title":"Symbols"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/quotes/{symbol}":{"get":{"tags":["quotes"],"summary":"Quote Single","description":"Single real-time quote — the symbol must be on the caller's watchlist.","operationId":"quote_single_v1_quotes__symbol__get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/quotes/{symbol}/candles":{"get":{"tags":["quotes"],"summary":"Candles","description":"OHLC candles for any ticker — dedicated per-ticker endpoint (PRO+).\n\nReturns ``{symbol, session, timespan, bars: [{t,o,h,l,c,v}], count,\ndelayed, delay_min}`` (t = epoch ms). Any ticker, browse pattern.\n\nAnti-abuse (2026-06-18): real-time-fresh TODAY candles are a watchlist\nprivilege, exactly like the quote feed. Charting ANY ticker still works,\nbut a non-watchlisted ticker's *live* candles are trimmed to\n``pro_candles_live_delay_min`` minutes delayed — so the endpoint can't be\nswept to rebuild a near-real-time full-market feed (the focused-subset\nhole that rate-limiting alone leaves open). Historical sessions are\nimmutable and always served in full; watchlisted tickers get live candles\nuntrimmed (consistent with their real-time entitlement).","operationId":"candles_v1_quotes__symbol__candles_get","parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","title":"Symbol"}},{"name":"session","in":"query","required":false,"schema":{"type":"string","description":"Session date YYYY-MM-DD; defaults to today","title":"Session"},"description":"Session date YYYY-MM-DD; defaults to today"},{"name":"timespan","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"description":"Minutes per bar","default":1,"title":"Timespan"},"description":"Minutes per bar"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/health":{"get":{"summary":"Health","description":"Health check for Railway zero-downtime deploys.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}