{"openapi":"3.1.0","info":{"title":"The Prediction Markets API","description":"Developer API for Kalshi and Polymarket market data, matching, spreads, and signals.","version":"2.0.0"},"paths":{"/api/v2/polymarket/markets":{"get":{"tags":["v2","Polymarket"],"summary":"List Polymarket Markets","operationId":"list_polymarket_markets_api_v2_polymarket_markets_get","parameters":[{"name":"market_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated Polymarket market slugs","title":"Market Slug"},"description":"Comma-separated Polymarket market slugs"},{"name":"event_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated TPM event slugs","title":"Event Slug"},"description":"Comma-separated TPM event slugs"},{"name":"condition_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated Polymarket condition IDs or stored outcome IDs","title":"Condition Id"},"description":"Comma-separated Polymarket condition IDs or stored outcome IDs"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search event title or market slug","title":"Search"},"description":"Search event title or market slug"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"active, closed, resolved, or all","default":"active","title":"Status"},"description":"active, closed, resolved, or all"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Category slug","title":"Category"},"description":"Category slug"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"volume, volume_24h, liquidity, updated_at, end_time, created_at","default":"volume","title":"Sort"},"description":"volume, volume_24h, liquidity, updated_at, end_time, created_at"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"asc or desc","default":"desc","title":"Order"},"description":"asc or desc"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/polymarket/events":{"get":{"tags":["v2","Polymarket"],"summary":"List Polymarket Events","operationId":"list_polymarket_events_api_v2_polymarket_events_get","parameters":[{"name":"event_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated TPM event slugs","title":"Event Slug"},"description":"Comma-separated TPM event slugs"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search event title","title":"Search"},"description":"Search event title"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"active, closed, resolved, or all","default":"active","title":"Status"},"description":"active, closed, resolved, or all"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Category slug","title":"Category"},"description":"Category slug"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"volume, volume_24h, liquidity, updated_at, end_time, created_at","default":"volume","title":"Sort"},"description":"volume, volume_24h, liquidity, updated_at, end_time, created_at"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"asc or desc","default":"desc","title":"Order"},"description":"asc or desc"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/polymarket/prices":{"get":{"tags":["v2","Polymarket"],"summary":"List Polymarket Prices","operationId":"list_polymarket_prices_api_v2_polymarket_prices_get","parameters":[{"name":"market_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated Polymarket market slugs","title":"Market Slug"},"description":"Comma-separated Polymarket market slugs"},{"name":"event_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated TPM event slugs","title":"Event Slug"},"description":"Comma-separated TPM event slugs"},{"name":"condition_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated Polymarket condition IDs or stored outcome IDs","title":"Condition Id"},"description":"Comma-separated Polymarket condition IDs or stored outcome IDs"},{"name":"outcome","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by outcome title substring","title":"Outcome"},"description":"Filter by outcome title substring"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/polymarket/market-price":{"get":{"tags":["v2","Polymarket"],"summary":"Get Polymarket Market Price","operationId":"get_polymarket_market_price_api_v2_polymarket_market_price_get","parameters":[{"name":"market_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Polymarket market slug","title":"Market Slug"},"description":"Polymarket market slug"},{"name":"condition_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Polymarket condition ID or stored outcome ID","title":"Condition Id"},"description":"Polymarket condition ID or stored outcome ID"},{"name":"outcome","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Outcome title substring","title":"Outcome"},"description":"Outcome title substring"},{"name":"timestamp","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Unix timestamp (seconds). If provided, returns historical price nearest that time via CLOB prices-history.","title":"Timestamp"},"description":"Unix timestamp (seconds). If provided, returns historical price nearest that time via CLOB prices-history."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/polymarket/orders":{"get":{"tags":["v2","Polymarket"],"summary":"List Polymarket Orders","description":"Trade history for a Polymarket market, proxied from clob.polymarket.com.","operationId":"list_polymarket_orders_api_v2_polymarket_orders_get","parameters":[{"name":"market_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Polymarket market or event slug","title":"Market Slug"},"description":"Polymarket market or event slug"},{"name":"condition_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Polymarket condition ID (overrides market_slug)","title":"Condition Id"},"description":"Polymarket condition ID (overrides market_slug)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for paginating through trade history","title":"Cursor"},"description":"Cursor for paginating through trade history"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/polymarket/orderbook-history":{"get":{"tags":["v2","Polymarket"],"summary":"Get Polymarket Orderbook","description":"Current orderbook (bids/asks) for a Polymarket market, proxied from clob.polymarket.com.","operationId":"get_polymarket_orderbook_api_v2_polymarket_orderbook_history_get","parameters":[{"name":"market_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Polymarket market or event slug","title":"Market Slug"},"description":"Polymarket market or event slug"},{"name":"token_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Polymarket CLOB token ID (YES token). Overrides market_slug resolution.","title":"Token Id"},"description":"Polymarket CLOB token ID (YES token). Overrides market_slug resolution."},{"name":"outcome_index","in":"query","required":false,"schema":{"type":"integer","maximum":1,"minimum":0,"description":"0 for YES/first token, 1 for NO/second token","default":0,"title":"Outcome Index"},"description":"0 for YES/first token, 1 for NO/second token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/polymarket/activity":{"get":{"tags":["v2","Polymarket"],"summary":"List Polymarket Activity","description":"Trading activity (merges, splits, redeems, trades) for a wallet, proxied from data-api.polymarket.com.","operationId":"list_polymarket_activity_api_v2_polymarket_activity_get","parameters":[{"name":"wallet_address","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Polymarket proxy wallet address","title":"Wallet Address"},"description":"Polymarket proxy wallet address"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by condition ID","title":"Market"},"description":"Filter by condition ID"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Cursor for pagination","title":"Cursor"},"description":"Cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/polymarket/candlesticks":{"get":{"tags":["v2","Polymarket"],"summary":"List Polymarket Candlesticks","description":"Price history (candlestick series) for a Polymarket market, proxied from clob.polymarket.com.","operationId":"list_polymarket_candlesticks_api_v2_polymarket_candlesticks_get","parameters":[{"name":"market_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Polymarket market or event slug","title":"Market Slug"},"description":"Polymarket market or event slug"},{"name":"condition_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Polymarket condition ID (overrides market_slug)","title":"Condition Id"},"description":"Polymarket condition ID (overrides market_slug)"},{"name":"token_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Polymarket CLOB token ID (decimal integer). Overrides market_slug and condition_id.","title":"Token Id"},"description":"Polymarket CLOB token ID (decimal integer). Overrides market_slug and condition_id."},{"name":"fidelity","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Candle width in minutes (e.g. 1, 5, 60, 1440)","default":60,"title":"Fidelity"},"description":"Candle width in minutes (e.g. 1, 5, 60, 1440)"},{"name":"start_ts","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Start timestamp (Unix seconds, inclusive)","title":"Start Ts"},"description":"Start timestamp (Unix seconds, inclusive)"},{"name":"end_ts","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"End timestamp (Unix seconds, inclusive)","title":"End Ts"},"description":"End timestamp (Unix seconds, inclusive)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/polymarket/positions/wallet/{wallet_address}":{"get":{"tags":["v2","Polymarket"],"summary":"List Polymarket Positions","description":"Current open positions for a Polymarket wallet, proxied from data-api.polymarket.com.","operationId":"list_polymarket_positions_api_v2_polymarket_positions_wallet__wallet_address__get","parameters":[{"name":"wallet_address","in":"path","required":true,"schema":{"type":"string","title":"Wallet Address"}},{"name":"size_threshold","in":"query","required":false,"schema":{"type":"number","description":"Minimum position size (normalized shares)","default":0.01,"title":"Size Threshold"},"description":"Minimum position size (normalized shares)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/polymarket/wallet/{wallet_address}":{"get":{"tags":["v2","Polymarket"],"summary":"Get Polymarket Wallet","description":"Wallet profile for a Polymarket address, proxied from data-api.polymarket.com.","operationId":"get_polymarket_wallet_api_v2_polymarket_wallet__wallet_address__get","parameters":[{"name":"wallet_address","in":"path","required":true,"schema":{"type":"string","title":"Wallet Address"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/polymarket/wallet/{wallet_address}/pnl":{"get":{"tags":["v2","Polymarket"],"summary":"Get Polymarket Wallet Pnl","description":"Realized profit-and-loss for a Polymarket wallet, proxied from data-api.polymarket.com.","operationId":"get_polymarket_wallet_pnl_api_v2_polymarket_wallet__wallet_address__pnl_get","parameters":[{"name":"wallet_address","in":"path","required":true,"schema":{"type":"string","title":"Wallet Address"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/kalshi/markets":{"get":{"tags":["v2","Kalshi"],"summary":"List Kalshi Markets","operationId":"list_kalshi_markets_api_v2_kalshi_markets_get","parameters":[{"name":"market_ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated Kalshi market tickers (outcome-level)","title":"Market Ticker"},"description":"Comma-separated Kalshi market tickers (outcome-level)"},{"name":"event_ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated Kalshi event tickers","title":"Event Ticker"},"description":"Comma-separated Kalshi event tickers"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search event titles","title":"Search"},"description":"Search event titles"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"active, closed, resolved, or all","default":"active","title":"Status"},"description":"active, closed, resolved, or all"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Category slug","title":"Category"},"description":"Category slug"},{"name":"min_volume","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Minimum total volume in dollars","title":"Min Volume"},"description":"Minimum total volume in dollars"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"volume, volume_24h, updated_at, end_time, created_at","default":"volume","title":"Sort"},"description":"volume, volume_24h, updated_at, end_time, created_at"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"asc or desc","default":"desc","title":"Order"},"description":"asc or desc"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/kalshi/events":{"get":{"tags":["v2","Kalshi"],"summary":"List Kalshi Events","operationId":"list_kalshi_events_api_v2_kalshi_events_get","parameters":[{"name":"event_ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated Kalshi event tickers","title":"Event Ticker"},"description":"Comma-separated Kalshi event tickers"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search event titles","title":"Search"},"description":"Search event titles"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"active, closed, resolved, or all","default":"active","title":"Status"},"description":"active, closed, resolved, or all"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Category slug","title":"Category"},"description":"Category slug"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"volume, volume_24h, updated_at, end_time, created_at","default":"volume","title":"Sort"},"description":"volume, volume_24h, updated_at, end_time, created_at"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"asc or desc","default":"desc","title":"Order"},"description":"asc or desc"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/kalshi/prices":{"get":{"tags":["v2","Kalshi"],"summary":"List Kalshi Prices","operationId":"list_kalshi_prices_api_v2_kalshi_prices_get","parameters":[{"name":"market_ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated Kalshi market tickers","title":"Market Ticker"},"description":"Comma-separated Kalshi market tickers"},{"name":"event_ticker","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated Kalshi event tickers","title":"Event Ticker"},"description":"Comma-separated Kalshi event tickers"},{"name":"outcome","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by outcome title substring","title":"Outcome"},"description":"Filter by outcome title substring"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"active, closed, resolved, or all","default":"active","title":"Status"},"description":"active, closed, resolved, or all"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":25,"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/kalshi/market-price":{"get":{"tags":["v2","Kalshi"],"summary":"Get Kalshi Market Price","operationId":"get_kalshi_market_price_api_v2_kalshi_market_price_get","parameters":[{"name":"market_ticker","in":"query","required":true,"schema":{"type":"string","description":"Kalshi market ticker (e.g. KXMAYORNYCPARTY-25-D)","title":"Market Ticker"},"description":"Kalshi market ticker (e.g. KXMAYORNYCPARTY-25-D)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/sitemap/events":{"get":{"tags":["v2","Metadata"],"summary":"Sitemap Events","description":"Lightweight source for public event sitemaps.\nExisting Event rows are routable by /api/v2/events/{slug} and /event/{slug}.","operationId":"sitemap_events_api_v2_sitemap_events_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":45000,"minimum":1,"default":45000,"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/events":{"get":{"tags":["v2","Market Data"],"summary":"List Events","description":"List events for the main table. Returns collapsed event rows.\nEach row includes leading outcome, aggregated volume, platform count.\n\nOptimized: Phase 1 gets sorted event IDs, Phase 2 batch-loads summaries.","operationId":"list_events_api_v2_events_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category slug","title":"Category"},"description":"Filter by category slug"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search event titles","title":"Search"},"description":"Search event titles"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Filter by status: active, closed, resolved, all","default":"active","title":"Status"},"description":"Filter by status: active, closed, resolved, all"},{"name":"tag","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by canonical tags (comma-separated)","title":"Tag"},"description":"Filter by canonical tags (comma-separated)"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","description":"Sort: trending, volume, probability_change, end_date, created_at","default":"trending","title":"Sort"},"description":"Sort: trending, volume, probability_change, end_date, created_at"},{"name":"order","in":"query","required":false,"schema":{"type":"string","description":"Order: asc or desc","default":"desc","title":"Order"},"description":"Order: asc or desc"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/events/coverage":{"get":{"tags":["v2","Market Data"],"summary":"Event Coverage","operationId":"event_coverage_api_v2_events_coverage_get","parameters":[{"name":"slugs","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated event slugs","title":"Slugs"},"description":"Comma-separated event slugs"},{"name":"stale_cutoff_minutes","in":"query","required":false,"schema":{"type":"integer","maximum":360,"minimum":5,"default":90,"title":"Stale Cutoff Minutes"}},{"name":"include_review_queue","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Review Queue"}},{"name":"include_weak_fallback","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Weak Fallback"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/events/{slug}":{"get":{"tags":["v2","Market Data"],"summary":"Get Event Detail","description":"Get full event detail with all platform markets, outcomes, and breakdowns.\nPowers the event detail page (expanded view).","operationId":"get_event_detail_api_v2_events__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/events/{slug}/history":{"get":{"tags":["v2","Market Data"],"summary":"Get Event History","description":"Get time-series data for an event's leading outcome (or specified outcome).\nPowers charts on event detail pages.","operationId":"get_event_history_api_v2_events__slug__history_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","description":"Hours of history (default 7 days)","default":168,"title":"Hours"},"description":"Hours of history (default 7 days)"},{"name":"outcome_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Specific outcome ID (default: leading)","title":"Outcome Id"},"description":"Specific outcome ID (default: leading)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/categories":{"get":{"tags":["v2","Market Data"],"summary":"List Categories","description":"List all categories with event counts.","operationId":"list_categories_api_v2_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v2/stats":{"get":{"tags":["v2","Market Data"],"summary":"Get Stats","description":"Global stats for the header.","operationId":"get_stats_api_v2_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v2/trending":{"get":{"tags":["v2","Market Data"],"summary":"Get Trending","description":"Trending events by momentum + activity. Optimized two-phase version.","operationId":"get_trending_api_v2_trending_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/ticker":{"get":{"tags":["v2","Market Data"],"summary":"Get Ticker Events","description":"Ticker logic: Active events expiring in next 2 weeks, sorted by total volume.\nReturns Top 10 for the marquee strip.","operationId":"get_ticker_events_api_v2_ticker_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v2/signals/news-sentiment":{"get":{"tags":["v2","Signals & Arbitrage"],"summary":"Get News Sentiment Signal","operationId":"get_news_sentiment_signal_api_v2_signals_news_sentiment_get","parameters":[{"name":"event_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Event slug to derive query from event title","title":"Event Slug"},"description":"Event slug to derive query from event title"},{"name":"query","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom keyword query. Overrides event title when provided","title":"Query"},"description":"Custom keyword query. Overrides event title when provided"},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":240,"minimum":1,"description":"Lookback window in hours","default":72,"title":"Hours"},"description":"Lookback window in hours"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max articles","default":20,"title":"Limit"},"description":"Max articles"},{"name":"language","in":"query","required":false,"schema":{"type":"string","description":"News language code","default":"en","title":"Language"},"description":"News language code"},{"name":"persist","in":"query","required":false,"schema":{"type":"boolean","description":"Persist one daily snapshot for this query scope","default":true,"title":"Persist"},"description":"Persist one daily snapshot for this query scope"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/signals/news-sentiment/latest":{"get":{"tags":["v2","Signals & Arbitrage"],"summary":"Get Latest News Sentiment Snapshot","operationId":"get_latest_news_sentiment_snapshot_api_v2_signals_news_sentiment_latest_get","parameters":[{"name":"event_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Event slug to load latest persisted sentiment snapshot","title":"Event Slug"},"description":"Event slug to load latest persisted sentiment snapshot"},{"name":"query_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Normalized query key fallback","title":"Query Key"},"description":"Normalized query key fallback"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/arbitrage":{"get":{"tags":["v2","Signals & Arbitrage"],"summary":"Get Arbitrage","description":"Events with cross-platform arbitrage opportunities.\nRequires 2+ platforms tracking the same event.","operationId":"get_arbitrage_api_v2_arbitrage_get","parameters":[{"name":"min_spread","in":"query","required":false,"schema":{"type":"number","description":"Minimum spread % to flag","default":2.0,"title":"Min Spread"},"description":"Minimum spread % to flag"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/spreads":{"get":{"tags":["v2","Signals & Arbitrage"],"summary":"Get Spreads","operationId":"get_spreads_api_v2_spreads_get","parameters":[{"name":"event_slug","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Slug"}},{"name":"min_spread","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"description":"Minimum spread in probability points (0.02 = 2%).","default":0.02,"title":"Min Spread"},"description":"Minimum spread in probability points (0.02 = 2%)."},{"name":"min_volume","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"default":1000.0,"title":"Min Volume"}},{"name":"platforms","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated platform slugs","title":"Platforms"},"description":"Comma-separated platform slugs"},{"name":"stale_cutoff_minutes","in":"query","required":false,"schema":{"type":"integer","maximum":360,"minimum":5,"default":45,"title":"Stale Cutoff Minutes"}},{"name":"include_review_queue","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Review Queue"}},{"name":"include_weak_fallback","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Weak Fallback"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/spreads/top":{"get":{"tags":["v2","Signals & Arbitrage"],"summary":"Get Top Spreads","operationId":"get_top_spreads_api_v2_spreads_top_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"window","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"default":24,"title":"Window"}},{"name":"include_review_queue","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Review Queue"}},{"name":"include_weak_fallback","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Weak Fallback"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/spreads/history":{"get":{"tags":["v2","Signals & Arbitrage"],"summary":"Get Spread History","operationId":"get_spread_history_api_v2_spreads_history_get","parameters":[{"name":"event_slug","in":"query","required":true,"schema":{"type":"string","title":"Event Slug"}},{"name":"outcome_key","in":"query","required":true,"schema":{"type":"string","title":"Outcome Key"}},{"name":"hours","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":720,"minimum":4},{"type":"null"}],"title":"Hours"}},{"name":"range","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(1d|1w|1m|all)$"},{"type":"null"}],"title":"Range"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/developers/signup":{"post":{"tags":["v2","Developer Portal"],"summary":"Developer Signup","operationId":"developer_signup_api_v2_developers_signup_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/developers/login":{"post":{"tags":["v2","Developer Portal"],"summary":"Developer Login","operationId":"developer_login_api_v2_developers_login_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/developers/me":{"get":{"tags":["v2","Developer Portal"],"summary":"Developer Me","operationId":"developer_me_api_v2_developers_me_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/developers/api-keys":{"post":{"tags":["v2","Developer Portal"],"summary":"Create Developer Api Key","operationId":"create_developer_api_key_api_v2_developers_api_keys_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/watchlists":{"post":{"tags":["v2","User Features"],"summary":"Create Watchlist","operationId":"create_watchlist_api_v2_watchlists_post","parameters":[{"name":"X-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["v2","User Features"],"summary":"List Watchlists","operationId":"list_watchlists_api_v2_watchlists_get","parameters":[{"name":"X-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/watchlists/{watchlist_id}/items":{"post":{"tags":["v2","User Features"],"summary":"Add Watchlist Item","operationId":"add_watchlist_item_api_v2_watchlists__watchlist_id__items_post","parameters":[{"name":"watchlist_id","in":"path","required":true,"schema":{"type":"string","title":"Watchlist Id"}},{"name":"X-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["v2","User Features"],"summary":"List Watchlist Items","operationId":"list_watchlist_items_api_v2_watchlists__watchlist_id__items_get","parameters":[{"name":"watchlist_id","in":"path","required":true,"schema":{"type":"string","title":"Watchlist Id"}},{"name":"X-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/alerts":{"post":{"tags":["v2","User Features"],"summary":"Create Alert","operationId":"create_alert_api_v2_alerts_post","parameters":[{"name":"X-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["v2","User Features"],"summary":"List Alerts","operationId":"list_alerts_api_v2_alerts_get","parameters":[{"name":"X-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/alerts/{alert_id}/snooze":{"post":{"tags":["v2","User Features"],"summary":"Snooze Alert","operationId":"snooze_alert_api_v2_alerts__alert_id__snooze_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"X-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/alerts/history":{"get":{"tags":["v2","User Features"],"summary":"Alert History","operationId":"alert_history_api_v2_alerts_history_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"X-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/alerts/evaluate":{"post":{"tags":["v2","User Features"],"summary":"Evaluate Alerts","operationId":"evaluate_alerts_api_v2_alerts_evaluate_post","parameters":[{"name":"X-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/billing/subscription":{"get":{"tags":["v2"],"summary":"Get Subscription State","operationId":"get_subscription_state_api_v2_billing_subscription_get","parameters":[{"name":"X-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/billing/checkout":{"post":{"tags":["v2"],"summary":"Create Checkout","operationId":"create_checkout_api_v2_billing_checkout_post","parameters":[{"name":"X-User-Id","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-User-Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/billing/webhook":{"post":{"tags":["v2"],"summary":"Billing Webhook","operationId":"billing_webhook_api_v2_billing_webhook_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/auth/signup/email":{"post":{"tags":["v2"],"summary":"Signup With Email","description":"Generate a magic link for email-based signup.","operationId":"signup_with_email_api_v2_auth_signup_email_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/auth/verify-email-token":{"post":{"tags":["v2"],"summary":"Verify Email Token","description":"Verify a magic token and create or return a developer account.","operationId":"verify_email_token_api_v2_auth_verify_email_token_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/auth/oauth/signin":{"post":{"tags":["v2"],"summary":"Oauth Signin","description":"Create or find a developer account via OAuth.","operationId":"oauth_signin_api_v2_auth_oauth_signin_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/auth/profile/update":{"post":{"tags":["v2"],"summary":"Update Profile","description":"Update user profile (name, etc.).","operationId":"update_profile_api_v2_auth_profile_update_post","parameters":[{"name":"X-API-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Email"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/auth/api-keys":{"get":{"tags":["v2"],"summary":"List Auth Api Keys","description":"List API keys for an authenticated dashboard user.","operationId":"list_auth_api_keys_api_v2_auth_api_keys_get","parameters":[{"name":"X-API-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["v2"],"summary":"Create Auth Api Key","description":"Create the first free API key for an authenticated dashboard user.","operationId":"create_auth_api_key_api_v2_auth_api_keys_post","parameters":[{"name":"X-API-Email","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Email"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/stream/health":{"get":{"tags":["Streaming & Real-Time Quotes"],"summary":"Collector & Stream Freshness Health","operationId":"get_stream_health_api_v2_stream_health_get","parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"enum":["polymarket","kalshi"],"type":"string"},{"type":"null"}],"title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/stream/snapshot":{"get":{"tags":["Streaming & Real-Time Quotes"],"summary":"Current Quote Snapshot with Cursor","operationId":"get_quote_snapshot_api_v2_stream_snapshot_get","parameters":[{"name":"market_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by platform market ID / condition ID","title":"Market Id"},"description":"Filter by platform market ID / condition ID"},{"name":"outcome_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated outcome IDs","title":"Outcome Ids"},"description":"Comma-separated outcome IDs"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"enum":["polymarket","kalshi"],"type":"string"},{"type":"null"}],"title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/stream/replay":{"get":{"tags":["Streaming & Real-Time Quotes"],"summary":"Replay Stream Events from Cursor","description":"Replays quote events from the durable Redis Stream starting immediately after\nthe provided `cursor`. Uses numeric cursor comparison for retention checking.","operationId":"replay_quote_stream_api_v2_stream_replay_get","parameters":[{"name":"cursor","in":"query","required":true,"schema":{"type":"string","description":"Stream cursor ID to resume from (e.g. 1790732769795-0)","title":"Cursor"},"description":"Stream cursor ID to resume from (e.g. 1790732769795-0)"},{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max entries to replay","default":100,"title":"Count"},"description":"Max entries to replay"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/stream/sse":{"get":{"tags":["Streaming & Real-Time Quotes"],"summary":"Server-Sent Events Live Stream with Gapless XREAD & Reconnect","description":"Subscribes the client to an SSE stream driven directly by Redis Stream (`XREAD <cursor>`).\n- Numeric cursor retention loss check (on connection AND during catch-up).\n- Gapless delivery: uses `Last-Event-ID` or `?cursor=` to replay from exact disconnection point.\n- Browser ID reset: `resync` and `snapshot` frames send `id: <tip_cursor>` to reset browser Last-Event-ID.\n- Fully normalized payload: JSON nulls instead of empty strings.","operationId":"sse_quote_stream_api_v2_stream_sse_get","parameters":[{"name":"market_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter stream to a specific market","title":"Market Id"},"description":"Filter stream to a specific market"},{"name":"outcome_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter stream to a specific outcome token ID","title":"Outcome Id"},"description":"Filter stream to a specific outcome token ID"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional stream cursor ID to resume from","title":"Cursor"},"description":"Optional stream cursor ID to resume from"},{"name":"include_snapshot","in":"query","required":false,"schema":{"type":"boolean","description":"Deliver initial snapshot before live push if starting new stream","default":true,"title":"Include Snapshot"},"description":"Deliver initial snapshot before live push if starting new stream"},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"enum":["polymarket","kalshi"],"type":"string"},{"type":"null"}],"title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}