{"openapi":"3.1.0","info":{"title":"Moontower API","description":"\n# Moontower API\n\nRESTful API for options analytics and market data.\n\n## Common Parameters\n\nAll data endpoints accept these standard parameters:\n\n### Ticker Parameters\n- **Single ticker**: `?ticker=SPY`\n- **Multiple tickers**: `?ticker=SPY&ticker=AAPL&ticker=QQQ`\n- **Limits**: Maximum 100 tickers per request\n\n### Date Parameters (priority order)\n1. **`trade_date`** - Single date: `trade_date=2024-01-15`\n2. **`start_date`/`end_date`** - Date range: `start_date=2024-01-01&end_date=2024-01-31`\n3. **No dates** → Latest available data (15-min delayed)\n\n**Date range limits**: Maximum 31 days per request\n\n### Examples\n\n```\n# Latest data (15-min delayed)\n/v1/price?ticker=SPY\n\n# Multiple tickers\n/v1/price?ticker=SPY&ticker=AAPL\n\n# Specific date\n/v1/price?ticker=SPY&trade_date=2024-01-15\n\n# Date range\n/v1/price?ticker=SPY&start_date=2024-01-01&end_date=2024-01-31\n```\n\n## Response Formats\n\nAll endpoints support both JSON and CSV response formats:\n\n- **JSON (default)**: `Accept: application/json` or no header\n- **CSV**: `Accept: text/csv` or `?format=csv`\n\n## Response Fields\n\nAll dates use YYYY-MM-DD format. All timestamps are UTC (YYYY-MM-DDTHH:MM:SS format).\n\nAll responses include these timestamp fields:\n- **`snapshot_at`**: When the market data was captured\n- **`updated_at`**: When the record was last updated in our database\n\n## Query Timeouts & Limits\n\n- **Query timeout**: 30 seconds maximum\n- **Ticker limit**: 100 tickers per request\n- **Date range limit**: 31 days maximum\n\n**If you hit timeout errors**, reduce your request size:\n- Use fewer tickers\n- Use smaller date ranges\n- For option chains, filter by specific expiry dates\n- Split large requests into multiple smaller ones\n\n## Authentication\n\nAll endpoints require an API key in the `X-API-Key` header:\n\n```\nX-API-Key: your-api-key-here\n```\n\n## Rate Limits\n\n1000 per minute per API key.\n\nRate limit headers in responses:\n- `X-RateLimit-Limit`: Request limit per window\n- `X-RateLimit-Remaining`: Requests remaining in current window\n- `X-RateLimit-Reset`: Window reset time (Unix timestamp)\n\n## Data Availability\n\n- **Current day**: 15-minute delay for intraday data\n- **Historical**: End-of-day (EOD) data available next trading day (T+1), plus option chain\n\nHTTP status codes: 200 (success), 400 (bad request), 401 (unauthorized), 404 (not found), 429 (rate limited), 500 (server error)\n\n## LLM-friendly Documentation\n\n- **[llms.txt](/llms.txt)** - Minimal documentation with links to individual endpoints\n- **[llms-full.txt](/llms-full.txt)** - Complete API documentation with all parameters and schemas\n\n","version":"0.2.0"},"paths":{"/v1/price":{"get":{"tags":["Market Data"],"summary":"/v1/price - Market Prices","description":"Get market price data (OHLCV).\n\n**Returns:** Open, High, Low, Close, Volume, and Mid price data:\n- Standard OHLCV bars for equities and ETFs\n- Mid price: (bid + ask) / 2 when available\n- Volume data from exchanges\n- Snapshot timestamp for data freshness\n\n**Data sources:**\n- Latest: Real-time price feeds (15-min delayed)\n- Historical: End-of-day price data from multiple providers\n\n**Coverage:** Supports equities, ETFs, and other exchange-traded instruments\nwith comprehensive price history and delayed intraday data.\n\nAccepts standard ticker and date parameters (see main API docs).","operationId":"get_prices","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided","title":"Trade Date"},"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date (YYYY-MM-DD) for date range","title":"Start Date"},"description":"Start date (YYYY-MM-DD) for date range"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date (YYYY-MM-DD) for date range","title":"End Date"},"description":"End date (YYYY-MM-DD) for date range"},{"name":"ticker","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request.","max_items":100,"title":"Ticker"},"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PriceResponse"}}}}}}},"/v1/earnings":{"get":{"tags":["Market Data"],"summary":"/v1/earnings - Earnings Dates","description":"Get next and prior earnings dates per ticker.\n\nData is sourced from the shared earnings calendar table.\nRows flagged with data quality issues are excluded.","operationId":"get_earnings_dates","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"reference_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Reference date (YYYY-MM-DD). Defaults to today (US/Eastern) for next/prior split.","title":"Reference Date"},"description":"Reference date (YYYY-MM-DD). Defaults to today (US/Eastern) for next/prior split."},{"name":"ticker","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request.","max_items":100,"title":"Ticker"},"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarningsDatesResponse"}}}}}}},"/v1/impliedvol":{"get":{"tags":["Options Data"],"summary":"/v1/impliedvol - Implied Volatility Surface","description":"Get implied volatility surface data.\n\n**Returns:** Implied volatility surface organized by moneyness:\n- Volatility at different delta levels: vol0 (0% delta) to vol100 (100% delta)\n- Covers all available expiration dates with days to expiry\n- Includes spot price at time of IV calculation\n- Uses smoothed volatility from Greeks calculations for accurate surface\n\n**Additional parameter:**\n- `expiry_date` - Filter by specific expiration date\n\n**Data sources:**\n- Latest: Real-time IV surface from option chain (15-min delayed)\n- Historical: End-of-day IV surface calculations from option data\n\n**Methodology:** Extracts IV at specific delta levels from option Greeks,\nproviding a complete volatility surface across strikes and expirations.\n\nAccepts standard ticker and date parameters (see main API docs).","operationId":"get_implied_volatility","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided","title":"Trade Date"},"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date (YYYY-MM-DD) for date range","title":"Start Date"},"description":"Start date (YYYY-MM-DD) for date range"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date (YYYY-MM-DD) for date range","title":"End Date"},"description":"End date (YYYY-MM-DD) for date range"},{"name":"expiry_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter by specific expiration date","title":"Expiry Date"},"description":"Filter by specific expiration date"},{"name":"ticker","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request.","max_items":100,"title":"Ticker"},"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpliedVolResponse"}}}}}}},"/v1/realvol":{"get":{"tags":["Options Data"],"summary":"/v1/realvol - Realized Volatility","description":"Get realized volatility calculations.\n\n**Returns:** Realized volatility using multiple estimators and lookback periods:\n- Standard windows: 1, 7, 14, 30, 60, 90, 180, 365 days\n- Multiple volatility estimators: Close-to-close, Parkinson, Hodges-Tompkins, Yang-Zhang\n- Annualized volatility calculations (252 business days basis)\n\n**Data sources:**\n- Historical: End-of-day realized volatility calculations\n\n**Important:** Realized volatility calculations are performed at the end of each trading day.\nIf you request data intraday (before calculations have completed), no data will be returned.\nTo get the most recent data, specify the previous trading day using the `trade_date` parameter.\n\n**Methodology:** Calculates historical volatility from OHLC price data. The 30-day\nrealized volatility is computed as an equal-weighted blend of four estimators\n(Close-to-close, Parkinson, Hodges-Tompkins, Yang-Zhang) to capture different\naspects of price movement and provide robust volatility measures.\n\nAccepts standard ticker and date parameters (see main API docs).","operationId":"get_realized_volatility","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided","title":"Trade Date"},"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date (YYYY-MM-DD) for date range","title":"Start Date"},"description":"Start date (YYYY-MM-DD) for date range"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date (YYYY-MM-DD) for date range","title":"End Date"},"description":"End date (YYYY-MM-DD) for date range"},{"name":"ticker","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request.","max_items":100,"title":"Ticker"},"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RealVolResponse"}}}}}}},"/v1/cmiv":{"get":{"tags":["Options Data"],"summary":"/v1/cmiv - Constant Maturity IV","description":"Get constant maturity implied volatility data.\n\n**Returns:** Constant maturity implied volatility interpolated to fixed time periods:\n- Standard maturities: 10, 20, 30, 60, 90 days, 6 months, 1 year\n- Calculated by interpolating IV from option chain at ATM strike\n- Uses smoothed volatility from Greeks calculations for accuracy\n\n**Data sources:**\n- Latest: Real-time CMIV data (15-min delayed)\n- Historical: End-of-day CMIV calculations\n\n**Methodology:** Linear interpolation between option expiries using delta-filtered strikes\nto maintain consistent moneyness across different maturities.\n\nAccepts standard ticker and date parameters (see main API docs).","operationId":"get_constant_maturity_implied_volatility","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided","title":"Trade Date"},"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date (YYYY-MM-DD) for date range","title":"Start Date"},"description":"Start date (YYYY-MM-DD) for date range"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date (YYYY-MM-DD) for date range","title":"End Date"},"description":"End date (YYYY-MM-DD) for date range"},{"name":"ticker","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request.","max_items":100,"title":"Ticker"},"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CmivResponse"}}}}}}},"/v1/ivrank":{"get":{"tags":["Options Data"],"summary":"/v1/ivrank - IV Rank & Percentiles","description":"Get implied volatility rank and percentile rankings.\n\n**Returns:** IV rank and percentile data for multiple lookback periods:\n- Current 30-day implied volatility level\n- IV rank: where current IV sits vs min/max over lookback period (0-100)\n- IV percentile: percentage of days with lower IV over lookback period (0-100)\n- Multiple timeframes: 1 month, 3 months, 1 year lookbacks\n\n**Data sources:**\n- Latest: Real-time IV rank calculations (15-min delayed)\n- Historical: End-of-day IV rank data\n\n**Methodology:** Uses 30-day constant maturity IV from option chain to calculate\nrank (min-max scaling) and percentile (empirical distribution) over specified periods.\n\nAccepts standard ticker and date parameters (see main API docs).","operationId":"get_iv_rank","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided","title":"Trade Date"},"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date (YYYY-MM-DD) for date range","title":"Start Date"},"description":"Start date (YYYY-MM-DD) for date range"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date (YYYY-MM-DD) for date range","title":"End Date"},"description":"End date (YYYY-MM-DD) for date range"},{"name":"ticker","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request.","max_items":100,"title":"Ticker"},"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IvrankResponse"}}}}}}},"/v1/rviv":{"get":{"tags":["Options Data"],"summary":"/v1/rviv - Realized vs Implied Vol","description":"Get realized versus implied volatility analysis.\n\n**Returns:** Volatility risk premium and realized/implied comparisons:\n- 30-day realized volatility (actual historical volatility)\n- ATM implied volatility (30-day constant maturity)\n- Volatility risk premium (VRP): Calculated as 100 * ln(IV_30d / RV_30d)\n- Realized volatility percentile: where current RV sits vs historical distribution\n\n**Data sources:**\n- Latest: Real-time RV/IV calculations (15-min delayed)\n- Historical: End-of-day volatility comparisons\n\n**Methodology:** Compares 30-day realized volatility (calculated from price returns)\nwith 30-day implied volatility (from option pricing). The volatility risk premium (VRP)\nis calculated as 100 * ln(IV_30d / RV_30d), providing a logarithmic measure of the\npremium investors pay for volatility protection.\n\nAccepts standard ticker and date parameters (see main API docs).","operationId":"get_realized_vs_implied_volatility","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided","title":"Trade Date"},"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date (YYYY-MM-DD) for date range","title":"Start Date"},"description":"Start date (YYYY-MM-DD) for date range"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date (YYYY-MM-DD) for date range","title":"End Date"},"description":"End date (YYYY-MM-DD) for date range"},{"name":"ticker","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request.","max_items":100,"title":"Ticker"},"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RvivResponse"}}}}}}},"/v1/skew":{"get":{"tags":["Options Data"],"summary":"/v1/skew - Volatility Skew","description":"Get volatility skew metrics.\n\n**Returns:** Volatility skew across strikes and maturities:\n- Call skew: OTM call vol vs ATM vol at 10-delta and 25-delta levels\n- Put skew: OTM put vol vs ATM vol at 10-delta and 25-delta levels\n- Skew percentiles: where current skew sits vs historical distribution\n- Multiple expiration dates with maturity information\n\n**Data sources:**\n- Latest: Real-time skew from option chain (15-min delayed)\n- Historical: End-of-day volatility skew calculations\n\n**Methodology:** Measures the difference in implied volatility between\nout-of-the-money options and at-the-money options, capturing the volatility smile/smirk\nacross different strike prices and delta levels.\n\nAccepts standard ticker and date parameters (see main API docs).","operationId":"get_volatility_skew","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided","title":"Trade Date"},"description":"Specific trade date (YYYY-MM-DD) - overrides start/end dates if provided"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date (YYYY-MM-DD) for date range","title":"Start Date"},"description":"Start date (YYYY-MM-DD) for date range"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date (YYYY-MM-DD) for date range","title":"End Date"},"description":"End date (YYYY-MM-DD) for date range"},{"name":"ticker","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request.","max_items":100,"title":"Ticker"},"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SkewResponse"}}}}}}},"/v1/optionchain":{"get":{"tags":["Options Data"],"summary":"/v1/optionchain - Option Chain","description":"Get option chain data with all strikes and expirations.\n\n**Data availability:** End-of-day option chain data only\n- Today's data available 15 minutes after market close (4:15 PM ET)\n- No intraday updates during trading hours\n- Historical data available for previous trading days\n\n**Returns:** Option chain data including:\n- Strike prices, expiration dates, days to expiry\n- Bid/ask/mid prices for calls and puts, volume, open interest\n- Greeks suite: delta, gamma, theta, vega, rho for calls and puts\n- Implied volatility: bid/mid/ask IV for calls and puts\n- Underlying spot price at time of snapshot\n\n**Additional parameter:**\n- `expiry_date` - Filter by specific expiration date\n\n**Limits:** Maximum 10 tickers per request (option chains return large\ndatasets). Split larger universes into multiple requests.\n\n**Data sources:** Option chain data with calculated Greeks and implied volatilities.\n\n**Note:** We apply proprietary criteria to determine calculation suitability, ensuring\ndata quality and reliability across different strike prices and expiration dates.\n\nAccepts standard ticker and date parameters (see main API docs).","operationId":"get_option_chain","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Trade date (YYYY-MM-DD). If not provided, returns latest available data","title":"Trade Date"},"description":"Trade date (YYYY-MM-DD). If not provided, returns latest available data"},{"name":"expiry_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter by specific expiration date","title":"Expiry Date"},"description":"Filter by specific expiration date"},{"name":"ticker","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request.","max_items":100,"title":"Ticker"},"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OptionChainResponse"}}}}}}},"/v1/early-exercise":{"get":{"tags":["Options Data"],"summary":"/v1/early-exercise - American Early Exercise","description":"Analyze whether early exercise is optimal for an American put.\n\nPrices the contract twice with QuantLib (American CRR binomial vs European analytic)\nusing market inputs from the option chain (spot, smv_vol) plus NY Fed SOFR.\n\n**Puts only (v1):** American call early exercise on non-dividend underliers (q=0) is\nnever optimal; call requests are rejected. Only an allowlist of known non-dividend\nnames is accepted until discrete ex-dividend support exists. Pricing uses\ndividend_yield = 0 after the gate passes.\n\nPut exercise decision compares total interest on the strike vs the forfeited\nsame-strike call value, plus a daily interest vs daily call-theta test.\n\nReturns the early-exercise premium, intrinsic value, decision flag, and rationale.","operationId":"get_early_exercise_analysis","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"ticker","in":"query","required":true,"schema":{"type":"string","description":"Underlying ticker symbol, e.g. SPY","title":"Ticker"},"description":"Underlying ticker symbol, e.g. SPY"},{"name":"expiry_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Option expiration date (YYYY-MM-DD)","title":"Expiry Date"},"description":"Option expiration date (YYYY-MM-DD)"},{"name":"strike","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Strike price","title":"Strike"},"description":"Strike price"},{"name":"option_type","in":"query","required":true,"schema":{"enum":["c","p"],"type":"string","description":"Option side: p (put) only in v1. Call early-exercise requests are rejected.","title":"Option Type"},"description":"Option side: p (put) only in v1. Call early-exercise requests are rejected."},{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Trade date (YYYY-MM-DD). Defaults to latest available chain date.","title":"Trade Date"},"description":"Trade date (YYYY-MM-DD). Defaults to latest available chain date."},{"name":"spot","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Optional spot override","title":"Spot"},"description":"Optional spot override"},{"name":"iv","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Optional implied vol override (decimal, e.g. 0.25)","title":"Iv"},"description":"Optional implied vol override (decimal, e.g. 0.25)"},{"name":"risk_free_rate","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Optional risk-free rate override (decimal)","title":"Risk Free Rate"},"description":"Optional risk-free rate override (decimal)"},{"name":"dividend_yield","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Optional continuous dividend yield override (decimal). Non-zero values are rejected in v1.","title":"Dividend Yield"},"description":"Optional continuous dividend yield override (decimal). Non-zero values are rejected in v1."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EarlyExerciseResponse"}}}}}}},"/v1/pnl-attribution":{"post":{"tags":["Options Data"],"summary":"/v1/pnl-attribution - P&L Attribution","description":"Decompose option P&L into delta/gamma/theta/vega/rho plus residual.","operationId":"compute_pnl_attribution","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PnlAttributionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PnlAttributionResponse"}}}}},"security":[{"APIKeyHeader":[]}]}},"/v1/implied-yield":{"get":{"tags":["Options Data"],"summary":"/v1/implied-yield - Implied Yield Calculator","description":"Extract market-implied carry and dividend yield + borrow rate via put-call parity.","operationId":"get_implied_yield","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"ticker","in":"query","required":true,"schema":{"type":"string","description":"Underlying ticker symbol, e.g. SPY","title":"Ticker"},"description":"Underlying ticker symbol, e.g. SPY"},{"name":"expiry_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Option expiration date (YYYY-MM-DD)","title":"Expiry Date"},"description":"Option expiration date (YYYY-MM-DD)"},{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Trade date (YYYY-MM-DD). Defaults to latest chain date.","title":"Trade Date"},"description":"Trade date (YYYY-MM-DD). Defaults to latest chain date."},{"name":"atm_window","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":0,"description":"Strikes on each side of ATM for headline number","default":2,"title":"Atm Window"},"description":"Strikes on each side of ATM for headline number"},{"name":"risk_free_rate","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Optional risk-free rate override (decimal)","title":"Risk Free Rate"},"description":"Optional risk-free rate override (decimal)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpliedYieldResponse"}}}}}}},"/v1/options-pair-hedge":{"get":{"tags":["Options Data"],"summary":"/v1/options-pair-hedge - Options Pair Hedge","description":"Compute vega-, theta-, and gamma-weighted hedge ratios between two option legs (UI parity).\n\nConvention: **short leg A / long leg B**. Positive ratio = buy this many B contracts per 1 A sold.\nGreeks are computed with Black-Scholes (r=0, q=0) from spot/IV/DTE — matching the UI tool, not\nprecomputed chain greeks. Spot/IV/DTE default from the option chain row; use overrides to\nreproduce UI inputs digit-for-digit.\n\n**Beta:** correlation × (realized_vol_B / realized_vol_A) — realized vols from paired EOD\ncloses (or `rv_a`/`rv_b` overrides). Option IVs are used only for BS greeks, not for beta.\n\n**Data sources:** Option chain for spot/IV defaults; paired EOD closes for correlation and\nrealized vols used in beta.","operationId":"get_options_pair_hedge","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"ticker_a","in":"query","required":true,"schema":{"type":"string","description":"Underlying ticker for leg A","title":"Ticker A"},"description":"Underlying ticker for leg A"},{"name":"expiry_a","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Expiration date for leg A (YYYY-MM-DD)","title":"Expiry A"},"description":"Expiration date for leg A (YYYY-MM-DD)"},{"name":"strike_a","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Strike price for leg A","title":"Strike A"},"description":"Strike price for leg A"},{"name":"option_type_a","in":"query","required":true,"schema":{"$ref":"#/components/schemas/OptionTypeParam","description":"Option type for leg A: c (call) or p (put)"},"description":"Option type for leg A: c (call) or p (put)"},{"name":"ticker_b","in":"query","required":true,"schema":{"type":"string","description":"Underlying ticker for leg B","title":"Ticker B"},"description":"Underlying ticker for leg B"},{"name":"expiry_b","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Expiration date for leg B (YYYY-MM-DD)","title":"Expiry B"},"description":"Expiration date for leg B (YYYY-MM-DD)"},{"name":"strike_b","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Strike price for leg B","title":"Strike B"},"description":"Strike price for leg B"},{"name":"option_type_b","in":"query","required":true,"schema":{"$ref":"#/components/schemas/OptionTypeParam","description":"Option type for leg B: c (call) or p (put)"},"description":"Option type for leg B: c (call) or p (put)"},{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Trade date (YYYY-MM-DD). Defaults to latest available.","title":"Trade Date"},"description":"Trade date (YYYY-MM-DD). Defaults to latest available."},{"name":"spot_a","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Override spot for leg A BS greeks","title":"Spot A"},"description":"Override spot for leg A BS greeks"},{"name":"spot_b","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Override spot for leg B BS greeks","title":"Spot B"},"description":"Override spot for leg B BS greeks"},{"name":"iv_a","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Override implied vol (percent) for leg A","title":"Iv A"},"description":"Override implied vol (percent) for leg A"},{"name":"iv_b","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Override implied vol (percent) for leg B","title":"Iv B"},"description":"Override implied vol (percent) for leg B"},{"name":"dte_a","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"description":"Override days-to-expiry for leg A","title":"Dte A"},"description":"Override days-to-expiry for leg A"},{"name":"dte_b","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"description":"Override days-to-expiry for leg B","title":"Dte B"},"description":"Override days-to-expiry for leg B"},{"name":"rv_a","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Override realized vol (percent) for leg A — used for beta only, not greeks","title":"Rv A"},"description":"Override realized vol (percent) for leg A — used for beta only, not greeks"},{"name":"rv_b","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Override realized vol (percent) for leg B — used for beta only, not greeks","title":"Rv B"},"description":"Override realized vol (percent) for leg B — used for beta only, not greeks"},{"name":"correlation","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":-1},{"type":"null"}],"description":"Correlation between A and B (defaults to paired-close history)","title":"Correlation"},"description":"Correlation between A and B (defaults to paired-close history)"},{"name":"lookback_days","in":"query","required":false,"schema":{"type":"integer","maximum":756,"minimum":20,"description":"Lookback window in calendar days for correlation/realized vol from paired closes","default":252,"title":"Lookback Days"},"description":"Lookback window in calendar days for correlation/realized vol from paired closes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PairHedgeResponse"}}}}}}},"/v1/hedge-ratios":{"get":{"tags":["Options Data"],"summary":"/v1/hedge-ratios - Pair Delta Hedge Ratios","description":"Compute simple delta-weighted hedge ratios for a non-option core position hedged with another ticker.\n\nMatches the Pairs page calculator: `beta = correlation × (vol_core / vol_hedge)`,\n`hedge_ratio = -(notional × beta)`, and idiosyncratic vol remaining on the core.\n\nRealized vols and correlation default from paired EOD closes over `lookback_days`.","operationId":"get_hedge_ratios","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"ticker_a","in":"query","required":true,"schema":{"type":"string","description":"Core position ticker","title":"Ticker A"},"description":"Core position ticker"},{"name":"ticker_b","in":"query","required":true,"schema":{"type":"string","description":"Hedge ticker","title":"Ticker B"},"description":"Hedge ticker"},{"name":"notional_position","in":"query","required":true,"schema":{"type":"number","description":"Notional size of core position","title":"Notional Position"},"description":"Notional size of core position"},{"name":"lookback_days","in":"query","required":false,"schema":{"type":"integer","maximum":756,"minimum":20,"description":"Calendar days of price history for realized vol and correlation","default":252,"title":"Lookback Days"},"description":"Calendar days of price history for realized vol and correlation"},{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date for lookback (YYYY-MM-DD). Defaults to latest.","title":"Trade Date"},"description":"End date for lookback (YYYY-MM-DD). Defaults to latest."},{"name":"vol_a","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Override annualized realized vol (percent) for core","title":"Vol A"},"description":"Override annualized realized vol (percent) for core"},{"name":"vol_b","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Override annualized realized vol (percent) for hedge","title":"Vol B"},"description":"Override annualized realized vol (percent) for hedge"},{"name":"correlation","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":1,"minimum":-1},{"type":"null"}],"description":"Correlation override (defaults to paired-close history)","title":"Correlation"},"description":"Correlation override (defaults to paired-close history)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HedgeRatiosResponse"}}}}}}},"/v1/cockpit":{"get":{"tags":["Options Data"],"summary":"/v1/cockpit - Cockpit Statistics","description":"Get all pre-calculated cockpit statistics in one response.\n\n**Returns all cockpit data types:**\n- Price statistics and technical indicators\n- Implied volatility statistics \n- Return statistics and analysis\n- RV/IV ratio statistics\n\n**Response structure:** All statistics for each ticker and date.","operationId":"get_cockpit_statistics","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date (YYYY-MM-DD)","title":"Start Date"},"description":"Start date (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date (YYYY-MM-DD)","title":"End Date"},"description":"End date (YYYY-MM-DD)"},{"name":"ticker","in":"query","required":true,"schema":{"type":"array","items":{"type":"string"},"minItems":1,"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request.","max_items":100,"title":"Ticker"},"description":"Ticker symbol(s). Use multiple params for multiple tickers: ?ticker=SPY&ticker=QQQ. Maximum 100 tickers allowed per request."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CockpitResponse"}}}}}}},"/v1/tickers":{"get":{"tags":["Reference Data"],"summary":"/v1/tickers - Ticker Directory","description":"List all available tickers with their metadata.\n\n**Returns:** Ticker symbol, numeric ID, category, and available date range for each ticker.\n\nUse this endpoint to look up ticker details or discover which tickers are available.","operationId":"get_ticker_directory","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific ticker symbol (e.g. SPY)","title":"Ticker"},"description":"Filter by specific ticker symbol (e.g. SPY)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/trade-ideas":{"get":{"tags":["Trade Ideas"],"summary":"/v1/trade-ideas - Trade Ideas","description":"Return scored trade ideas across preset strategies.\n\n**Default behaviour (no params):**\nReturns ALL tickers, excluding Low liquidity and tickers with earnings\nwithin 4 weeks.\n\n**Ticker universe (parity with mtwr-two frontend):**\nPass ``ticker`` param(s) to scope to a watchlist.  The response\ndynamically changes based on the provided universe.","operationId":"get_trade_ideas","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Ticker symbol(s). Repeat for multiple: ?ticker=SPY&ticker=QQQ. Omit to get all tickers. Maximum 100 tickers per request.","title":"Ticker"},"description":"Ticker symbol(s). Repeat for multiple: ?ticker=SPY&ticker=QQQ. Omit to get all tickers. Maximum 100 tickers per request."},{"name":"ideas","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated idea filters (idea1,idea2,idea3,idea4)","title":"Ideas"},"description":"Comma-separated idea filters (idea1,idea2,idea3,idea4)"},{"name":"categories","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated category filters","title":"Categories"},"description":"Comma-separated category filters"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search ticker symbols","title":"Search"},"description":"Search ticker symbols"},{"name":"liquidity_levels","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated: High,Medium,Low. Defaults to High,Medium (excludes Low).","title":"Liquidity Levels"},"description":"Comma-separated: High,Medium,Low. Defaults to High,Medium (excludes Low)."},{"name":"exclude_earnings_weeks","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Exclude tickers with earnings within N weeks. Defaults to 4.","title":"Exclude Earnings Weeks"},"description":"Exclude tickers with earnings within N weeks. Defaults to 4."},{"name":"trade_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"As-of trade date (YYYY-MM-DD). Defaults to the current/last trading day.","title":"Trade Date"},"description":"As-of trade date (YYYY-MM-DD). Defaults to the current/last trading day."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AttributionLegRequest":{"properties":{"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"},"expiry":{"type":"string","format":"date","title":"Expiry"},"strike":{"type":"number","exclusiveMinimum":0.0,"title":"Strike"},"option_type":{"type":"string","title":"Option Type"},"quantity":{"type":"number","title":"Quantity","default":1.0}},"type":"object","required":["expiry","strike","option_type"],"title":"AttributionLegRequest"},"CmivData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Stock ticker symbol"},"date":{"type":"string","title":"Date","description":"Trading date"},"snapshot_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot At","description":"When the market data was captured (UTC)"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At","description":"When this record was last updated in our database (UTC)"},"iv_10d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 10D","description":"10-day constant maturity IV"},"iv_20d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 20D","description":"20-day constant maturity IV"},"iv_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 30D","description":"30-day constant maturity IV"},"iv_60d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 60D","description":"60-day constant maturity IV"},"iv_90d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 90D","description":"90-day constant maturity IV"},"iv_6m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 6M","description":"6-month constant maturity IV"},"iv_1y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 1Y","description":"1-year constant maturity IV"}},"type":"object","required":["ticker","date"],"title":"CmivData","example":{"date":"2025-08-06","iv_10d":12.65,"iv_1y":15.14,"iv_20d":12.74,"iv_30d":12.79,"iv_60d":13.31,"iv_6m":14.49,"iv_90d":13.99,"snapshot_at":"2025-08-06T19:46:00","ticker":"SPY","updated_at":"2025-08-06T22:05:57.078000"}},"CmivResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CmivData"},"type":"array","title":"Data","description":"List of constant maturity IV data"}},"type":"object","required":["data"],"title":"CmivResponse"},"CockpitData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Stock ticker symbol"},"date":{"type":"string","title":"Date","description":"Trading date"},"close":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Close","description":"Closing price"},"ma_50d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ma 50D","description":"50-day moving average"},"sd_from_50ma":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sd From 50Ma","description":"Distance from 50-day MA normalized by 90-day implied volatility"},"ma_200d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ma 200D","description":"200-day moving average"},"sd_from_200ma":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Sd From 200Ma","description":"Standard deviations from 200-day MA"},"iv_10d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 10D","description":"10-day implied volatility"},"iv_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 30D","description":"30-day implied volatility"},"iv_90d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 90D","description":"90-day implied volatility"},"iv_6m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 6M","description":"6-month implied volatility"},"iv_10d_daily_change":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 10D Daily Change","description":"10d IV daily change"},"iv_30d_daily_change":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 30D Daily Change","description":"30d IV daily change"},"iv_30d_weekly_change":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 30D Weekly Change","description":"30d IV weekly change"},"iv_30d_monthly_change":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv 30D Monthly Change","description":"30d IV monthly change"},"term_structure_30d_10d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Term Structure 30D 10D","description":"Term structure 30d-10d"},"term_structure_90d_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Term Structure 90D 30D","description":"Term structure 90d-30d"},"current_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price","description":"Current price"},"daily_return":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Daily Return","description":"Daily return"},"weekly_return":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weekly Return","description":"Weekly return"},"monthly_return":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Return","description":"Monthly return"},"quarterly_return":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quarterly Return","description":"Quarterly return"},"weekly_annualized_return":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weekly Annualized Return","description":"Weekly annualized return"},"monthly_annualized_return":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Annualized Return","description":"Monthly annualized return"},"quarterly_annualized_return":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quarterly Annualized Return","description":"Quarterly annualized return"},"weekly_return_zscore":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weekly Return Zscore","description":"Weekly return z-score"},"monthly_return_zscore":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Monthly Return Zscore","description":"Monthly return z-score"},"quarterly_return_zscore":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quarterly Return Zscore","description":"Quarterly return z-score"},"rv_7d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 7D","description":"7-day realized volatility"},"rv_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 30D","description":"30-day realized volatility"},"rv_90d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 90D","description":"90-day realized volatility"},"vrp_weekly":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vrp Weekly","description":"Weekly VRP: (IV_10d / RV_7d) - 1"},"vrp_monthly":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vrp Monthly","description":"Monthly VRP: (IV_30d / RV_30d) - 1"},"vrp_quarterly":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vrp Quarterly","description":"Quarterly VRP: (IV_90d / RV_90d) - 1"},"lagged_vrp_weekly":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lagged Vrp Weekly","description":"Lagged weekly VRP"},"lagged_vrp_monthly":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lagged Vrp Monthly","description":"Lagged monthly VRP"},"lagged_vrp_quarterly":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lagged Vrp Quarterly","description":"Lagged quarterly VRP"},"snapshot_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot At","description":"When the market data was captured (UTC)"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At","description":"When this record was last updated in our database (UTC)"}},"type":"object","required":["ticker","date"],"title":"CockpitData","example":{"close":632.78,"current_price":632.78,"daily_return":0.007659,"date":"2025-08-06","iv_10d":0.126526,"iv_10d_daily_change":-0.009812,"iv_30d":0.127912,"iv_30d_daily_change":-0.012164,"iv_30d_monthly_change":-0.010866,"iv_30d_weekly_change":-0.001403,"iv_6m":0.144916,"iv_90d":0.139854,"lagged_vrp_monthly":0.341287,"lagged_vrp_quarterly":0.165894,"lagged_vrp_weekly":-0.195432,"ma_200d":588.2,"ma_50d":621.35,"monthly_annualized_return":0.240648,"monthly_return":0.020054,"monthly_return_zscore":0.532147,"quarterly_annualized_return":0.180492,"quarterly_return":0.045123,"quarterly_return_zscore":0.321456,"rv_30d":9.35977,"rv_7d":16.009054,"rv_90d":11.845723,"sd_from_200ma":0.504,"sd_from_50ma":0.127,"snapshot_at":"2025-08-06T19:46:00","term_structure_30d_10d":0.001386,"term_structure_90d_30d":0.011942,"ticker":"SPY","updated_at":"2025-08-07T22:05:57.078000","vrp_monthly":0.366615,"vrp_quarterly":0.180629,"vrp_weekly":-0.20966,"weekly_annualized_return":-0.137896,"weekly_return":-0.002648,"weekly_return_zscore":-0.183921}},"CockpitResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CockpitData"},"type":"array","title":"Data","description":"Comprehensive cockpit statistics with price, IV, returns, and RVIV data"}},"type":"object","required":["data"],"title":"CockpitResponse","example":{"data":[{"close":632.78,"current_price":632.78,"daily_return":0.007659,"date":"2025-08-06","iv_10d":0.126526,"iv_10d_daily_change":-0.009812,"iv_30d":0.127912,"iv_30d_daily_change":-0.012164,"iv_30d_monthly_change":-0.010866,"iv_30d_weekly_change":-0.001403,"iv_6m":0.144916,"iv_90d":0.139854,"lagged_vrp_monthly":0.341287,"lagged_vrp_quarterly":0.165894,"lagged_vrp_weekly":-0.195432,"ma_200d":588.2,"ma_50d":621.35,"monthly_annualized_return":0.240648,"monthly_return":0.020054,"monthly_return_zscore":0.532147,"quarterly_annualized_return":0.180492,"quarterly_return":0.045123,"quarterly_return_zscore":0.321456,"rv_30d":9.35977,"rv_7d":16.009054,"rv_90d":11.845723,"sd_from_200ma":0.504,"sd_from_50ma":0.127,"snapshot_at":"2025-08-06T19:46:00","term_structure_30d_10d":0.001386,"term_structure_90d_30d":0.011942,"ticker":"SPY","updated_at":"2025-08-07T22:05:57.078000","vrp_monthly":0.366615,"vrp_quarterly":0.180629,"vrp_weekly":-0.20966,"weekly_annualized_return":-0.137896,"weekly_return":-0.002648,"weekly_return_zscore":-0.183921}]}},"EarlyExerciseData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Underlying ticker symbol"},"expiry_date":{"type":"string","title":"Expiry Date","description":"Option expiration date (YYYY-MM-DD)"},"strike":{"type":"number","title":"Strike","description":"Strike price"},"option_type":{"type":"string","title":"Option Type","description":"Option side: c (call) or p (put)"},"as_of":{"type":"string","title":"As Of","description":"Trade date used for the analysis (YYYY-MM-DD)"},"spot":{"type":"number","title":"Spot","description":"Underlying spot price"},"iv":{"type":"number","title":"Iv","description":"Implied volatility (decimal, e.g. 0.25 = 25%)"},"risk_free_rate":{"type":"number","title":"Risk Free Rate","description":"Risk-free rate (decimal)"},"dividend_yield":{"type":"number","title":"Dividend Yield","description":"Dividend yield used for pricing (0 for non-dividend underliers in v1)"},"american_value":{"type":"number","title":"American Value","description":"American option fair value"},"european_value":{"type":"number","title":"European Value","description":"European option fair value"},"early_exercise_premium":{"type":"number","title":"Early Exercise Premium","description":"American value minus European value"},"intrinsic_value":{"type":"number","title":"Intrinsic Value","description":"Immediate exercise intrinsic value"},"total_interest_on_strike":{"type":"number","title":"Total Interest On Strike","description":"Total interest earned on the strike if exercised now through expiry (K * (e^(rT) - 1))"},"forfeited_call_value":{"type":"number","title":"Forfeited Call Value","description":"European call value at the same strike/expiry (optionality forfeited by early put exercise)"},"should_exercise_now":{"type":"boolean","title":"Should Exercise Now","description":"Whether early exercise is optimal now"},"exercise_rationale":{"type":"string","title":"Exercise Rationale","description":"Human-readable explanation of the decision"}},"type":"object","required":["ticker","expiry_date","strike","option_type","as_of","spot","iv","risk_free_rate","dividend_yield","american_value","european_value","early_exercise_premium","intrinsic_value","total_interest_on_strike","forfeited_call_value","should_exercise_now","exercise_rationale"],"title":"EarlyExerciseData","example":{"american_value":18.42,"as_of":"2024-01-15","dividend_yield":0.0,"early_exercise_premium":0.47,"european_value":17.95,"exercise_rationale":"total interest on strike $0.42 < forfeited call value $8.15 → do not exercise yet","expiry_date":"2024-02-16","forfeited_call_value":8.15,"intrinsic_value":5.0,"iv":0.45,"option_type":"p","risk_free_rate":0.052,"should_exercise_now":false,"spot":245.0,"strike":250.0,"ticker":"TSLA","total_interest_on_strike":0.42}},"EarlyExerciseResponse":{"properties":{"data":{"$ref":"#/components/schemas/EarlyExerciseData","description":"Early-exercise analysis result"}},"type":"object","required":["data"],"title":"EarlyExerciseResponse","example":{"data":{"american_value":18.42,"as_of":"2024-01-15","dividend_yield":0.0,"early_exercise_premium":0.47,"european_value":17.95,"exercise_rationale":"total interest on strike $0.42 < forfeited call value $8.15 → do not exercise yet","expiry_date":"2024-02-16","forfeited_call_value":8.15,"intrinsic_value":5.0,"iv":0.45,"option_type":"p","risk_free_rate":0.052,"should_exercise_now":false,"spot":245.0,"strike":250.0,"ticker":"TSLA","total_interest_on_strike":0.42}}},"EarningsDateData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Ticker symbol"},"next_earnings_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Earnings Date","description":"Next earnings date on or after reference date"},"prior_earnings_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prior Earnings Date","description":"Most recent earnings date before reference date"}},"type":"object","required":["ticker"],"title":"EarningsDateData"},"EarningsDatesResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/EarningsDateData"},"type":"array","title":"Data","description":"Earnings dates per requested ticker"}},"type":"object","required":["data"],"title":"EarningsDatesResponse"},"HedgeRatiosResponse":{"properties":{"ticker_a":{"type":"string","title":"Ticker A","description":"Core position ticker"},"ticker_b":{"type":"string","title":"Ticker B","description":"Hedge ticker"},"notional_position":{"type":"number","title":"Notional Position","description":"Notional size of core position"},"lookback_days":{"type":"integer","title":"Lookback Days","description":"Calendar days of price history used"},"vol_core":{"type":"number","title":"Vol Core","description":"Annualized realized vol of core (percent)"},"vol_hedge":{"type":"number","title":"Vol Hedge","description":"Annualized realized vol of hedge (percent)"},"correlation":{"type":"number","title":"Correlation","description":"Correlation between core and hedge returns"},"correlation_source":{"type":"string","title":"Correlation Source","description":"provided or computed"},"vol_ratio":{"type":"number","title":"Vol Ratio","description":"vol_core / vol_hedge"},"beta":{"type":"number","title":"Beta","description":"correlation * vol_ratio"},"hedge_ratio":{"type":"number","title":"Hedge Ratio","description":"Notional of hedge position (negative = short hedge)"},"idio_vol_remaining":{"type":"number","title":"Idio Vol Remaining","description":"Idiosyncratic vol remaining on core position"},"as_of":{"type":"string","title":"As Of","description":"Response generation timestamp (UTC)"}},"type":"object","required":["ticker_a","ticker_b","notional_position","lookback_days","vol_core","vol_hedge","correlation","correlation_source","vol_ratio","beta","hedge_ratio","idio_vol_remaining","as_of"],"title":"HedgeRatiosResponse"},"ImpliedVolData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Stock ticker symbol"},"date":{"type":"string","title":"Date","description":"Trading date"},"expiry_date":{"type":"string","title":"Expiry Date","description":"Option expiration date"},"dte":{"type":"integer","title":"Dte","description":"Days to expiration"},"spot_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spot Price","description":"Underlying spot price"},"snapshot_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot At","description":"When the market data was captured (UTC)"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At","description":"When this record was last updated in our database (UTC)"},"vol100":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol100","description":"100% moneyness IV"},"vol90":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol90","description":"90% moneyness IV"},"vol80":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol80","description":"80% moneyness IV"},"vol70":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol70","description":"70% moneyness IV"},"vol60":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol60","description":"60% moneyness IV"},"vol50":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol50","description":"50% moneyness IV"},"vol40":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol40","description":"40% moneyness IV"},"vol30":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol30","description":"30% moneyness IV"},"vol20":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol20","description":"20% moneyness IV"},"vol10":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol10","description":"10% moneyness IV"},"vol0":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol0","description":"0% moneyness IV"}},"type":"object","required":["ticker","date","expiry_date","dte"],"title":"ImpliedVolData","example":{"date":"2025-08-07","dte":0,"expiry_date":"2025-08-07","snapshot_at":"2025-08-07T19:46:00","spot_price":631.48,"ticker":"SPY","updated_at":"2025-08-07T22:06:06.580000","vol0":11.45,"vol10":11.89,"vol100":26.26,"vol20":12.35,"vol30":12.89,"vol40":13.45,"vol50":14.16,"vol60":14.96,"vol70":16.14,"vol80":17.89,"vol90":20.64}},"ImpliedVolResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ImpliedVolData"},"type":"array","title":"Data","description":"List of implied volatility surface data"}},"type":"object","required":["data"],"title":"ImpliedVolResponse"},"ImpliedYieldAtmWindow":{"properties":{"strikes":{"items":{"type":"number"},"type":"array","title":"Strikes"},"total_implied_rate":{"type":"number","title":"Total Implied Rate"},"implied_dividend_yield":{"type":"number","title":"Implied Dividend Yield","description":"ATM-window average of market-implied dividend yield + borrow rate (residual after risk-free; for non-dividend names this is borrow)."}},"type":"object","required":["strikes","total_implied_rate","implied_dividend_yield"],"title":"ImpliedYieldAtmWindow"},"ImpliedYieldData":{"properties":{"ticker":{"type":"string","title":"Ticker"},"expiry":{"type":"string","title":"Expiry"},"as_of":{"type":"string","title":"As Of"},"spot":{"type":"number","title":"Spot"},"dte":{"type":"integer","title":"Dte"},"risk_free_rate":{"type":"number","title":"Risk Free Rate"},"forward_price":{"type":"number","title":"Forward Price"},"total_implied_rate":{"type":"number","title":"Total Implied Rate"},"implied_dividend_yield":{"type":"number","title":"Implied Dividend Yield","description":"Headline market-implied dividend yield + borrow rate (residual after risk-free; for non-dividend names this is borrow)."},"atm_window":{"$ref":"#/components/schemas/ImpliedYieldAtmWindow"},"per_strike":{"items":{"$ref":"#/components/schemas/ImpliedYieldStrikeData"},"type":"array","title":"Per Strike"}},"type":"object","required":["ticker","expiry","as_of","spot","dte","risk_free_rate","forward_price","total_implied_rate","implied_dividend_yield","atm_window","per_strike"],"title":"ImpliedYieldData"},"ImpliedYieldResponse":{"properties":{"data":{"$ref":"#/components/schemas/ImpliedYieldData"}},"type":"object","required":["data"],"title":"ImpliedYieldResponse"},"ImpliedYieldStrikeData":{"properties":{"strike":{"type":"number","title":"Strike"},"call_price":{"type":"number","title":"Call Price"},"put_price":{"type":"number","title":"Put Price"},"total_rate":{"type":"number","title":"Total Rate"},"forward":{"type":"number","title":"Forward"},"dividend_yield":{"type":"number","title":"Dividend Yield","description":"Market-implied dividend yield + borrow rate (residual after risk-free; for non-dividend names this is borrow)."}},"type":"object","required":["strike","call_price","put_price","total_rate","forward","dividend_yield"],"title":"ImpliedYieldStrikeData"},"IvrankData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Stock ticker symbol"},"date":{"type":"string","title":"Date","description":"Trading date"},"snapshot_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot At","description":"When the market data was captured (UTC)"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At","description":"When this record was last updated in our database (UTC)"},"iv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv","description":"Current implied volatility"},"iv_rank_1m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv Rank 1M","description":"IV rank over 1 month"},"iv_pct_1m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv Pct 1M","description":"IV percentile over 1 month"},"iv_rank_3m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv Rank 3M","description":"IV rank over 3 months"},"iv_pct_3m":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv Pct 3M","description":"IV percentile over 3 months"},"iv_rank_1y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv Rank 1Y","description":"IV rank over 1 year"},"iv_pct_1y":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Iv Pct 1Y","description":"IV percentile over 1 year"}},"type":"object","required":["ticker","date"],"title":"IvrankData","example":{"date":"2025-08-06","iv":12.79,"iv_pct_1m":21.74,"iv_pct_1y":5.68,"iv_pct_3m":43.21,"iv_rank_1m":21.88,"iv_rank_1y":2.83,"iv_rank_3m":45.67,"snapshot_at":"2025-08-06T19:46:00","ticker":"SPY"}},"IvrankResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/IvrankData"},"type":"array","title":"Data","description":"List of IV rank data"}},"type":"object","required":["data"],"title":"IvrankResponse"},"MarketStateRequest":{"properties":{"spot":{"type":"number","exclusiveMinimum":0.0,"title":"Spot"},"vol":{"type":"number","exclusiveMinimum":0.0,"title":"Vol","description":"Implied vol as decimal, e.g. 0.25"},"trade_date":{"type":"string","format":"date","title":"Trade Date"},"rate":{"type":"number","minimum":0.0,"title":"Rate","description":"Risk-free rate as decimal"},"dividend_yield":{"type":"number","minimum":0.0,"title":"Dividend Yield","default":0.0}},"type":"object","required":["spot","vol","trade_date","rate"],"title":"MarketStateRequest"},"OptionChainResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/OptionData"},"type":"array","title":"Data","description":"List of option chain data"}},"type":"object","required":["data"],"title":"OptionChainResponse"},"OptionData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Underlying ticker symbol"},"trade_date":{"type":"string","title":"Trade Date","description":"Trading date"},"expiry_date":{"type":"string","title":"Expiry Date","description":"Option expiration date"},"dte":{"type":"integer","title":"Dte","description":"Days to expiration"},"strike":{"type":"number","title":"Strike","description":"Strike price"},"spot_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spot Price","description":"Underlying spot price"},"call_bid_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Bid Price","description":"Call bid price"},"call_mid_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Mid Price","description":"Call mid price"},"call_ask_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Ask Price","description":"Call ask price"},"put_bid_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Bid Price","description":"Put bid price"},"put_mid_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Mid Price","description":"Put mid price"},"put_ask_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Ask Price","description":"Put ask price"},"call_volume":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Volume","description":"Call volume"},"put_volume":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Volume","description":"Put volume"},"call_open_interest":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Open Interest","description":"Call open interest"},"put_open_interest":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Open Interest","description":"Put open interest"},"call_bid_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Bid Size","description":"Call bid size"},"call_ask_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Ask Size","description":"Call ask size"},"put_bid_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Bid Size","description":"Put bid size"},"put_ask_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Ask Size","description":"Put ask size"},"call_bid_iv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Bid Iv","description":"Call bid implied volatility"},"call_mid_iv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Mid Iv","description":"Call mid implied volatility"},"call_ask_iv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Ask Iv","description":"Call ask implied volatility"},"put_bid_iv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Bid Iv","description":"Put bid implied volatility"},"put_mid_iv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Mid Iv","description":"Put mid implied volatility"},"put_ask_iv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Ask Iv","description":"Put ask implied volatility"},"smoothed_vol":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Smoothed Vol","description":"Smoothed volatility"},"call_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Delta","description":"Call delta"},"call_gamma":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Gamma","description":"Call gamma"},"call_theta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Theta","description":"Call theta"},"call_vega":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Vega","description":"Call vega"},"call_rho":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Call Rho","description":"Call rho"},"put_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Delta","description":"Put delta"},"put_gamma":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Gamma","description":"Put gamma"},"put_theta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Theta","description":"Put theta"},"put_vega":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Vega","description":"Put vega"},"put_rho":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Put Rho","description":"Put rho"},"snapshot_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot At","description":"When the market data was captured (UTC)"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At","description":"When this record was last updated in our database (UTC)"}},"type":"object","required":["ticker","trade_date","expiry_date","dte","strike"],"title":"OptionData","example":{"call_ask_iv":16.4,"call_ask_price":14.0,"call_ask_size":8.0,"call_bid_iv":15.2,"call_bid_price":12.5,"call_bid_size":10.0,"call_delta":0.65,"call_gamma":0.018,"call_mid_iv":15.8,"call_mid_price":13.25,"call_open_interest":1234.0,"call_rho":0.08,"call_theta":-0.12,"call_vega":0.25,"call_volume":152.0,"dte":32,"expiry_date":"2024-02-16","put_ask_iv":17.3,"put_ask_price":8.25,"put_ask_size":12.0,"put_bid_iv":16.1,"put_bid_price":6.75,"put_bid_size":5.0,"put_delta":-0.35,"put_gamma":-0.018,"put_mid_iv":16.7,"put_mid_price":7.5,"put_open_interest":987.0,"put_rho":-0.15,"put_theta":-0.1,"put_vega":0.25,"put_volume":89.0,"smoothed_vol":15.9,"snapshot_at":"2024-01-15T15:45:00","spot_price":485.25,"strike":480.0,"ticker":"SPY","trade_date":"2024-01-15","updated_at":"2024-01-15T15:45:30"}},"OptionTypeParam":{"type":"string","enum":["c","p"],"title":"OptionTypeParam"},"PairHedgeGammaComponents":{"properties":{"price_ratio_squared":{"type":"number","title":"Price Ratio Squared","description":"(spot_a / spot_b)^2"},"gamma_ratio_raw":{"type":"number","title":"Gamma Ratio Raw","description":"gamma_a / gamma_b"},"beta_adjustment":{"type":"number","title":"Beta Adjustment","description":"(1 / beta)^2"}},"type":"object","required":["price_ratio_squared","gamma_ratio_raw","beta_adjustment"],"title":"PairHedgeGammaComponents"},"PairHedgeLegData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Underlying ticker symbol"},"trade_date":{"type":"string","title":"Trade Date","description":"Trade date used for the leg"},"expiry_date":{"type":"string","title":"Expiry Date","description":"Option expiration date"},"strike":{"type":"number","title":"Strike","description":"Strike price"},"option_type":{"type":"string","title":"Option Type","description":"call or put"},"spot_price":{"type":"number","title":"Spot Price","description":"Underlying spot price used in BS greeks"},"implied_vol":{"type":"number","title":"Implied Vol","description":"Implied volatility (percent) used in BS greeks"},"dte":{"type":"integer","title":"Dte","description":"Days to expiry used in BS greeks"},"option_price":{"type":"number","title":"Option Price","description":"Black-Scholes option price (r=0)"},"delta":{"type":"number","title":"Delta","description":"Per-contract delta"},"gamma":{"type":"number","title":"Gamma","description":"Per-contract gamma"},"theta":{"type":"number","title":"Theta","description":"Per-contract theta (per day)"},"vega":{"type":"number","title":"Vega","description":"Per-contract vega (per 1% vol)"}},"type":"object","required":["ticker","trade_date","expiry_date","strike","option_type","spot_price","implied_vol","dte","option_price","delta","gamma","theta","vega"],"title":"PairHedgeLegData"},"PairHedgeNetGreeks":{"properties":{"vega":{"type":"number","title":"Vega","description":"Net vega of short-A/long-B pair at this weighting"},"theta":{"type":"number","title":"Theta","description":"Net theta of short-A/long-B pair at this weighting"},"gamma":{"type":"number","title":"Gamma","description":"Net gamma of short-A/long-B pair at this weighting"}},"type":"object","required":["vega","theta","gamma"],"title":"PairHedgeNetGreeks"},"PairHedgeResponse":{"properties":{"leg_a":{"$ref":"#/components/schemas/PairHedgeLegData"},"leg_b":{"$ref":"#/components/schemas/PairHedgeLegData"},"correlation":{"type":"number","title":"Correlation","description":"Correlation between A and B"},"correlation_source":{"type":"string","title":"Correlation Source","description":"provided or computed"},"realized_vol_a":{"type":"number","title":"Realized Vol A","description":"Annualized realized vol of A (percent) used for beta"},"realized_vol_b":{"type":"number","title":"Realized Vol B","description":"Annualized realized vol of B (percent) used for beta"},"beta":{"type":"number","title":"Beta","description":"Beta of B vs A: correlation * (realized_vol_B / realized_vol_A)"},"beta_formula":{"type":"string","title":"Beta Formula","description":"Human-readable beta formula"},"weightings":{"$ref":"#/components/schemas/PairHedgeWeightings"},"gamma_ratio_components":{"$ref":"#/components/schemas/PairHedgeGammaComponents"},"as_of":{"type":"string","title":"As Of","description":"Response generation timestamp (UTC)"}},"type":"object","required":["leg_a","leg_b","correlation","correlation_source","realized_vol_a","realized_vol_b","beta","beta_formula","weightings","gamma_ratio_components","as_of"],"title":"PairHedgeResponse"},"PairHedgeWeighting":{"properties":{"ratio":{"type":"number","title":"Ratio","description":"Contracts of leg B per 1 contract of leg A sold (positive)"},"suggested_qty_b":{"type":"integer","title":"Suggested Qty B","description":"Rounded whole-contract quantity of leg B"},"neutralizes":{"type":"string","title":"Neutralizes","description":"Greek neutralized by this weighting (vega, theta, or gamma)"},"net_greeks":{"$ref":"#/components/schemas/PairHedgeNetGreeks"}},"type":"object","required":["ratio","suggested_qty_b","neutralizes","net_greeks"],"title":"PairHedgeWeighting"},"PairHedgeWeightings":{"properties":{"vega":{"$ref":"#/components/schemas/PairHedgeWeighting"},"theta":{"$ref":"#/components/schemas/PairHedgeWeighting"},"gamma":{"$ref":"#/components/schemas/PairHedgeWeighting"}},"type":"object","required":["vega","theta","gamma"],"title":"PairHedgeWeightings"},"PnlAttributionBreakdown":{"properties":{"actual_pnl":{"type":"number","title":"Actual Pnl"},"delta_pnl":{"type":"number","title":"Delta Pnl"},"gamma_pnl":{"type":"number","title":"Gamma Pnl"},"theta_pnl":{"type":"number","title":"Theta Pnl"},"vega_pnl":{"type":"number","title":"Vega Pnl"},"rho_pnl":{"type":"number","title":"Rho Pnl"},"residual":{"type":"number","title":"Residual"},"greeks":{"anyOf":[{"$ref":"#/components/schemas/PnlAttributionGreeks"},{"type":"null"}],"description":"Per-leg greeks at state_0; null on portfolio total"}},"type":"object","required":["actual_pnl","delta_pnl","gamma_pnl","theta_pnl","vega_pnl","rho_pnl","residual"],"title":"PnlAttributionBreakdown"},"PnlAttributionData":{"properties":{"state_0":{"additionalProperties":true,"type":"object","title":"State 0"},"state_1":{"additionalProperties":true,"type":"object","title":"State 1"},"days_iterated":{"type":"integer","title":"Days Iterated","description":"Number of calendar-day attribution steps chained between state_0 and state_1"},"per_leg":{"items":{"$ref":"#/components/schemas/PnlAttributionLegData"},"type":"array","title":"Per Leg"},"total":{"$ref":"#/components/schemas/PnlAttributionBreakdown"}},"type":"object","required":["state_0","state_1","days_iterated","per_leg","total"],"title":"PnlAttributionData"},"PnlAttributionGreeks":{"properties":{"price":{"type":"number","title":"Price"},"delta":{"type":"number","title":"Delta"},"gamma":{"type":"number","title":"Gamma"},"theta":{"type":"number","title":"Theta"},"vega":{"type":"number","title":"Vega"},"rho":{"type":"number","title":"Rho"}},"type":"object","required":["price","delta","gamma","theta","vega","rho"],"title":"PnlAttributionGreeks"},"PnlAttributionLegData":{"properties":{"actual_pnl":{"type":"number","title":"Actual Pnl"},"delta_pnl":{"type":"number","title":"Delta Pnl"},"gamma_pnl":{"type":"number","title":"Gamma Pnl"},"theta_pnl":{"type":"number","title":"Theta Pnl"},"vega_pnl":{"type":"number","title":"Vega Pnl"},"rho_pnl":{"type":"number","title":"Rho Pnl"},"residual":{"type":"number","title":"Residual"},"greeks":{"anyOf":[{"$ref":"#/components/schemas/PnlAttributionGreeks"},{"type":"null"}],"description":"Per-leg greeks at state_0; null on portfolio total"},"ticker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ticker"},"expiry":{"type":"string","title":"Expiry"},"strike":{"type":"number","title":"Strike"},"option_type":{"type":"string","title":"Option Type"},"quantity":{"type":"number","title":"Quantity"}},"type":"object","required":["actual_pnl","delta_pnl","gamma_pnl","theta_pnl","vega_pnl","rho_pnl","residual","expiry","strike","option_type","quantity"],"title":"PnlAttributionLegData"},"PnlAttributionRequest":{"properties":{"legs":{"items":{"$ref":"#/components/schemas/AttributionLegRequest"},"type":"array","maxItems":8,"minItems":1,"title":"Legs"},"state_0":{"$ref":"#/components/schemas/MarketStateRequest"},"state_1":{"$ref":"#/components/schemas/MarketStateRequest"}},"type":"object","required":["legs","state_0","state_1"],"title":"PnlAttributionRequest"},"PnlAttributionResponse":{"properties":{"data":{"$ref":"#/components/schemas/PnlAttributionData"}},"type":"object","required":["data"],"title":"PnlAttributionResponse"},"PriceData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Stock ticker symbol"},"date":{"type":"string","title":"Date","description":"Trading date"},"snapshot_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot At","description":"When the market data was captured (UTC)"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At","description":"When this record was last updated in our database (UTC)"},"open":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Open","description":"Opening price"},"high":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"High","description":"Highest price"},"low":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Low","description":"Lowest price"},"close":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Close","description":"Closing price"},"volume":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Volume","description":"Trading volume"},"mid":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Mid","description":"Mid price (bid+ask)/2"}},"type":"object","required":["ticker","date"],"title":"PriceData","example":{"close":151.75,"date":"2024-01-15","high":152.3,"low":149.5,"mid":151.85,"open":150.25,"snapshot_at":"2024-01-15T15:45:00","ticker":"SPY","updated_at":"2024-01-15T15:45:30","volume":45234123}},"PriceResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/PriceData"},"type":"array","title":"Data","description":"List of price data"}},"type":"object","required":["data"],"title":"PriceResponse","example":{"data":[{"close":151.75,"date":"2024-01-15","high":152.3,"low":149.5,"mid":151.85,"open":150.25,"snapshot_at":"2024-01-15T15:45:00","ticker":"SPY","updated_at":"2024-01-15T15:45:30","volume":45234123}]}},"RealVolData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Stock ticker symbol"},"date":{"type":"string","title":"Date","description":"Trading date"},"snapshot_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot At","description":"When the market data was captured (UTC)"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At","description":"When this record was last updated in our database (UTC)"},"rv_1d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 1D","description":"1-day realized volatility"},"rv_7d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 7D","description":"7-day realized volatility"},"rv_14d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 14D","description":"14-day realized volatility"},"rv_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 30D","description":"30-day realized volatility"},"rv_60d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 60D","description":"60-day realized volatility"},"rv_90d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 90D","description":"90-day realized volatility"},"rv_180d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 180D","description":"180-day realized volatility"},"rv_365d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 365D","description":"365-day realized volatility"}},"type":"object","required":["ticker","date"],"title":"RealVolData","example":{"date":"2025-08-07","rv_14d":11.96,"rv_180d":25.56,"rv_1d":11.81,"rv_30d":9.54,"rv_365d":15.3,"rv_60d":9.59,"rv_7d":15.8,"rv_90d":12.25,"snapshot_at":"2025-08-07T20:00:00","ticker":"SPY","updated_at":"2025-08-07T22:06:02.290000"}},"RealVolResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/RealVolData"},"type":"array","title":"Data","description":"List of realized volatility data"}},"type":"object","required":["data"],"title":"RealVolResponse"},"RvivData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Stock ticker symbol"},"date":{"type":"string","title":"Date","description":"Trading date"},"snapshot_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot At","description":"When the market data was captured (UTC)"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At","description":"When this record was last updated in our database (UTC)"},"rv_30d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv 30D","description":"30-day realized volatility"},"atmiv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Atmiv","description":"At-the-money implied volatility"},"rv_percentile":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rv Percentile","description":"RV percentile"},"vrp":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vrp","description":"Volatility risk premium: 100 * ln(IV_30d / RV_30d)"}},"type":"object","required":["ticker","date"],"title":"RvivData","example":{"atmiv":12.79,"date":"2025-08-06","rv_30d":9.15,"rv_percentile":14.77,"snapshot_at":"2025-08-06T20:00:00","ticker":"SPY","vrp":33.55}},"RvivResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/RvivData"},"type":"array","title":"Data","description":"List of RV vs IV data"}},"type":"object","required":["data"],"title":"RvivResponse"},"SkewData":{"properties":{"ticker":{"type":"string","title":"Ticker","description":"Stock ticker symbol"},"date":{"type":"string","title":"Date","description":"Trading date"},"expiry_date":{"type":"string","title":"Expiry Date","description":"Option expiration date"},"maturity":{"type":"integer","title":"Maturity","description":"Days to maturity"},"snapshot_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Snapshot At","description":"When the market data was captured (UTC)"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At","description":"When this record was last updated in our database (UTC)"},"skew_10d_call":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Skew 10D Call","description":"10-delta call skew"},"skew_25d_call":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Skew 25D Call","description":"25-delta call skew"},"skew_10d_put":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Skew 10D Put","description":"10-delta put skew"},"skew_25d_put":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Skew 25D Put","description":"25-delta put skew"},"skew_10d_call_percentile":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Skew 10D Call Percentile","description":"10-delta call skew percentile"},"skew_25d_call_percentile":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Skew 25D Call Percentile","description":"25-delta call skew percentile"},"skew_10d_put_percentile":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Skew 10D Put Percentile","description":"10-delta put skew percentile"},"skew_25d_put_percentile":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Skew 25D Put Percentile","description":"25-delta put skew percentile"},"risk_reversal_10d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Risk Reversal 10D","description":"10-delta risk reversal"},"risk_reversal_25d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Risk Reversal 25D","description":"25-delta risk reversal"},"risk_reversal_10d_percentile":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Risk Reversal 10D Percentile","description":"10-delta risk reversal percentile"},"risk_reversal_25d_percentile":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Risk Reversal 25D Percentile","description":"25-delta risk reversal percentile"},"vol_10d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol 10D","description":"10-delta volatility"},"vol_25d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol 25D","description":"25-delta volatility"},"vol_50d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol 50D","description":"50-delta (ATM) volatility"},"vol_75d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol 75D","description":"75-delta volatility"},"vol_90d":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Vol 90D","description":"90-delta volatility"}},"type":"object","required":["ticker","date","expiry_date","maturity"],"title":"SkewData","example":{"date":"2025-08-07","expiry_date":"2025-08-15","maturity":8,"risk_reversal_10d":-6.12,"risk_reversal_10d_percentile":15.8,"risk_reversal_25d":-4.23,"risk_reversal_25d_percentile":18.3,"skew_10d_call":-2.45,"skew_10d_call_percentile":25.6,"skew_10d_put":3.67,"skew_10d_put_percentile":72.1,"skew_25d_call":-1.89,"skew_25d_call_percentile":28.4,"skew_25d_put":2.34,"skew_25d_put_percentile":68.9,"snapshot_at":"2025-08-07T19:46:00","ticker":"SPY","updated_at":"2025-08-07T22:06:06.580000","vol_10d":11.45,"vol_25d":12.89,"vol_90d":15.67}},"SkewResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/SkewData"},"type":"array","title":"Data","description":"List of volatility skew data"}},"type":"object","required":["data"],"title":"SkewResponse"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}