{"openapi": "3.1.0", "info": {"title": "DataFirst Derivatives API", "version": "1.0.65", "description": "Dealer gamma exposure, key levels, Greeks exposures, order flow, tape and sweeps for every listed US option root, live and for finished sessions. Units: money is USD and quantities are shares or contracts, never scaled; ratios and volatilities are fractions; durations carry their unit in the field name; every numeric property states its unit as x-unit. GEX is USD per 1% move in spot (calls positive, puts negative); delta exposure is shares; vanna and charm exposures are shares per vol point and per day. A result's age in seconds is the standard Age header. Every plan reaches every endpoint at its own limits: GET /v1/plans lists them, GET /v1/me gives your key's."}, "servers": [{"url": "https://api.datafirsttrading.com", "description": "production"}], "security": [{"bearer": []}], "paths": {"/v1/plans": {"get": {"summary": "The plans and their prices (1.0.56): every plan on sale with its monthly, annual and lifetime price, whether it is open or waitlist, what it includes, Ask Marlon's questions a day, and the limits the API enforces for its keys; no key needed, never counted", "security": [], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Plans"}, "meta": {"type": "object", "properties": {"as_of": {"type": "string", "format": "date-time", "description": "when these plans were read"}}}}}}}}, "503": {"$ref": "#/components/responses/Problem"}}}}, "/v1/me": {"get": {"summary": "Your key: tier, rate, history reach, the day quota, export, symbols, the account's platform add-ons, OPRA attestation status and grace; answered for any valid key that is not revoked, attested or not", "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Me"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}}}}, "/v1/status": {"get": {"summary": "Your plan, mode and usage in one free read (1.0.43): plan, plan_until (1.0.44), mode (live | finished | attest | ended) with its label, account, usage {api, rate, chat, stream}, reach, products; never counted against the key, never rate-limited by it; ETag and 304 for polling; answered for any valid key that is not revoked", "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Status"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}}}}, "/v1/stream/ticket": {"post": {"summary": "A one-use ticket, good for 60 s, that opens /v1/stream as this key (1.0.39; since 1.0.61 sent as the socket's token: wss://.../v1/stream?api=1&token=dft_tk_...&neg=...), so a browser never holds the key", "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/StreamTicket"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}}}}, "/v1/stream/negotiate": {"post": {"summary": "Before every /v1/stream socket (1.0.61): the topics on offer (families, scopes, the REST route each body comes from), the socket's path, this key's limits and the neg token the socket requires (good for 300 s, reusable until then)", "requestBody": {"required": false, "content": {"application/json": {"schema": {"$ref": "#/components/schemas/StreamNegotiateRequest"}}}}, "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/StreamNegotiation"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "422": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols": {"get": {"summary": "Symbols with listed options", "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Symbols"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}}}}, "/v1/symbols/{symbol}/expirations": {"get": {"summary": "Listed expirations and the term selection", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}, "example": "SPY"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Expirations"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "422": {"$ref": "#/components/responses/Problem"}, "429": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/spot": {"get": {"summary": "Spot price", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}, "example": "SPY"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Spot"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "422": {"$ref": "#/components/responses/Problem"}, "429": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/levels": {"get": {"summary": "Key levels, walls, totals, flow summary", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}, "example": "SPY"}, {"name": "expirations", "in": "query", "schema": {"type": "string", "default": "4"}, "description": "nearest N expirations (1-50) or 'term' for the term-structure set (nearest to 5, 7, 14, 30, 60, 90, 120, 180, 270, 365 days)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Levels"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "422": {"$ref": "#/components/responses/Problem"}, "429": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/strikes": {"get": {"summary": "Per-strike GEX, exposures, Greeks, OI and volume (plus levels)", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}, "example": "SPY"}, {"name": "expirations", "in": "query", "schema": {"type": "string", "default": "4"}, "description": "nearest N expirations (1-50) or 'term' for the term-structure set (nearest to 5, 7, 14, 30, 60, 90, 120, 180, 270, 365 days)"}, {"name": "strikes", "in": "query", "schema": {"type": "string", "default": "all"}, "description": "the strike window by count (1.0.24): the N strikes nearest spot (1 to 1000) or 'all'; on heatmap the default is the 8 % band, and a count window drops interior strikes whose every cell is under 50 USD in absolute value, never the outermost"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Strikes"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "422": {"$ref": "#/components/responses/Problem"}, "429": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/contracts": {"get": {"summary": "Per-contract quotes, IV, Greeks, GEX and flow classification", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}, "example": "SPY"}, {"name": "expirations", "in": "query", "schema": {"type": "string", "default": "4"}, "description": "nearest N expirations (1-50) or 'term' for the term-structure set (nearest to 5, 7, 14, 30, 60, 90, 120, 180, 270, 365 days)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Contracts"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "422": {"$ref": "#/components/responses/Problem"}, "429": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/heatmap": {"get": {"summary": "Net GEX by strike and expiration around spot", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}, "example": "SPY"}, {"name": "expirations", "in": "query", "schema": {"type": "string", "default": "4"}, "description": "nearest N expirations (1-50) or 'term' for the term-structure set (nearest to 5, 7, 14, 30, 60, 90, 120, 180, 270, 365 days)"}, {"name": "strikes", "in": "query", "schema": {"type": "string", "default": "all"}, "description": "the strike window by count (1.0.24): the N strikes nearest spot (1 to 1000) or 'all'; on heatmap the default is the 8 % band, and a count window drops interior strikes whose every cell is under 50 USD in absolute value, never the outermost"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Heatmap"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "422": {"$ref": "#/components/responses/Problem"}, "429": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/flow": {"get": {"summary": "Signed order flow: totals, minute buckets, classification", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}, "example": "SPY"}, {"name": "series", "in": "query", "schema": {"type": "string", "enum": ["1"]}, "description": "1: add the cumulative signed-premium series (net drift)"}, {"name": "buckets", "in": "query", "schema": {"type": "string", "default": "all"}, "description": "(1.0.61) the newest N one-minute buckets, 0 to 1440, or all"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Flow"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "422": {"$ref": "#/components/responses/Problem"}, "429": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/history/levels": {"get": {"summary": "Intraday levels history: key levels through a session", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}, "example": "SPY"}, {"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "one session; default today"}, {"name": "interval", "in": "query", "schema": {"type": "integer", "default": 5, "minimum": 1, "maximum": 30}}, {"name": "resolution", "in": "query", "schema": {"type": "string", "default": "1m", "enum": ["1s", "5s", "15s", "30s", "1m", "5m", "15m", "30m"]}, "description": "step between rows (1.0.17): at a sub-minute step a second with no change repeats the last row, with that row's as_of; a session recorded per minute answers at 1m with meta.resolution_requested and a note; interval, when given, wins"}, {"name": "from", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "first session of a range of finished sessions (1.0.12): the rows of every finished session from `from` to `to` in one answer, oldest first, at most 31 sessions per call; `data.sessions` lists the sessions answered"}, {"name": "to", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "last session of the range; default the last finished session. Today is never in a range (422)."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/LevelsHistory"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "422": {"$ref": "#/components/responses/Problem"}, "429": {"$ref": "#/components/responses/Problem"}, "202": {"$ref": "#/components/responses/Warming"}}}}, "/v1/symbols/{symbol}/vol": {"get": {"summary": "Volatility summary: constant-maturity tenors (1, 9, 30, 91, 182 days), term slope, expected moves (close, 1 day, week, opex, 30 days), 30-day skew, per-expiration ATM, 25-delta, risk reversal, butterfly and strip vol, the smiles", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}, "example": "SPY"}, {"name": "expirations", "in": "query", "schema": {"type": "string", "default": "term"}, "description": "nearest N expirations (1-50) or 'term' for the term-structure set (nearest to 5, 7, 14, 30, 60, 90, 120, 180, 270, 365 days)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Vol"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "422": {"$ref": "#/components/responses/Problem"}, "429": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/intraday": {"get": {"summary": "Spot bars for the session: 1-minute by default, sub-minute steps with resolution", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}, "example": "SPY"}, {"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "one session; default today"}, {"name": "resolution", "in": "query", "schema": {"type": "string", "default": "1m", "enum": ["1s", "5s", "15s", "30s", "1m", "5m", "15m", "30m"]}, "description": "step between rows (1.0.17): at a sub-minute step a second with no change repeats the last row, with that row's as_of; a session recorded per minute answers at 1m with meta.resolution_requested and a note; interval, when given, wins"}, {"name": "bars", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 1440}, "description": "(1.0.61) today's live minute bars: only the newest N"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Bars"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "422": {"$ref": "#/components/responses/Problem"}, "429": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/history/flow": {"get": {"summary": "Net flow through a session (premium by side, signed premium and volume, spot)", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}}, {"name": "interval", "in": "query", "schema": {"type": "integer", "default": 5, "minimum": 5, "maximum": 300}, "description": "seconds between rows"}, {"name": "resolution", "in": "query", "schema": {"type": "string", "default": "1m", "enum": ["1s", "5s", "15s", "30s", "1m", "5m", "15m", "30m"]}, "description": "the step between rows as a named resolution: 5s is the native step; 1s, from 2026-10-19 (1.0.18), for the names recorded every second, other names answered at 5s with meta.resolution_requested; interval, when given, wins"}, {"name": "buckets", "in": "query", "schema": {"type": "integer", "enum": [0, 1], "default": 0}, "description": "1: one-minute buckets by leg, side and moneyness (a kept session); one session only (422 with a range)"}, {"name": "from", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "first session of a range of finished sessions (1.0.12): the rows of every finished session from `from` to `to` in one answer, oldest first, at most 31 sessions per call; `data.sessions` lists the sessions answered"}, {"name": "to", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "last session of the range; default the last finished session. Today is never in a range (422)."}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/Problem"}, "202": {"$ref": "#/components/responses/Warming"}}}}, "/v1/flow/leaders": {"get": {"summary": "Leaders over a session or a week: underlyings or contracts ranked by premium, volume, trades, sweeps or direction (1.0.22)", "security": [{"bearer": []}], "parameters": [{"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "exact completed session; 404 when unavailable; omit for the newest available"}, {"name": "window", "in": "query", "schema": {"type": "string", "enum": ["day", "week"], "default": "day"}, "description": "one session or the sessions of its week so far"}, {"name": "by", "in": "query", "schema": {"type": "string", "enum": ["premium", "volume", "trades", "sweeps", "bullish", "bearish"], "default": "premium"}, "description": "the ranking key"}, {"name": "kind", "in": "query", "schema": {"type": "string", "enum": ["underlyings", "contracts"], "default": "underlyings"}, "description": "rank underlyings or single contracts (contracts: window=day)"}, {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 25, "minimum": 1, "maximum": 200}, "description": "rows"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/Problem"}}}}, "/v1/flow/sectors": {"get": {"summary": "Flow by sector over a session against each sector's baseline (1.0.22)", "security": [{"bearer": []}], "parameters": [{"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "exact completed session; 404 when unavailable; omit for the newest available"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/Problem"}}}}, "/v1/flow/breadth": {"get": {"summary": "Market breadth by premium imbalance over a session (1.0.22)", "security": [{"bearer": []}], "parameters": [{"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "exact completed session; 404 when unavailable; omit for the newest available"}, {"name": "threshold", "in": "query", "schema": {"type": "number", "default": 0.2, "minimum": 0, "maximum": 1}, "description": "imbalance beyond which a symbol counts as advancing or declining, a fraction"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/Problem"}}}}, "/v1/flow/unusual": {"get": {"summary": "Contracts whose session volume is a multiple of their own trailing mean (1.0.22)", "security": [{"bearer": []}], "parameters": [{"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "exact completed session; 404 when unavailable; omit for the newest available"}, {"name": "min_volume_relative", "in": "query", "schema": {"type": "number", "default": 3, "minimum": 1}, "description": "session volume over the contract's trailing mean volume, at least"}, {"name": "min_volume", "in": "query", "schema": {"type": "integer", "default": 500, "minimum": 1}, "description": "session volume, contracts, at least"}, {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 100, "minimum": 1, "maximum": 500}, "description": "rows"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/flow/baseline": {"get": {"summary": "A symbol's session against its trailing baseline, by day and by 5-minute slot (1.0.22)", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "exact completed session; 404 when unavailable; omit for the newest available"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/flow/history": {"get": {"summary": "A symbol's flow totals per session over the trailing sessions (1.0.22)", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "exact completed session; 404 when unavailable; omit for the newest available"}, {"name": "days", "in": "query", "schema": {"type": "integer", "default": 20, "minimum": 1, "maximum": 60}, "description": "sessions, newest last"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/history/heatmap": {"get": {"summary": "Exposure grid through a session: call, put and net GEX per strike at each interval", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}}, {"name": "interval", "in": "query", "schema": {"type": "integer", "default": 5, "enum": [1, 2, 3, 4, 5, 10, 15, 30]}, "description": "minutes"}, {"name": "resolution", "in": "query", "schema": {"type": "string", "default": "1m", "enum": ["1s", "5s", "15s", "30s", "1m", "5m", "15m", "30m"]}, "description": "the step between snapshots as a named resolution. Minute steps: the per-expiration grid (native 1m). Sub-minute steps (1.0.18): the core names' default-view strike profile every second, start/end required, 15 minutes at most; interval, when given, wins"}, {"name": "start", "in": "query", "schema": {"type": "string"}, "description": "sub-minute resolutions: the window's start, RFC 3339 or HH:MM:SS ET; required"}, {"name": "end", "in": "query", "schema": {"type": "string"}, "description": "sub-minute resolutions: the window's end, at most 15 minutes after start; default start + 15 minutes"}, {"name": "expiration", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "one expiration; default the nearest few"}, {"name": "mode", "in": "query", "schema": {"type": "string", "enum": ["raw", "difference"], "default": "raw"}}, {"name": "strikes", "in": "query", "schema": {"type": "integer", "default": 45, "minimum": 5, "maximum": 100}, "description": "strikes nearest spot"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/Problem"}, "202": {"$ref": "#/components/responses/Warming"}}}}, "/v1/symbols/{symbol}/history/replay": {"get": {"summary": "A finished session's playback answers: per-minute key levels and strike profile (part=levels) or per-minute surfaces with the closing aggregate and metrics (part=surfaces)", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "a session before today (required unless from/to is given)"}, {"name": "part", "in": "query", "schema": {"type": "string", "enum": ["levels", "surfaces"], "default": "levels"}, "description": "with a range: levels only (422 for surfaces)"}, {"name": "expirations", "in": "query", "schema": {"type": "integer", "default": 1, "minimum": 1, "maximum": 50}}, {"name": "from", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "first session of a range of finished sessions (1.0.12): the rows of every finished session from `from` to `to` in one answer, oldest first, at most 31 sessions per call; `data.sessions` lists the sessions answered"}, {"name": "to", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "last session of the range; default the last finished session. Today is never in a range (422)."}, {"name": "resolution", "in": "query", "schema": {"type": "string", "default": "1m", "enum": ["1s", "5s", "15s", "30s", "1m", "5m", "15m", "30m"]}, "description": "part=levels: the step between rows as a named resolution; sub-minute steps carry spot, key levels and totals (the strike profile stays per minute), and a session recorded per minute answers at 1m with meta.resolution_requested"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/NotBuilt"}, "422": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/history/chain": {"get": {"summary": "The chain every interval of a finished session, every contract with its Greeks: NDJSON, a manifest line then one snapshot per interval (gzip when accepted, immutable)", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "date", "in": "query", "required": true, "schema": {"type": "string", "format": "date"}}, {"name": "interval", "in": "query", "schema": {"type": "string", "enum": ["1m", "5m", "10m", "15m", "30m"], "default": "5m"}}], "responses": {"200": {"description": "OK", "content": {"application/x-ndjson": {"schema": {"type": "string"}}}}, "404": {"$ref": "#/components/responses/NotBuilt"}, "422": {"$ref": "#/components/responses/Problem"}}}}, "/v1/symbols/{symbol}/history/iv": {"get": {"summary": "Daily 30-day at-the-money implied volatility and 25-delta skew, one row per session", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "days", "in": "query", "schema": {"type": "integer", "default": 252, "minimum": 1, "maximum": 365}}, {"name": "from", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "first session (1.0.12)"}, {"name": "to", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "last session (1.0.12)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}}}}, "/v1/symbols/{symbol}/history/oi": {"get": {"summary": "Open interest per contract for one session (positions at the previous close), with the session's traded volume", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}}, {"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "a kept session; default today"}, {"name": "expiration", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "one expiration; default all"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/Problem"}, "202": {"$ref": "#/components/responses/Warming"}}}}, "/v1/sessions": {"get": {"summary": "The catalog of finished sessions: each with the names with levels and what it holds (levels, grids, flow, trades, playback, answers, closing)", "security": [{"bearer": []}], "parameters": [{"name": "from", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "first session listed (1.0.12)"}, {"name": "to", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "last session listed (1.0.12)"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}}}}, "/v1/sessions/{date}": {"get": {"summary": "The names one finished session holds, by product (1.0.29): levels (every name with recorded levels), playback (names with a built Replay), closing (names with a closing entry), with the catalog row's holds; trades are per session (holds.trades)", "security": [{"bearer": []}], "parameters": [{"name": "date", "in": "path", "required": true, "schema": {"type": "string", "format": "date"}, "example": "2026-10-16"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/Problem"}}}}, "/v1/reference": {"get": {"summary": "Reference data: the rate curve, dividend yields, multiplier and expiry conventions, sectors", "security": [{"bearer": []}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Reference"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}}}}, "/v1/symbols/{symbol}/reference": {"get": {"summary": "One symbol's reference data: roots, adjusted flag, index flag, dividend yield, expiry convention, sector, industry; and its recorded sessions (first, last, count; 1.0.29)", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "path", "required": true, "schema": {"type": "string"}, "example": "SPY"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/SymbolReference"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "422": {"$ref": "#/components/responses/Problem"}, "429": {"$ref": "#/components/responses/Problem"}}}}, "/v1/trades": {"get": {"summary": "Every option print of a session (or orders: sweeps, splits, blocks), filtered, sorted, cursor-paged", "security": [{"bearer": []}], "parameters": [{"name": "date", "in": "query", "schema": {"type": "string"}, "description": "session YYYY-MM-DD, default today"}, {"name": "from", "in": "query", "schema": {"type": "integer"}, "description": "epoch ms, inclusive"}, {"name": "to", "in": "query", "schema": {"type": "integer"}, "description": "epoch ms, exclusive"}, {"name": "view", "in": "query", "schema": {"type": "string"}, "description": "prints (default) or orders"}, {"name": "tickers", "in": "query", "schema": {"type": "string"}, "description": "comma list"}, {"name": "osi", "in": "query", "schema": {"type": "string"}, "description": "comma list of OSI symbols"}, {"name": "types", "in": "query", "schema": {"type": "string"}, "description": "C,P"}, {"name": "money", "in": "query", "schema": {"type": "string"}, "description": "ITM,ATM,OTM"}, {"name": "sides", "in": "query", "schema": {"type": "string"}, "description": "ABOVE_ASK,ASK,MID_MARKET,BID,BELOW_BID"}, {"name": "sentiments", "in": "query", "schema": {"type": "string"}, "description": "BULLISH,BEARISH,NEUTRAL"}, {"name": "exchanges", "in": "query", "schema": {"type": "string"}, "description": "venue codes"}, {"name": "consolidation", "in": "query", "schema": {"type": "string"}, "description": "SWEEP,SPLIT,BLOCK"}, {"name": "sectors", "in": "query", "schema": {"type": "string"}, "description": "comma list"}, {"name": "industries", "in": "query", "schema": {"type": "string"}, "description": "comma list"}, {"name": "strikes", "in": "query", "schema": {"type": "string"}, "description": "comma list"}, {"name": "expirations", "in": "query", "schema": {"type": "string"}, "description": "comma list YYYY-MM-DD"}, {"name": "premium_min", "in": "query", "schema": {"type": "number"}, "description": "USD"}, {"name": "premium_max", "in": "query", "schema": {"type": "number"}, "description": "USD"}, {"name": "size_min", "in": "query", "schema": {"type": "integer"}, "description": "contracts"}, {"name": "golden", "in": "query", "schema": {"type": "string"}, "description": "1 or 0"}, {"name": "unusual", "in": "query", "schema": {"type": "string"}, "description": "1 or 0"}, {"name": "sort", "in": "query", "schema": {"type": "string"}, "description": "trade_time (default), premium, size, volume, open_interest, price, strike, expiration, dte, spot, bid, ask, spread"}, {"name": "dir", "in": "query", "schema": {"type": "string"}, "description": "desc (default) or asc"}, {"name": "limit", "in": "query", "schema": {"type": "integer"}, "description": "1-1000, default 50"}, {"name": "after", "in": "query", "schema": {"type": "string"}, "description": "the previous page's next, joined by a comma"}, {"name": "stats", "in": "query", "schema": {"type": "string"}, "description": "1: totals by leg and trade side"}, {"name": "comprising", "in": "query", "schema": {"type": "string"}, "description": "orders: 1 adds their prints"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Trades"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "404": {"$ref": "#/components/responses/Problem"}, "202": {"$ref": "#/components/responses/Warming"}}}}, "/v1/trades/stats": {"get": {"summary": "Grouped totals over the same prints: premium, trades, volume, bullish/bearish, net premium and volume, first spot; OHLC per contract and bucket", "security": [{"bearer": []}], "parameters": [{"name": "by", "in": "query", "schema": {"type": "string"}, "description": "any of type, side, ticker, exchange, class, expiration, strike, contract, sentiment, bucket"}, {"name": "period", "in": "query", "schema": {"type": "integer", "default": 60000}, "description": "bucket length, ms"}, {"name": "iv", "in": "query", "schema": {"type": "string"}, "description": "1: mean implied volatility per group"}, {"name": "sort", "in": "query", "schema": {"type": "string", "enum": ["premium", "volume", "trades", "net_premium", "iv"]}, "description": "order of the groups (default: by the group columns); iv needs iv=1"}, {"name": "dir", "in": "query", "schema": {"type": "string", "enum": ["desc", "asc"], "default": "desc"}}, {"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 20000, "default": 20000}, "description": "groups kept, first of the order from offset; groups_total and truncated say what was left out"}, {"name": "offset", "in": "query", "schema": {"type": "integer", "minimum": 0, "default": 0}, "description": "groups of the order skipped before the page; the answer then carries next_offset"}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/TradeStats"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "202": {"$ref": "#/components/responses/Warming"}}}}, "/v1/export": {"get": {"summary": "Tier 3: sessions available for bulk export", "security": [{"bearer": []}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "403": {"$ref": "#/components/responses/Problem"}}}}, "/v1/export/{date}": {"get": {"summary": "Tier 3: a session's export manifest (datasets, rows, bytes, sha256, columns)", "security": [{"bearer": []}], "parameters": [{"name": "date", "in": "path", "required": true, "schema": {"type": "string", "format": "date"}}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object"}}}}, "404": {"$ref": "#/components/responses/Problem"}}}}, "/v1/export/{date}/{dataset}": {"get": {"summary": "Tier 3: one dataset of a session as a Parquet file (levels, interval_map, netflow, trades, orders)", "security": [{"bearer": []}], "parameters": [{"name": "date", "in": "path", "required": true, "schema": {"type": "string", "format": "date"}}, {"name": "dataset", "in": "path", "required": true, "schema": {"type": "string", "enum": ["levels", "interval_map", "netflow", "trades", "orders"]}}], "responses": {"200": {"description": "the file", "content": {"application/vnd.apache.parquet": {}}}, "403": {"$ref": "#/components/responses/Problem"}, "404": {"$ref": "#/components/responses/Problem"}}}}, "/v1/tape": {"get": {"summary": "Option prints: the last minutes live, or any kept session with date", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "query", "schema": {"type": "string"}}, {"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "a kept session; then from/to (epoch ms) bound the window and since is ignored"}, {"name": "from", "in": "query", "schema": {"type": "integer"}}, {"name": "to", "in": "query", "schema": {"type": "integer"}}, {"name": "since", "in": "query", "schema": {"type": "string", "default": "5m"}, "description": "30s, 5m, 1h (max 60m)"}, {"name": "limit", "in": "query", "schema": {"type": "integer", "default": 500, "maximum": 2000}}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Tape"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "202": {"$ref": "#/components/responses/Warming"}}}}, "/v1/sweeps": {"get": {"summary": "Multi-exchange sweeps: the last minutes live, or any kept session with date", "security": [{"bearer": []}], "parameters": [{"name": "symbol", "in": "query", "schema": {"type": "string"}}, {"name": "date", "in": "query", "schema": {"type": "string", "format": "date"}, "description": "a kept session; then from/to (epoch ms) bound the window"}, {"name": "from", "in": "query", "schema": {"type": "integer"}}, {"name": "to", "in": "query", "schema": {"type": "integer"}}, {"name": "since", "in": "query", "schema": {"type": "string", "default": "15m"}}, {"name": "window_ms", "in": "query", "schema": {"type": "integer", "default": 250}}, {"name": "min_exchanges", "in": "query", "schema": {"type": "integer", "default": 3}}, {"name": "side", "in": "query", "schema": {"type": "string", "enum": ["buy", "sell", "mixed"]}}], "responses": {"200": {"description": "OK", "content": {"application/json": {"schema": {"type": "object", "required": ["data", "meta"], "properties": {"data": {"$ref": "#/components/schemas/Sweeps"}, "meta": {"$ref": "#/components/schemas/Meta"}}}}}}, "202": {"$ref": "#/components/responses/Warming"}}}}}, "components": {"securitySchemes": {"bearer": {"type": "http", "scheme": "bearer", "description": "Your API key. On the WebSocket it goes in the token query parameter (1.0.61)."}}, "responses": {"Problem": {"description": "Error (RFC 9457)", "content": {"application/problem+json": {"schema": {"$ref": "#/components/schemas/Problem"}}}}, "Warming": {"description": "The session is not ready yet: ask again after Retry-After", "headers": {"Retry-After": {"schema": {"type": "integer"}, "description": "seconds"}}, "content": {"application/json": {"schema": {"type": "object", "properties": {"status": {"type": "string", "enum": ["warming"]}, "retry_after_s": {"type": ["number", "null"], "x-unit": "seconds", "description": "seconds"}, "symbol": {"type": "string"}, "date": {"type": "string", "format": "date"}, "from": {"type": "string", "format": "date"}, "to": {"type": "string", "format": "date"}}}}}}, "NotBuilt": {"description": "not_built: asked for, expected by ready_by (ask again after Retry-After); not_available (history/chain): before the earliest day a chain file can be built, nothing asked for; no_session: the market was closed that day", "headers": {"Retry-After": {"schema": {"type": "integer"}, "description": "not_built: seconds until ready_by, at least 60"}}, "content": {"application/problem+json": {"schema": {"allOf": [{"$ref": "#/components/schemas/Problem"}, {"type": "object", "properties": {"code": {"type": "string", "description": "not_built, not_available or no_session"}, "ready_by": {"type": "string", "format": "date-time", "description": "not_built: when the answer is expected, RFC 3339 UTC, to the minute"}, "queue_position": {"type": "integer", "x-unit": "requests", "description": "not_built: requests waiting to be built up to this one, counting it (1 = next)"}}}]}}}}}, "schemas": {"Meta": {"type": "object", "properties": {"symbol": {"type": "string"}, "as_of": {"type": "string", "format": "date-time", "description": "the moment of the market data the result was computed from; Age counts from it"}, "as_of_ms": {"type": "integer"}, "computed_at": {"type": "string", "format": "date-time", "description": "when the result was computed"}, "spot": {"type": "object", "properties": {"price": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "forward": {"type": "object", "description": "VIX only: the forward price", "properties": {"price": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}}}}}, "oi_floor": {"type": "integer", "description": "the open-interest floor applied, contracts: 1 since 1.0.54 (every contract with open interest counts); a finished session computed before 2026-10-26 reports 100, or 1 for NDX and thin names"}, "stale": {"type": "boolean", "description": "true when the answer could not be refreshed and is served as last computed; as_of says how old"}, "futures": {"type": "object", "description": "SPY, SPX, QQQ, NDX, IWM, RUT, DIA, DJX only: the front ES, NQ, RTY or YM futures contract and its fair value; MES, MNQ, M2K and MYM are the same price", "properties": {"contract": {"type": "string", "description": "e.g. ESZ6"}, "expiration": {"type": "string", "format": "date"}, "price": {"type": ["number", "null"], "x-unit": "index points", "description": "index points"}, "index_spot": {"type": ["number", "null"], "x-unit": "index points", "description": "index points"}, "basis": {"type": ["number", "null"], "x-unit": "index points", "description": "index points; price minus index spot"}, "root": {"type": "string"}}}, "expirations": {"type": "object", "properties": {"mode": {"type": "string", "enum": ["nearest", "term"]}, "count": {"type": "integer"}, "dates": {"type": "array", "items": {"type": "string", "format": "date"}}}}, "time_to_expiry_years": {"type": "object", "additionalProperties": {"type": ["number", "null"], "x-unit": "years", "description": "years"}, "description": "per expiration (YYYY-MM-DD: years), the time left to that expiration as of computed_at (1.0.8)"}, "settlement": {"type": "object", "additionalProperties": {"type": "string", "enum": ["am", "pm"]}, "description": "per expiration (YYYY-MM-DD: am or pm), present when the answer holds contracts: am settles on the opening print (09:30 ET), pm on the close; the same value as each contract's settlement (1.0.15)"}}, "description": "The result's age in seconds is the standard Age response header; Date minus meta.as_of gives the same."}, "Problem": {"type": "object", "properties": {"type": {"type": "string"}, "title": {"type": "string"}, "status": {"type": "integer"}, "detail": {"type": "string"}}}, "StreamNegotiateRequest": {"type": "object", "description": "(1.0.61) every member optional; at most 16 KiB", "properties": {"client": {"type": "string", "maxLength": 64}, "platform": {"type": "string", "maxLength": 16}, "version": {"type": "string", "maxLength": 64}, "features": {"type": "array", "maxItems": 32, "items": {"type": "string", "maxLength": 32}, "description": "ws, zstd, deflate, msgpack, catalogue.inline are agreed; any other word comes back in ignored"}, "have": {"type": "object", "properties": {"catalogue": {"type": "string", "description": "the catalogue hash already held"}}}}}, "StreamNegotiation": {"type": "object", "description": "(1.0.61) POST /v1/stream/negotiate", "properties": {"api": {"type": "integer", "description": "the socket's api value: 1"}, "negotiation_id": {"type": "string", "description": "the short hello's neg"}, "features": {"type": "array", "items": {"type": "string"}}, "ignored": {"type": "array", "items": {"type": "string"}}, "transports": {"type": "object", "properties": {"rest": {"type": "object", "properties": {"base": {"type": "string"}, "body_encodings": {"type": "array", "items": {"type": "string"}}, "compression": {"type": "array", "items": {"type": "string"}}}}, "ws": {"type": "object", "properties": {"enabled": {"type": "boolean"}, "url": {"type": "string", "description": "the socket path, /v1/stream"}, "dialects": {"type": "array", "items": {"type": "string", "enum": ["zstd", "deflate", "json"]}}, "body_encodings": {"type": "array", "items": {"type": "string"}}, "compact": {"type": "array", "items": {"type": "string"}}, "beat_ms": {"type": "integer", "x-unit": "milliseconds"}, "list_sep": {"type": "string"}, "every_ms": {"type": "array", "items": {"type": "integer", "x-unit": "milliseconds"}}, "gap_notice": {"type": "boolean"}}}}}, "topics": {"type": "array", "items": {"type": "object", "properties": {"name": {"type": "string", "description": "the family"}, "path": {"type": "string", "description": "the REST route whose body the topic carries"}, "params": {"type": "array", "items": {"type": "string"}}, "scopes": {"type": "array", "items": {"type": "string"}}, "schema": {"type": "integer"}, "encoding": {"type": "string"}, "kind": {"type": "string", "enum": ["snap", "append"]}}}}, "catalogue": {"type": "object", "properties": {"hash": {"type": "string"}, "url": {"type": ["string", "null"]}, "inline": {"type": ["object", "null"]}}}, "limits": {"type": "object", "properties": {"rate_bucket": {"type": "string"}, "rate_limit": {"type": ["integer", "null"], "x-unit": "requests per window"}, "rate_window_s": {"type": "integer", "x-unit": "seconds"}, "rate_left": {"type": ["integer", "null"], "x-unit": "requests"}, "sockets_cap": {"type": ["integer", "null"], "x-unit": "connections"}, "sockets_open": {"type": "integer", "x-unit": "connections"}, "topics_cap": {"type": "integer", "x-unit": "topics"}, "symbols_per_connection": {"type": "integer", "x-unit": "symbols"}, "quotes_symbols_per_connection": {"type": "integer", "x-unit": "symbols"}, "subscribes_per_minute": {"type": "integer", "x-unit": "topics"}}}, "neg_token": {"type": "object", "properties": {"neg": {"type": "string"}, "expires_in_s": {"type": "integer", "x-unit": "seconds"}}}}}, "StreamTicket": {"type": "object", "description": "(1.0.39) POST /v1/stream/ticket", "properties": {"ticket": {"type": "string", "description": "opaque, starts dft_tk_ (1.0.61), one use, bound to the key and way in it was issued for"}, "expires_in": {"type": "integer", "x-unit": "seconds", "description": "seconds; the ticket's life from issue: 60"}}}, "Status": {"type": "object", "description": "One status object (1.0.43), the same the MCP's account line, the site's badge and the chat's panel show. Free: never counted against the key, never rate-limited by it.", "required": ["plan", "plan_until", "mode", "mode_label", "account", "usage", "reach", "products"], "properties": {"ticker_access": {"$ref": "#/components/schemas/TickerAccess"}, "plan": {"type": "string", "description": "the key's plan (tier): free, basic, trader, developer, quant"}, "plan_until": {"type": ["string", "null"], "format": "date-time", "description": "(1.0.44) when the plan ends (the end of the paid period, as the site last reported it); null = open-ended"}, "mode": {"type": "string", "enum": ["live", "finished", "attest", "ended"], "description": "what the key may read now: live (attested on the current agreement release), finished (support's grace: finished sessions only), attest (sign the subscriber agreement first), ended (1.0.44: a professional's plan ended; renew it); the MCP adds demo for a connection without a key"}, "mode_label": {"type": "string", "description": "the mode in words, the same on every surface: Live data | Finished sessions only | Sign the data agreement to unlock live | Plan ended, renew to continue (| Demo: finished sessions only, sign in for live)"}, "account": {"type": "object", "properties": {"name": {"type": "string"}, "attested": {"type": "boolean"}, "status": {"type": ["string", "null"], "description": "non_professional | professional | null"}, "internal": {"type": "boolean"}}}, "usage": {"type": "object", "properties": {"api": {"type": "object", "properties": {"per_day": {"type": ["integer", "null"], "description": "API calls a day on the plan; null = unlimited"}, "used_today": {"type": "integer"}, "left_today": {"type": ["integer", "null"]}, "resets_at": {"type": ["string", "null"], "format": "date-time", "description": "midnight New York"}}}, "rate": {"type": "object", "properties": {"per_second": {"type": ["number", "null"], "x-unit": "requests per second", "description": "sustained requests per second the plan allows"}, "burst": {"type": ["integer", "null"], "description": "requests allowed at once"}, "remaining_now": {"type": ["integer", "null"], "description": "requests the burst allowance still holds this moment"}, "refills_in_s": {"type": ["integer", "null"]}}}, "chat": {"type": ["object", "null"], "description": "Ask Marlon's questions a day for this key; null when the count is not available", "properties": {"per_day": {"type": ["integer", "null"]}, "used_today": {"type": "integer"}, "left_today": {"type": ["integer", "null"]}, "resets_at": {"type": ["string", "null"]}}}, "stream": {"type": "object", "description": "the plan's /v1/stream (1.0.57)", "properties": {"symbols_per_connection": {"type": "integer", "x-unit": "symbols", "description": "symbols per connection; 0 = quotes only (1.0.61: up to 50 quotes on one connection)"}, "connections": {"type": ["integer", "null"], "x-unit": "connections", "description": "connections open at once; null = no limit"}, "open_now": {"type": "integer", "x-unit": "connections", "description": "this key's connections open now"}}}}}, "reach": {"type": "object", "properties": {"history_from": {"type": ["string", "null"], "format": "date", "description": "the first session the plan may ask for; null = everything kept"}, "symbols": {"type": "string", "enum": ["all", "limited"], "description": "all: every symbol; limited: the plan reaches some symbols, and a symbol outside them is refused 403 symbol_not_in_tier (\"your plan doesn't include this symbol\"); 1.0.61: no list of names"}, "export": {"type": "boolean"}}}, "products": {"type": "object", "description": "what the plan opens", "properties": {"dashboard": {"type": "boolean"}, "terminal": {"type": "boolean"}, "api": {"type": "boolean"}, "mcp": {"type": "boolean"}, "chat": {"type": "boolean"}}}}}, "Plans": {"type": "object", "description": "The plans on sale (1.0.56), in order", "properties": {"plans": {"type": "array", "items": {"type": "object", "properties": {"tier": {"type": "string", "description": "the plan's id, as /v1/me tier: free, basic, trader, developer, quant"}, "name": {"type": "string"}, "availability": {"type": "string", "enum": ["open", "waitlist"], "description": "open: sign up now; waitlist: keys open to the waitlist first"}, "price": {"type": "object", "properties": {"month": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; a month"}, "year": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; a year, where sold yearly"}, "lifetime": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; once, where sold for life"}}}, "limits": {"type": "object", "description": "what the API enforces for the plan's keys", "properties": {"rate": {"type": ["number", "null"], "x-unit": "requests per second", "description": "requests per second; sustained, per key"}, "burst": {"type": ["number", "null"], "x-unit": "requests", "description": "requests; allowed at once"}, "calls_per_day": {"type": ["integer", "null"], "x-unit": "calls", "description": "API calls a New York day; null = unlimited; the website's own requests never count"}, "history": {"type": ["string", "null"], "description": "reach back from today: Ns sessions or Nd days; null = everything recorded"}, "history_reach": {"type": "string", "description": "history in words"}, "symbols": {"type": "string", "enum": ["all", "limited"], "description": "all: every symbol; limited: the plan reaches some symbols, and a symbol outside them is refused 403 symbol_not_in_tier (\"your plan doesn't include this symbol\"); 1.0.61: no list of names"}, "export": {"type": "boolean", "description": "bulk Parquet export (/v1/export)"}}}, "products": {"type": "object", "description": "what the plan opens (the API enforces stream and compatible_apis since 1.0.57, Ask Marlon chat_per_day; dashboard, terminal and api_mcp are the website's)", "properties": {"dashboard": {"type": ["string", "null"], "enum": ["today", "full", null], "description": "the website dashboard: today = today's session only"}, "terminal": {"type": ["boolean", "null"], "description": "the trading terminal"}, "api_mcp": {"type": ["string", "null"], "enum": ["trial", "full", "extended", null], "description": "the API and the MCP: trial = a small daily amount to try (limits.calls_per_day); extended = Quant's (unlimited, several connections, redistribution by agreement)"}, "stream": {"type": "object", "properties": {"symbols": {"type": ["integer", "null"], "x-unit": "symbols", "description": "symbols per WebSocket connection; 0 = quotes only (1.0.61: up to 50 quotes on one connection)"}, "connections": {"type": ["integer", "null"], "x-unit": "connections", "description": "stream connections at once"}}}, "compatible_apis": {"type": ["boolean", "null"], "description": "the compatible APIs"}, "bulk_export": {"type": "boolean", "description": "the session files as Parquet (/v1/export); the same as limits.export"}, "support": {"type": ["string", "null"], "enum": ["standard", "priority", "sla", null], "description": "null = community only"}}}, "chat_per_day": {"type": ["integer", "null"], "x-unit": "questions", "description": "Ask Marlon's questions a day; null = unlimited"}, "includes": {"type": "array", "items": {"type": "string"}, "description": "what the plan opens, in short lines"}}}}, "currency": {"type": "string", "enum": ["USD"]}, "notes": {"type": "string"}}}, "TickerAccess": {"type": "object", "required": ["mode", "allowed", "restricted"], "properties": {"mode": {"type": "string", "enum": ["allow_all", "allow_only"]}, "allowed": {"type": "array", "items": {"type": "string"}}, "restricted": {"type": "array", "items": {"type": "string"}}}, "description": "Your account's ticker permissions across its keys. Restricted takes precedence. An empty allow_only list denies every ticker. Plan and data-access requirements still apply."}, "Me": {"type": "object", "description": "The key (1.0.28): what the API enforces for it, as data", "properties": {"ticker_access": {"$ref": "#/components/schemas/TickerAccess"}, "name": {"type": "string"}, "tier": {"type": "string", "enum": ["free", "trader", "developer", "quant", "admin", "basic", "board"]}, "access": {"type": "array", "items": {"type": "string", "enum": ["site", "api"]}, "description": "the ways in: every plan has both, each at its plan's limits (1.0.56)"}, "rate": {"type": ["number", "null"], "x-unit": "requests per second", "description": "requests per second"}, "burst": {"type": ["number", "null"], "x-unit": "requests", "description": "requests"}, "status": {"type": ["string", "null"], "description": "OPRA attestation status; null = not attested"}, "grace_until": {"type": ["string", "null"], "format": "date-time", "description": "(1.0.39) while status is null: finished sessions only until then (support's grace); null = none"}, "plan_until": {"type": ["string", "null"], "format": "date-time", "description": "(1.0.44) when the plan ends, as GET /v1/status carries it; null = open-ended"}, "history_from": {"type": ["string", "null"], "format": "date", "description": "first session this key may ask for; null = everything kept"}, "export": {"type": "boolean"}, "symbols": {"type": "string", "enum": ["all", "limited"], "description": "all: every symbol; limited: the plan reaches some symbols, and a symbol outside them is refused 403 symbol_not_in_tier (\"your plan doesn't include this symbol\"); 1.0.61: no list of names"}, "addons": {"type": "array", "items": {"type": "string"}, "description": "(1.0.58) the platform add-ons the account holds now, in catalog order: ninjatrader, motivewave, atas, sierrachart, quantower (desktop platforms), tradesea, alphatrader, topstepx (prop-platform extensions); a Lifetime, Academy or permanent-comp account holds all eight; an ended or revoked add-on is not listed; [] = none"}, "multi_indicator": {"type": "boolean", "description": "(1.0.58) whether the account holds the more-than-one-chart-or-device licence"}, "limits": {"type": "object", "properties": {"rate": {"type": ["number", "null"], "x-unit": "requests per second", "description": "requests per second"}, "burst": {"type": ["number", "null"], "x-unit": "requests", "description": "requests"}, "history_from": {"type": ["string", "null"], "format": "date"}, "per_day": {"type": ["integer", "null"], "description": "API calls per New York day; null = unlimited"}, "used_today": {"type": ["integer", "null"]}, "quota_resets_at": {"type": ["string", "null"], "format": "date-time"}, "stream_symbols_per_connection": {"type": "integer", "x-unit": "symbols", "description": "the plan's symbols per /v1/stream connection (1.0.57); 0 = quotes only (1.0.61)"}, "stream_connections": {"type": ["integer", "null"], "x-unit": "connections", "description": "the plan's /v1/stream connections at once (1.0.57); null = no limit"}, "chat_per_day": {"type": ["integer", "null"], "x-unit": "questions", "description": "Ask Marlon's questions a day on the plan (1.0.57); null = unlimited"}, "in_flight": {"type": "object", "additionalProperties": {"type": "integer"}}, "address_rate": {"type": ["number", "null"], "x-unit": "requests per second", "description": "requests per second"}, "address_window_s": {"type": ["number", "null"], "x-unit": "seconds", "description": "seconds"}, "time_limit_s": {"type": "object", "additionalProperties": {"type": ["number", "null"], "x-unit": "seconds", "description": "seconds; null for streaming: no time limit"}}, "retry": {"type": "object", "properties": {"attempts": {"type": "integer"}}}}}, "notices": {"type": "array", "items": {"type": "string"}}}}, "Symbols": {"type": "object", "properties": {"symbols": {"type": "array", "items": {"type": "string"}}, "count": {"type": "integer"}}}, "Expirations": {"type": "object", "properties": {"expirations": {"type": "array", "items": {"type": "string", "format": "date"}}, "term_selection": {"type": "array", "items": {"type": "string", "format": "date"}}}}, "Spot": {"type": "object", "properties": {"price": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}}}, "KeyLevels": {"type": "object", "properties": {"gamma_flip": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; spot where net dealer gamma changes sign"}, "call_wall": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; strike with the largest positive net GEX"}, "put_wall": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; strike with the largest negative net GEX"}, "max_pain": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; expiration price minimising option holders' intrinsic value"}, "vol_trigger": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; the volatility trigger strike"}, "momentum_wall": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; the momentum wall strike"}, "momentum_value": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}}}, "Wall": {"type": "object", "properties": {"strike": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "gex": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}}}, "Levels": {"type": "object", "properties": {"key_levels": {"$ref": "#/components/schemas/KeyLevels"}, "walls": {"type": "object", "properties": {"calls": {"type": "array", "items": {"$ref": "#/components/schemas/Wall"}}, "puts": {"type": "array", "items": {"$ref": "#/components/schemas/Wall"}}}}, "totals": {"type": "object", "properties": {"net_gex": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}, "call_gex": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}, "put_gex": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}, "net_volume_gex": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot; for today's traded volume instead of open interest"}, "gex_ratio": {"type": ["number", "null"], "x-unit": "fraction 0-1", "description": "fraction 0-1; call GEX as a share of call and put GEX together"}, "delta_exposure": {"type": ["number", "null"], "x-unit": "shares", "description": "shares"}, "vanna_exposure": {"type": ["number", "null"], "x-unit": "shares per 1 vol point", "description": "shares per 1 vol point"}, "charm_exposure": {"type": ["number", "null"], "x-unit": "shares per day", "description": "shares per day"}, "atm_iv": {"type": ["number", "null"], "x-unit": "fraction", "description": "fraction; at-the-money implied volatility"}}}, "flow": {"type": "object", "properties": {"net_flow": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; call_premium - put_premium"}, "flow_ratio": {"type": ["number", "null"], "x-unit": "fraction 0-1", "description": "fraction 0-1; call flow as a share of call and put flow"}, "call_premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "put_premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "signed_call_premium": {"type": ["number", "null"], "x-unit": "USD, buys minus sells", "description": "USD, buys minus sells"}, "signed_put_premium": {"type": ["number", "null"], "x-unit": "USD, buys minus sells", "description": "USD, buys minus sells"}, "bullish_premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; call buys + put sells"}, "bearish_premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; call sells + put buys"}}}, "classification": {"type": "object", "properties": {"available": {"type": "boolean"}, "matched_contracts": {"type": "integer"}, "classified_volume": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "unclassified_volume": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "coverage": {"type": ["number", "null"], "x-unit": "fraction 0-1", "description": "fraction 0-1"}}}}}, "Strike": {"type": "object", "properties": {"strike": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "gex": {"type": "object", "properties": {"net": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}, "call": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}, "put": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}, "abs": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}, "net_volume": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot; for today's traded volume"}, "call_volume": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot; for today's traded volume"}, "put_volume": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot; for today's traded volume"}}}, "exposures": {"type": "object", "properties": {"delta": {"type": ["number", "null"], "x-unit": "shares", "description": "shares"}, "vanna": {"type": ["number", "null"], "x-unit": "shares per 1 vol point", "description": "shares per 1 vol point"}, "charm": {"type": ["number", "null"], "x-unit": "shares per day", "description": "shares per day"}}}, "open_interest": {"type": "object", "properties": {"call": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "put": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "total": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}}}, "volume": {"type": "object", "properties": {"call": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "put": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}}}, "iv": {"type": ["number", "null"], "x-unit": "fraction", "description": "fraction; implied volatility at the strike"}, "moneyness": {"type": ["number", "null"], "x-unit": "fraction", "description": "fraction; the strike's distance from spot, as a fraction of spot"}}}, "Strikes": {"allOf": [{"$ref": "#/components/schemas/Levels"}, {"type": "object", "properties": {"strikes": {"type": "array", "items": {"$ref": "#/components/schemas/Strike"}}, "count": {"type": "integer"}}}]}, "Reference": {"type": "object", "properties": {"rates": {"type": "object", "properties": {"points": {"type": "array", "items": {"type": "array", "items": {"type": ["number", "null"], "x-unit": "years, then rate as a fraction", "description": "years, then rate as a fraction"}}, "description": "[years, rate] pairs"}, "rate": {"type": ["number", "null"], "x-unit": "fraction", "description": "fraction; a flat rate, given instead of points when no curve is in use"}}}, "dividend_yields": {"type": "object", "additionalProperties": {"type": ["number", "null"], "x-unit": "fraction", "description": "fraction"}}, "conventions": {"type": "object"}, "sectors": {"type": "object"}}}, "SymbolReference": {"type": "object", "properties": {"sessions": {"type": "object", "description": "the symbol's recorded sessions among the listed finished ones (1.0.29)", "properties": {"first": {"type": ["string", "null"], "format": "date"}, "last": {"type": ["string", "null"], "format": "date"}, "count": {"type": "integer"}}}, "symbol": {"type": "string"}, "roots": {"type": "array", "items": {"type": "string"}}, "underlying": {"type": "string"}, "adjusted": {"type": "boolean", "description": "an adjusted series (root ending in a digit): its deliverable is not the standard 100 shares"}, "is_index": {"type": "boolean"}, "multiplier": {"type": ["number", "null"], "x-unit": "shares per contract", "description": "shares per contract; assumed"}, "multiplier_known": {"type": "boolean"}, "expiry_time": {"type": "string", "enum": ["am", "pm"]}, "dividend_yield": {"type": ["number", "null"], "x-unit": "fraction", "description": "fraction"}, "sector": {"type": "string"}, "industry": {"type": "string"}, "sic": {"type": ["string", "null"]}}}, "Trades": {"type": "object", "properties": {"trades": {"type": "array", "items": {"$ref": "#/components/schemas/Trade"}}, "count": {"type": "integer"}, "next": {"type": ["array", "null"], "items": {"type": "string"}}, "statistics": {"type": "object"}}}, "Trade": {"type": "object", "properties": {"id": {"type": "string"}, "ticker": {"type": "string"}, "osi": {"type": "string"}, "sector": {"type": "string"}, "industry": {"type": "string"}, "right": {"type": "string", "enum": ["C", "P"]}, "expiration": {"type": "string", "format": "date"}, "dte": {"type": ["number", "null"], "x-unit": "calendar days", "description": "calendar days"}, "strike": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "exchange": {"type": ["string", "null"], "description": "ISO 10383 MIC"}, "premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "size": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "volume": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts; the contract's volume so far, this print included"}, "open_interest": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "price": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; per share; an order's size-weighted average"}, "bid": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "ask": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "spread": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "spot": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; spot at that moment"}, "iv": {"type": ["number", "null"], "x-unit": "fraction", "description": "fraction; the print's implied volatility"}, "side": {"type": ["string", "null"], "enum": ["ABOVE_ASK", "ASK", "MID_MARKET", "BID", "BELOW_BID", null]}, "sentiment": {"type": "string", "enum": ["BULLISH", "BEARISH", "NEUTRAL"]}, "order_type": {"type": ["string", "null"], "enum": ["SWEEP", "SPLIT", "BLOCK", null]}, "golden_sweep": {"type": "boolean"}, "unusual": {"type": "boolean"}, "index": {"type": "boolean"}, "volume_over_oi": {"type": "boolean"}, "greeks": {"type": "object", "additionalProperties": {"type": ["number", "null"], "x-unit": "raw Greeks, per unit of each input (the Units table); sigma is the implied volatility", "description": "raw Greeks, per unit of each input (the Units table); sigma is the implied volatility"}}, "moneyness": {"type": "object", "properties": {"distance": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; spot minus strike"}, "ratio": {"type": ["number", "null"], "x-unit": "fraction", "description": "fraction; spot relative to strike"}, "type": {"type": ["string", "null"], "enum": ["ITM", "ATM", "OTM", null]}}}, "trade_time": {"type": "string", "format": "date-time"}, "trade_time_ms": {"type": ["number", "null"], "x-unit": "epoch ms", "description": "epoch ms"}, "prints": {"type": "array", "description": "orders with comprising=1: the prints, each id, exchange, size, price, side, trade_time", "items": {"type": "object"}}}}, "TradeStats": {"type": "object", "properties": {"groups": {"type": "array", "items": {"type": "object"}}, "count": {"type": "integer"}, "groups_total": {"type": "integer"}, "truncated": {"type": "boolean"}, "next_offset": {"type": ["integer", "null"], "description": "with offset: the next page's offset, null on the last page"}}}, "Contract": {"type": "object", "properties": {"expiration": {"type": "string", "format": "date"}, "strike": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "right": {"type": "string", "enum": ["C", "P"]}, "dte": {"type": ["number", "null"], "x-unit": "calendar days to expiration", "description": "calendar days to expiration"}, "bid": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "ask": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "mid": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; the mid of the best bid and ask"}, "open_interest": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "volume": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "iv": {"type": "object", "properties": {"value": {"type": ["number", "null"], "x-unit": "fraction", "description": "fraction"}}}, "quote_as_of": {"type": ["string", "null"], "format": "date-time", "description": "the time of the quote this row reflects (1.0.8)"}, "settlement": {"type": ["string", "null"], "enum": ["am", "pm", null], "description": "am: settles on the opening print (09:30 ET); pm: the close (1.0.15)"}, "time_to_expiry_years": {"type": ["number", "null"], "x-unit": "years", "description": "years; time left to expiration as of computed_at (1.0.8)"}, "greeks": {"type": "object", "properties": {"delta": {"type": ["number", "null"], "x-unit": "per $1 of spot", "description": "per $1 of spot"}, "gamma": {"type": ["number", "null"], "x-unit": "per $1 of spot, per $1 of spot", "description": "per $1 of spot, per $1 of spot"}, "vega": {"type": ["number", "null"], "x-unit": "per 1.00 of vol", "description": "per 1.00 of vol"}, "theta": {"type": ["number", "null"], "x-unit": "per year", "description": "per year"}, "rho": {"type": ["number", "null"], "x-unit": "per 1.00 of rate", "description": "per 1.00 of rate"}, "charm": {"type": ["number", "null"], "x-unit": "per year", "description": "per year"}, "vanna": {"type": ["number", "null"], "x-unit": "per 1.00 of vol", "description": "per 1.00 of vol"}, "vomma": {"type": ["number", "null"], "x-unit": "per 1.00 of vol", "description": "per 1.00 of vol"}, "zomma": {"type": ["number", "null"], "x-unit": "per 1.00 of vol", "description": "per 1.00 of vol"}, "speed": {"type": ["number", "null"], "x-unit": "per $1 of spot", "description": "per $1 of spot"}, "color": {"type": ["number", "null"], "x-unit": "per year", "description": "per year"}, "omega": {"type": ["number", "null"], "x-unit": "elasticity: delta x spot / option price", "description": "elasticity: delta x spot / option price"}, "veta": {"type": ["number", "null"], "x-unit": "per year", "description": "per year; change of vega per year of time"}, "ultima": {"type": ["number", "null"], "x-unit": "per 1.00 of vol", "description": "per 1.00 of vol; change of vomma per 1.00 of vol"}}}, "gex": {"type": "object", "properties": {"call": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}, "put": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}, "call_volume": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot; for today's traded volume"}, "put_volume": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot; for today's traded volume"}}}, "flow": {"type": "object", "properties": {"true_flow_gex": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot; gamma dealers took on through today's classified prints"}, "dealer_flow": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts; customer sells minus buys"}, "coverage": {"type": ["number", "null"], "x-unit": "fraction 0-1", "description": "fraction 0-1"}, "classified_volume": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "unclassified_volume": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}}}}}, "Contracts": {"type": "object", "properties": {"contracts": {"type": "array", "items": {"$ref": "#/components/schemas/Contract"}}, "count": {"type": "integer"}}}, "Heatmap": {"type": "object", "properties": {"strikes": {"type": "array", "items": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}}, "expirations": {"type": "array", "items": {"type": "string", "format": "date"}}, "net_gex": {"type": "array", "items": {"type": "array", "items": {"type": ["number", "null"], "x-unit": "USD per 1% move in spot", "description": "USD per 1% move in spot"}}, "description": "rows = strikes, columns = expirations"}, "spot": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}}}, "FlowSide": {"type": "object", "description": "buys minus sells within the minute", "properties": {"signed_call_premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "signed_put_premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "signed_call_contracts": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "signed_put_contracts": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}}}, "FlowBucket": {"type": "object", "properties": {"ts": {"type": "string", "format": "date-time"}, "ts_ms": {"type": "integer"}, "spot": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "classified_trades": {"type": "integer"}, "all": {"$ref": "#/components/schemas/FlowSide"}, "itm": {"$ref": "#/components/schemas/FlowSide"}, "atm": {"$ref": "#/components/schemas/FlowSide"}, "otm": {"$ref": "#/components/schemas/FlowSide"}}}, "Flow": {"type": "object", "properties": {"date": {"type": "string", "format": "date"}, "totals": {"type": "object", "properties": {"signed_call_premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "signed_put_premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "bullish_premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "bearish_premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "net_premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; bullish - bearish"}}}, "buckets": {"type": "array", "items": {"$ref": "#/components/schemas/FlowBucket"}}, "classification": {"type": "object", "properties": {"classified_trades": {"type": "integer"}, "unclassified_trades": {"type": "integer"}, "coverage": {"type": ["number", "null"], "x-unit": "fraction", "description": "fraction"}}}, "series": {"type": "object", "description": "only with ?series=1", "properties": {"session": {"type": "string", "enum": ["current", "previous"]}, "samples": {"type": "array", "items": {"type": "object", "properties": {"ts_ms": {"type": "integer"}, "spot": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "signed_call_premium_cum": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "signed_put_premium_cum": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}}}}}}}}, "LevelsHistory": {"type": "object", "properties": {"date": {"type": "string"}, "interval_minutes": {"type": "integer"}, "rows": {"type": "array", "items": {"type": "object", "properties": {"as_of": {"type": "string"}, "spot": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "expirations": {"type": "integer"}, "key_levels": {"$ref": "#/components/schemas/KeyLevels"}}}}, "count": {"type": "integer"}}}, "Bar": {"type": "object", "properties": {"ts": {"type": "string", "format": "date-time"}, "ts_ms": {"type": "integer"}, "open": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "high": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "low": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "close": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}}}, "Bars": {"type": "object", "properties": {"bars": {"type": "array", "items": {"$ref": "#/components/schemas/Bar"}}}}, "Vol": {"type": "object", "description": "The chain's volatility summary (1.0.19); volatilities and moves are fractions", "properties": {"spot": {"type": "number", "description": "USD"}, "tenors": {"type": "object", "description": "constant-maturity readings: 1d, 9d, 30d, 91d, 182d", "additionalProperties": {"type": "object", "properties": {"iv": {"type": "number", "description": "fraction (annualised vol)", "nullable": true}, "expected_move": {"type": "number", "description": "fraction of spot, the expected move to the tenor", "nullable": true}}}}, "term": {"type": "object", "properties": {"slope_30d_91d": {"type": "number", "description": "fraction: how far the 91-day vol is above the 30-day vol, relative to it", "nullable": true}, "state": {"type": "string", "enum": ["contango", "backwardation"], "nullable": true}, "ratio_1d_30d": {"type": "number", "description": "ratio", "nullable": true}}}, "expected_moves": {"type": "object", "description": "close, 1d, week, opex, 30d: {years, iv, sigma, low, high} or null", "additionalProperties": {"type": "object", "nullable": true, "properties": {"years": {"type": "number", "description": "years"}, "iv": {"type": "number", "description": "fraction (annualised vol)"}, "sigma": {"type": "number", "description": "fraction of spot, the expected move"}, "low": {"type": "number", "description": "USD"}, "high": {"type": "number", "description": "USD"}, "expiration": {"type": "string"}}}}, "skew_30d": {"type": "object", "properties": {"expiration": {"type": "string"}, "risk_reversal_25d": {"type": "number", "description": "fraction (call 25d vol minus put 25d vol)", "nullable": true}, "butterfly_25d": {"type": "number", "description": "fraction (25-delta average minus ATM)", "nullable": true}, "atm_iv": {"type": "number", "description": "fraction", "nullable": true}, "put_25d_iv": {"type": "number", "description": "fraction", "nullable": true}, "call_25d_iv": {"type": "number", "description": "fraction", "nullable": true}}}, "expirations": {"type": "array", "items": {"type": "object", "properties": {"expiration": {"type": "string", "format": "date"}, "dte": {"type": "integer"}, "years": {"type": "number", "description": "years"}, "forward": {"type": "number", "description": "USD"}, "atm_iv": {"type": "number", "description": "fraction", "nullable": true}, "strip_iv": {"type": "number", "description": "fraction (the expiration's model-free strip vol)", "nullable": true}, "call_25d_iv": {"type": "number", "description": "fraction", "nullable": true}, "put_25d_iv": {"type": "number", "description": "fraction", "nullable": true}, "risk_reversal_25d": {"type": "number", "description": "fraction (call 25d vol minus put 25d vol)", "nullable": true}, "butterfly_25d": {"type": "number", "description": "fraction (25-delta average minus ATM)", "nullable": true}, "contracts_used": {"type": "integer"}}}}, "smiles": {"type": "array", "items": {"type": "object", "properties": {"expiration": {"type": "string"}, "dte": {"type": "integer"}, "points": {"type": "array", "items": {"type": "object", "properties": {"strike": {"type": "number", "description": "USD"}, "iv": {"type": "number", "description": "fraction (annualised vol)"}, "delta": {"type": "number", "description": "absolute delta, fraction", "nullable": true}, "right": {"type": "string"}}}}}}}}}, "Print": {"type": "object", "properties": {"ts": {"type": "string", "format": "date-time"}, "ts_ms": {"type": "integer"}, "symbol": {"type": "string"}, "expiration": {"type": "string", "format": "date"}, "strike": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "right": {"type": "string", "enum": ["C", "P"]}, "size": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "price": {"type": ["number", "null"], "x-unit": "USD per share", "description": "USD per share"}, "premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "exchange": {"type": ["string", "null"], "description": "ISO 10383 MIC of the exchange, e.g. XCBO"}, "bid": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; NBBO bid at the print"}, "ask": {"type": ["number", "null"], "x-unit": "USD", "description": "USD; NBBO ask at the print"}}}, "Tape": {"type": "object", "properties": {"prints": {"type": "array", "items": {"$ref": "#/components/schemas/Print"}}, "count": {"type": "integer"}, "since": {"type": "string"}}}, "Sweep": {"type": "object", "properties": {"ts": {"type": "string", "format": "date-time"}, "ts_ms": {"type": "integer"}, "symbol": {"type": "string"}, "expiration": {"type": "string", "format": "date"}, "strike": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "right": {"type": "string", "enum": ["C", "P"]}, "size": {"type": ["number", "null"], "x-unit": "contracts", "description": "contracts"}, "avg_price": {"type": ["number", "null"], "x-unit": "USD per share, size-weighted", "description": "USD per share, size-weighted"}, "premium": {"type": ["number", "null"], "x-unit": "USD", "description": "USD"}, "exchanges": {"type": "integer"}, "trades": {"type": "integer"}, "side": {"type": "string", "enum": ["buy", "sell", "mixed"]}}}, "Sweeps": {"type": "object", "properties": {"sweeps": {"type": "array", "items": {"$ref": "#/components/schemas/Sweep"}}, "count": {"type": "integer"}, "since": {"type": "string"}, "window_ms": {"type": "integer"}, "min_exchanges": {"type": "integer"}, "side": {"type": ["string", "null"]}}}}}}