{"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/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/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":{"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_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,"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,"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,"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,"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}]}},"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"},"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"},"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"}},"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"}}}}