{"openapi":"3.1.0","info":{"title":"Stock Market Historical Data API","description":"Read-only access to the backtest_data schema.","version":"0.1.0"},"paths":{"/health":{"get":{"tags":["meta"],"summary":"Health","description":"Public liveness + DB connectivity check.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Health Get"}}}}}}},"/meta/freshness":{"get":{"tags":["meta"],"summary":"Meta Freshness","description":"Latest update timestamps for the key data feeds.\n\nSPY is the canary for OHLCV (uses the (ticker, timeframe, date) PK so each\nMAX(date) is a single index lookup). Client formats the lag for display and\ndecides color thresholds.","operationId":"meta_freshness_meta_freshness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Meta Freshness Meta Freshness Get"}}}}},"security":[{"APIKeyHeader":[]}]}},"/tickers":{"get":{"tags":["tickers"],"summary":"List Tickers","operationId":"list_tickers_tickers_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by sector ticker (e.g. XLK).","title":"Sector"},"description":"Filter by sector ticker (e.g. XLK)."},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"}},{"name":"class_code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Class Code"}},{"name":"og_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only TC2000-authoritative common stocks.","default":false,"title":"Og Only"},"description":"Only TC2000-authoritative common stocks."},{"name":"min_market_cap","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Min Market Cap"}},{"name":"min_daily_dollar_volume","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Min Daily Dollar Volume"}},{"name":"daily_data_present","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Daily Data Present"}},{"name":"ticker_prefix","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":15},{"type":"null"}],"description":"Case-insensitive ticker prefix match (e.g. 'AA' returns AA, AAL, AAPL, ...).","title":"Ticker Prefix"},"description":"Case-insensitive ticker prefix match (e.g. 'AA' returns AA, AAL, AAPL, ...)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":500,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Tickers Tickers Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/tickers/{ticker}":{"get":{"tags":["tickers"],"summary":"Get Ticker","operationId":"get_ticker_tickers__ticker__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":15,"title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Ticker Tickers  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ohlcv/{ticker}":{"get":{"tags":["ohlcv"],"summary":"Get Ohlcv","description":"Return bars for a single ticker/timeframe.\n\nAlways requires ticker + timeframe to leverage the (ticker, timeframe, date)\nprimary key. Range filters are inclusive on `start`, exclusive on `end`.","operationId":"get_ohlcv_ohlcv__ticker__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":15,"title":"Ticker"}},{"name":"timeframe","in":"query","required":false,"schema":{"enum":["Daily","Weekly","10min","1min"],"type":"string","default":"Daily","title":"Timeframe"}},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Inclusive start (UTC). YYYY-MM-DD or full ISO datetime.","title":"Start"},"description":"Inclusive start (UTC). YYYY-MM-DD or full ISO datetime."},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Exclusive end (UTC). YYYY-MM-DD or full ISO datetime — needed for intraday back-pagination.","title":"End"},"description":"Exclusive end (UTC). YYYY-MM-DD or full ISO datetime — needed for intraday back-pagination."},{"name":"order","in":"query","required":false,"schema":{"enum":["asc","desc"],"type":"string","default":"asc","title":"Order"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Ohlcv Ohlcv  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scan/generic":{"get":{"tags":["scans"],"summary":"Scan Generic Current","description":"Latest snapshot of scan_generic joined with ticker metadata.","operationId":"scan_generic_current_scan_generic_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"min_rs","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":99,"minimum":1},{"type":"null"}],"title":"Min Rs"}},{"name":"max_rs","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":99,"minimum":1},{"type":"null"}],"title":"Max Rs"}},{"name":"min_adr","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Min Adr"}},{"name":"max_adr","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Max Adr"}},{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"}},{"name":"og_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Og Only"}},{"name":"min_market_cap","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Min Market Cap"}},{"name":"max_market_cap","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Max Market Cap"}},{"name":"min_daily_dollar_volume","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Min Daily Dollar Volume"}},{"name":"max_daily_dollar_volume","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Max Daily Dollar Volume"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scan Generic Current Scan Generic Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/scan/generic/history":{"get":{"tags":["scans"],"summary":"Scan Generic History","description":"Point-in-time scan: what passed the filter on `snapshot_date`.","operationId":"scan_generic_history_scan_generic_history_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"snapshot_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"The date the scan should be evaluated as-of.","title":"Snapshot Date"},"description":"The date the scan should be evaluated as-of."},{"name":"min_rs","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":99,"minimum":1},{"type":"null"}],"title":"Min Rs"}},{"name":"max_rs","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":99,"minimum":1},{"type":"null"}],"title":"Max Rs"}},{"name":"min_adr","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Min Adr"}},{"name":"max_adr","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"title":"Max Adr"}},{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"}},{"name":"og_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Og Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Scan Generic History Scan Generic History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/eps/{ticker}":{"get":{"tags":["fundamentals"],"summary":"Get Eps","operationId":"get_eps_eps__ticker__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":15,"title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Eps Eps  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/revenue/{ticker}":{"get":{"tags":["fundamentals"],"summary":"Get Revenue","operationId":"get_revenue_revenue__ticker__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"ticker","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":15,"title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Revenue Revenue  Ticker  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/etf-membership":{"get":{"tags":["etf"],"summary":"Etf Membership","operationId":"etf_membership_etf_membership_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"etf","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ETF ticker — returns its holdings.","title":"Etf"},"description":"ETF ticker — returns its holdings."},{"name":"stock","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Stock ticker — returns ETFs that hold it.","title":"Stock"},"description":"Stock ticker — returns ETFs that hold it."},{"name":"include_kpis","in":"query","required":false,"schema":{"type":"boolean","description":"When true and `etf` is set, joins each holding to `tickers` (sector, industry, market_cap, daily_dollar_volume) and `scan_generic` (rs_rating_qqq, daily_adr). Default False to preserve existing callers.","default":false,"title":"Include Kpis"},"description":"When true and `etf` is set, joins each holding to `tickers` (sector, industry, market_cap, daily_dollar_volume) and `scan_generic` (rs_rating_qqq, daily_adr). Default False to preserve existing callers."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Etf Membership Etf Membership Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/macro/fed-rates":{"get":{"tags":["macro"],"summary":"Fed Rates","operationId":"fed_rates_macro_fed_rates_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fed Rates Macro Fed Rates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/macro/fed-balance-sheet":{"get":{"tags":["macro"],"summary":"Fed Balance Sheet","operationId":"fed_balance_sheet_macro_fed_balance_sheet_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Fed Balance Sheet Macro Fed Balance Sheet Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/macro/qe-qt-regimes":{"get":{"tags":["macro"],"summary":"Qe Qt Regimes","operationId":"qe_qt_regimes_macro_qe_qt_regimes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Qe Qt Regimes Macro Qe Qt Regimes Get"}}}}},"security":[{"APIKeyHeader":[]}]}},"/breadth/stockbee":{"get":{"tags":["breadth"],"summary":"Stockbee Mm","operationId":"stockbee_mm_breadth_stockbee_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start"}},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Stockbee Mm Breadth Stockbee Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/cot/{symbol}":{"get":{"tags":["macro"],"summary":"Cot","operationId":"cot_cot__symbol__get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"symbol","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":15,"title":"Symbol"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Cot Cot  Symbol  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reference/sectors":{"get":{"tags":["reference"],"summary":"Reference Sectors","operationId":"reference_sectors_reference_sectors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Reference Sectors Reference Sectors Get"}}}}},"security":[{"APIKeyHeader":[]}]}},"/reference/industries":{"get":{"tags":["reference"],"summary":"Reference Industries","operationId":"reference_industries_reference_industries_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"sector","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sector"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reference Industries Reference Industries Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reference/themes":{"get":{"tags":["reference"],"summary":"Reference Themes","operationId":"reference_themes_reference_themes_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"leveraged","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Leveraged"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Reference Themes Reference Themes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/reference/indexes":{"get":{"tags":["reference"],"summary":"Reference Indexes","operationId":"reference_indexes_reference_indexes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Reference Indexes Reference Indexes Get"}}}}},"security":[{"APIKeyHeader":[]}]}},"/strategies/runs":{"get":{"tags":["strategies"],"summary":"Get Strategy Runs","description":"List backtest runs from `strategies.runs`, shaped for the frontend.\n\nReturns items aligned with the TypeScript `Strategy` type\n(`frontend/src/lib/strategies-types.ts`). Long-tail vbt metrics — calmar,\nomega_ratio, best_trade_pct, streaks, durations, benchmark return, params,\nuniverse, etc. — are bundled into a `fullStats` object on each item.","operationId":"get_strategy_runs_strategies_runs_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"created_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by creator (created_by column).","title":"Created By"},"description":"Filter by creator (created_by column)."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status (idle, backtesting, deployed, paused).","title":"Status"},"description":"Filter by status (idle, backtesting, deployed, paused)."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Strategy Runs Strategies Runs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/watchlists":{"get":{"tags":["watchlists"],"summary":"List Watchlists","operationId":"list_watchlists_watchlists_get","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by user. Omit / pass empty for the anonymous (NULL-user) shared set.","title":"User Id"},"description":"Filter by user. Omit / pass empty for the anonymous (NULL-user) shared set."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Watchlists Watchlists Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["watchlists"],"summary":"Create Watchlist","operationId":"create_watchlist_watchlists_post","security":[{"APIKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Watchlist Watchlists Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/watchlists/{intid}":{"put":{"tags":["watchlists"],"summary":"Update Watchlist","operationId":"update_watchlist_watchlists__intid__put","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"intid","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Intid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchlistUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Watchlist Watchlists  Intid  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["watchlists"],"summary":"Delete Watchlist","operationId":"delete_watchlist_watchlists__intid__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"intid","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Intid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Watchlist Watchlists  Intid  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/watchlists/{intid}/tickers":{"post":{"tags":["watchlists"],"summary":"Add Ticker","description":"Append a single ticker (idempotent — duplicates collapse).","operationId":"add_ticker_watchlists__intid__tickers_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"intid","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Intid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TickerOp"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Add Ticker Watchlists  Intid  Tickers Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/watchlists/{intid}/tickers/{ticker}":{"delete":{"tags":["watchlists"],"summary":"Remove Ticker","description":"Remove ONE ticker from a watchlist. No-op if it wasn't there.","operationId":"remove_ticker_watchlists__intid__tickers__ticker__delete","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"intid","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Intid"}},{"name":"ticker","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":15,"title":"Ticker"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Remove Ticker Watchlists  Intid  Tickers  Ticker  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/watchlists/{intid}/import":{"post":{"tags":["watchlists"],"summary":"Import Tickers","description":"Bulk import. `combine` dedupe-merges with current; `overwrite` replaces.","operationId":"import_tickers_watchlists__intid__import_post","security":[{"APIKeyHeader":[]}],"parameters":[{"name":"intid","in":"path","required":true,"schema":{"type":"integer","minimum":1,"title":"Intid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportPayload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Import Tickers Watchlists  Intid  Import Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImportPayload":{"properties":{"tickers":{"items":{"type":"string"},"type":"array","title":"Tickers"},"mode":{"type":"string","enum":["combine","overwrite"],"title":"Mode"}},"type":"object","required":["tickers","mode"],"title":"ImportPayload"},"TickerOp":{"properties":{"ticker":{"type":"string","maxLength":15,"minLength":1,"title":"Ticker"}},"type":"object","required":["ticker"],"title":"TickerOp"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WatchlistCreate":{"properties":{"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"},"number":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Number"},"tickers":{"items":{"type":"string"},"type":"array","title":"Tickers"}},"type":"object","required":["name","number"],"title":"WatchlistCreate"},"WatchlistUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":80,"minLength":1},{"type":"null"}],"title":"Name"},"number":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Number"},"tickers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tickers"}},"type":"object","title":"WatchlistUpdate"}},"securitySchemes":{"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}