{"openapi":"3.1.0","info":{"title":"KashRock API","description":"KashRock Esports API. Unified data for Apex Legends, Call of Duty, CS2, Deadlock, Dota 2, League of Legends, Mobile Legends, Rainbow Six Siege, Valorant.\nIncludes fixtures, box scores, and player rankings.\n\n### Esports Keys\n| Game | Key |\n|------|-----|\n| Apex Legends | `esports_apex` |\n| Call of Duty | `esports_cod` |\n| CS2 | `esports_cs2` |\n| Deadlock | `esports_deadlock` |\n| Dota 2 | `esports_dota2` |\n| League of Legends | `esports_lol` |\n| Mobile Legends | `esports_mlbb` |\n| Rainbow Six Siege | `esports_r6` |\n| Valorant | `esports_valorant` |\n\n","version":"7.0.0"},"paths":{"/v7/trade/status":{"get":{"tags":["V7"],"summary":"Trade Status","description":"What this key gets on /v7/trade — plan, delay, venues, live flag.","operationId":"trade_status_v7_trade_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v7/trade/settings":{"get":{"tags":["V7"],"summary":"Get Trade Settings","description":"This key's trade filters: saved values over the defaults.","operationId":"get_trade_settings_v7_trade_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["V7"],"summary":"Put Trade Settings","description":"Replace this key's trade filters; open sockets pick them up via the bus.","operationId":"put_trade_settings_v7_trade_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FiltersBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/trade/ledger":{"get":{"tags":["V7"],"summary":"Get Trade Ledger","description":"This key's execution reports — the console ledger scoped to one key.","operationId":"get_trade_ledger_v7_trade_ledger_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v7/esports/traders":{"get":{"tags":["V7"],"summary":"V7 Smart Money Traders","description":"Ranked public wallets trading esports markets. Builder+. Confidence-aware, not raw profit.","operationId":"v7_smart_money_traders_v7_esports_traders_get","parameters":[{"name":"game","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"cs2 | lol | dota2 | valorant; unset = all titles","title":"Game"},"description":"cs2 | lol | dota2 | valorant; unset = all titles"},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"7d | 30d | 90d | all (default 30d)","title":"Period"},"description":"7d | 30d | 90d | all (default 30d)"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"score (default) | pnl | roi | win_rate | volume","title":"Sort"},"description":"score (default) | pnl | roi | win_rate | volume"},{"name":"min_confidence","in":"query","required":false,"schema":{"type":"number","maximum":1,"minimum":0,"description":"Minimum confidence, 0 to 1","default":0.0,"title":"Min Confidence"},"description":"Minimum confidence, 0 to 1"},{"name":"min_positions","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Minimum settled positions","default":0,"title":"Min Positions"},"description":"Minimum settled positions"},{"name":"profitable","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"true = total P&L above zero; false = at or below zero","title":"Profitable"},"description":"true = total P&L above zero; false = at or below zero"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Market kind filter: series | map_1 | map_2 ...","title":"Market"},"description":"Market kind filter: series | map_1 | map_2 ..."},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque next_cursor from the prior page","title":"Cursor"},"description":"Opaque next_cursor from the prior page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/esports/traders/{wallet}":{"get":{"tags":["V7"],"summary":"V7 Smart Money Trader","description":"One public wallet's scores across periods and titles. Builder+.","operationId":"v7_smart_money_trader_v7_esports_traders__wallet__get","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string","title":"Wallet"}},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/esports/traders/{wallet}/history":{"get":{"tags":["V7"],"summary":"V7 Smart Money Trader History","description":"One wallet's public executions, newest first. Builder+.","operationId":"v7_smart_money_trader_history_v7_esports_traders__wallet__history_get","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string","title":"Wallet"}},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page size","default":100,"title":"Limit"},"description":"Page size"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque next_cursor from the prior page","title":"Cursor"},"description":"Opaque next_cursor from the prior page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/esports/traders/{wallet}/positions":{"get":{"tags":["V7"],"summary":"V7 Smart Money Trader Positions","description":"One wallet's latest stored positions. Builder+.","operationId":"v7_smart_money_trader_positions_v7_esports_traders__wallet__positions_get","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string","title":"Wallet"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"OPEN | REDEEMABLE | REDEEMABLE_LOST | MERGEABLE | CLOSED","title":"Status"},"description":"OPEN | REDEEMABLE | REDEEMABLE_LOST | MERGEABLE | CLOSED"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page size","default":100,"title":"Limit"},"description":"Page size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/esports/traders/{wallet}/performance":{"get":{"tags":["V7"],"summary":"V7 Smart Money Trader Performance","description":"Reconstructed performance for one wallet, net of what is known. Builder+.","operationId":"v7_smart_money_trader_performance_v7_esports_traders__wallet__performance_get","parameters":[{"name":"wallet","in":"path","required":true,"schema":{"type":"string","title":"Wallet"}},{"name":"game","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"cs2 | lol | dota2 | valorant; unset = all titles","title":"Game"},"description":"cs2 | lol | dota2 | valorant; unset = all titles"},{"name":"period","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"7d | 30d | 90d | all; unset returns every window","title":"Period"},"description":"7d | 30d | 90d | all; unset returns every window"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/esports/matches/{match_id}/smart-money":{"get":{"tags":["V7"],"summary":"V7 Smart Money Match","description":"Qualified wallet activity and a chart-ready timeline for one match. Builder+.","operationId":"v7_smart_money_match_v7_esports_matches__match_id__smart_money_get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","title":"Match Id"}},{"name":"game","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"cs2 | lol | dota2 | valorant","title":"Game"},"description":"cs2 | lol | dota2 | valorant"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma blocks: timeline, flow, signals, consensus","title":"Include"},"description":"Comma blocks: timeline, flow, signals, consensus"},{"name":"window_hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"description":"Lookback window in hours","default":72,"title":"Window Hours"},"description":"Lookback window in hours"},{"name":"min_confidence","in":"query","required":false,"schema":{"type":"number","maximum":1,"minimum":0,"description":"Qualified wallet floor","default":0.45,"title":"Min Confidence"},"description":"Qualified wallet floor"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Maximum executions read","default":1000,"title":"Limit"},"description":"Maximum executions read"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/esports/smart-money/flow":{"get":{"tags":["V7"],"summary":"V7 Smart Money Flow","description":"Net buying and selling by qualified wallets, bucketed over time. Builder+.","operationId":"v7_smart_money_flow_v7_esports_smart_money_flow_get","parameters":[{"name":"game","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"cs2 | lol | dota2 | valorant; unset = all titles","title":"Game"},"description":"cs2 | lol | dota2 | valorant; unset = all titles"},{"name":"window_hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"description":"Lookback window in hours","default":24,"title":"Window Hours"},"description":"Lookback window in hours"},{"name":"bucket","in":"query","required":false,"schema":{"type":"string","description":"5m | 15m | 1h | 4h | 1d","default":"1h","title":"Bucket"},"description":"5m | 15m | 1h | 4h | 1d"},{"name":"min_confidence","in":"query","required":false,"schema":{"type":"number","maximum":1,"minimum":0,"description":"Qualified wallet floor","default":0.45,"title":"Min Confidence"},"description":"Qualified wallet floor"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":1,"description":"Maximum executions read","default":20000,"title":"Limit"},"description":"Maximum executions read"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/esports/smart-money/signals":{"get":{"tags":["V7"],"summary":"V7 Smart Money Signals","description":"Detected qualified-wallet signals with evidence. Pro+.","operationId":"v7_smart_money_signals_v7_esports_smart_money_signals_get","parameters":[{"name":"game","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"cs2 | lol | dota2 | valorant; unset = all titles","title":"Game"},"description":"cs2 | lol | dota2 | valorant; unset = all titles"},{"name":"match","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"kr_match_id: one match only","title":"Match"},"description":"kr_match_id: one match only"},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"cluster_entry | capital_before_move | sharp_exit | consensus_divergence","title":"Kind"},"description":"cluster_entry | capital_before_move | sharp_exit | consensus_divergence"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opaque next_cursor from the prior page","title":"Cursor"},"description":"Opaque next_cursor from the prior page"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/ws-ticket":{"post":{"tags":["V7"],"summary":"V7 Ws Ticket","description":"Mint a 60s single-use, surface-bound WebSocket ticket for clients that\ncannot set headers. ``surface`` may be sent as a JSON body field or a query\nparam; sending both with different values is a 400, never a silent pick.","operationId":"v7_ws_ticket_v7_ws_ticket_post","parameters":[{"name":"surface","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Socket the ticket opens: live | trade","title":"Surface"},"description":"Socket the ticket opens: live | trade"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/matches":{"get":{"tags":["V7"],"summary":"V7 Matches","operationId":"v7_matches_v7__sport__matches_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"live | upcoming | finished; unset returns all three","title":"Status"},"description":"live | upcoming | finished; unset returns all three"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring on team names, slug or kr_match_id","title":"Q"},"description":"Substring on team names, slug or kr_match_id"},{"name":"ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of kr_match_id or slug; returns only those matches","title":"Ids"},"description":"Comma list of kr_match_id or slug; returns only those matches"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD (UTC)","title":"Date"},"description":"YYYY-MM-DD (UTC)"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Range start YYYY-MM-DD (UTC, inclusive)","title":"From"},"description":"Range start YYYY-MM-DD (UTC, inclusive)"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Range end YYYY-MM-DD (UTC, inclusive)","title":"To"},"description":"Range end YYYY-MM-DD (UTC, inclusive)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of from","title":"Start Date"},"description":"Alias of from"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of to","title":"End Date"},"description":"Alias of to"},{"name":"team","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"kr_tm id, slug or name: that team's schedule","title":"Team"},"description":"kr_tm id, slug or name: that team's schedule"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma blocks: boxscore, prep, veto, maps, player_board, lines, streams, h2h","title":"Include"},"description":"Comma blocks: boxscore, prep, veto, maps, player_board, lines, streams, h2h"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/matches/{match_ref}":{"get":{"tags":["V7"],"summary":"V7 Match","operationId":"v7_match_v7__sport__matches__match_ref__get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"match_ref","in":"path","required":true,"schema":{"type":"string","title":"Match Ref"}},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma blocks: boxscore, prep, veto, maps, player_board, lines, streams, h2h, sim","title":"Include"},"description":"Comma blocks: boxscore, prep, veto, maps, player_board, lines, streams, h2h, sim"},{"name":"map","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Map name for include=sim (e.g. Mirage)","title":"Map"},"description":"Map name for include=sim (e.g. Mirage)"},{"name":"n_sims","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":1000000,"minimum":1},{"type":"null"}],"description":"Sim count for include=sim (default 1000000, max 1000000)","title":"N Sims"},"description":"Sim count for include=sim (default 1000000, max 1000000)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/props":{"get":{"tags":["V7"],"summary":"V7 Props","operationId":"v7_props_v7__sport__props_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"board","in":"query","required":false,"schema":{"type":"string","description":"dfs = pick'em apps | main = sportsbook named props | all = both","default":"dfs","title":"Board"},"description":"dfs = pick'em apps | main = sportsbook named props | all = both"},{"name":"view","in":"query","required":false,"schema":{"type":"string","description":"groups = one object per bet | rows/props = flat rows | both","default":"groups","title":"View"},"description":"groups = one object per bet | rows/props = flat rows | both"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact canonical stat_type (kills, headshots, ...; /v7/meta markets lists them)","title":"Market"},"description":"Exact canonical stat_type (kills, headshots, ...; /v7/meta markets lists them)"},{"name":"player","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Player nickname substring, not an id","title":"Player"},"description":"Player nickname substring, not an id"},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Book key from /v7/meta books","title":"Book"},"description":"Book key from /v7/meta books"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"slim = bettable fields | full = identity/resolution blobs too","default":"slim","title":"Format"},"description":"slim = bettable fields | full = identity/resolution blobs too"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Accepted for cross-endpoint compatibility; the live board is not date-filtered.","title":"From"},"description":"Accepted for cross-endpoint compatibility; the live board is not date-filtered."},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Accepted for cross-endpoint compatibility; the live board is not date-filtered.","title":"To"},"description":"Accepted for cross-endpoint compatibility; the live board is not date-filtered."},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of from","title":"Start"},"description":"Alias of from"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of to","title":"End"},"description":"Alias of to"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of from","title":"Start Date"},"description":"Alias of from"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of to","title":"End Date"},"description":"Alias of to"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Page size; omit for the full board","title":"Limit"},"description":"Page size; omit for the full board"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/lines":{"get":{"tags":["V7"],"summary":"V7 Lines","operationId":"v7_lines_v7__sport__lines_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registry market key; unset = main markets only (match_winner, total_maps, ...)","title":"Market"},"description":"Registry market key; unset = main markets only (match_winner, total_maps, ...)"},{"name":"view","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"consensus (default) | moneyline","title":"View"},"description":"consensus (default) | moneyline"},{"name":"include_started","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Also serve matches already underway","title":"Include Started"},"description":"Also serve matches already underway"},{"name":"format","in":"query","required":false,"schema":{"type":"string","description":"slim (default) | full","default":"slim","title":"Format"},"description":"slim (default) | full"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Cap on events; total_events still reports the board's real size","title":"Limit"},"description":"Cap on events; total_events still reports the board's real size"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/cs2/sgp/quote":{"post":{"tags":["V7"],"summary":"V7 Cs2 Sgp Quote","description":"Price a CS2 same-game parlay: legs measured on one shared joint scenario tape. Builder+.","operationId":"v7_cs2_sgp_quote_v7_cs2_sgp_quote_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v7/cs2/sgp/ticket":{"post":{"tags":["V7"],"summary":"V7 Cs2 Sgp Ticket","description":"Price and record a CS2 same-game ticket; the stored price is computed server-side. Builder+.","operationId":"v7_cs2_sgp_ticket_v7_cs2_sgp_ticket_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v7/cs2/sgp/ticket/{ticket_id}":{"get":{"tags":["V7"],"summary":"V7 Cs2 Sgp Ticket Get","description":"Settle one stored same-game ticket from KashRock's stored results. Builder+.","operationId":"v7_cs2_sgp_ticket_get_v7_cs2_sgp_ticket__ticket_id__get","parameters":[{"name":"ticket_id","in":"path","required":true,"schema":{"type":"string","title":"Ticket Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/cs2/sgp/tickets":{"get":{"tags":["V7"],"summary":"V7 Cs2 Sgp Tickets","description":"Every recorded same-game ticket, newest first, open ones graded on read. Builder+.","operationId":"v7_cs2_sgp_tickets_v7_cs2_sgp_tickets_get","parameters":[{"name":"settle","in":"query","required":false,"schema":{"type":"boolean","description":"Grade open tickets from stored results as they are read","default":true,"title":"Settle"},"description":"Grade open tickets from stored results as they are read"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/parlays":{"get":{"tags":["V7"],"summary":"V7 Parlays","description":"Price a multi-leg ticket or discover ranked independent main-line parlays. Hobby+. No SGP.","operationId":"v7_parlays_v7__sport__parlays_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One LINE_BOOKS book; all legs must price on this book","title":"Book"},"description":"One LINE_BOOKS book; all legs must price on this book"},{"name":"ticket","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Price mode: comma-separated kr_match_id:market:selection. Omit to discover.","title":"Ticket"},"description":"Price mode: comma-separated kr_match_id:market:selection. Omit to discover."},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Main market filter; default match_winner","title":"Market"},"description":"Main market filter; default match_winner"},{"name":"size","in":"query","required":false,"schema":{"type":"integer","maximum":8,"minimum":2,"description":"Discover only: legs per parlay (2 to 8)","default":2,"title":"Size"},"description":"Discover only: legs per parlay (2 to 8)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Discover only: max parlays to return","default":25,"title":"Limit"},"description":"Discover only: max parlays to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Discover only: include=all keeps negative-EV parlays","title":"Include"},"description":"Discover only: include=all keeps negative-EV parlays"},{"name":"include_started","in":"query","required":false,"schema":{"type":"boolean","description":"Must be false: parlay legs require upcoming matches","default":false,"title":"Include Started"},"description":"Must be false: parlay legs require upcoming matches"},{"name":"min_grade","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Discover only: legs must grade at least this letter (b | a | a+); unset = all graded legs","title":"Min Grade"},"description":"Discover only: legs must grade at least this letter (b | a | a+); unset = all graded legs"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/flow":{"get":{"tags":["V7"],"summary":"V7 Flow","operationId":"v7_flow_v7__sport__flow_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","description":"all | volume | shift | steam | whale","default":"all","title":"Kind"},"description":"all | volume | shift | steam | whale"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registry market key filter","title":"Market"},"description":"Registry market key filter"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"include=all keeps negative-EV plays","title":"Include"},"description":"include=all keeps negative-EV plays"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page size","default":25,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/momentum":{"get":{"tags":["V7"],"summary":"V7 Momentum","description":"First-mover +EV plays: one book moved first, another still hangs the old price. Builder+.","operationId":"v7_momentum_v7__sport__momentum_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","description":"all | line | prop","default":"all","title":"Kind"},"description":"all | line | prop"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registry market key (lines) or stat type (props) filter","title":"Market"},"description":"Registry market key (lines) or stat type (props) filter"},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Book key filter: only plays bettable at this lag book","title":"Book"},"description":"Book key filter: only plays bettable at this lag book"},{"name":"mover","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Book key filter: only plays where this book moved first","title":"Mover"},"description":"Book key filter: only plays where this book moved first"},{"name":"min_ev","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum EV%% vs mover-devigged fair","title":"Min Ev"},"description":"Minimum EV%% vs mover-devigged fair"},{"name":"window_minutes","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":360,"minimum":5},{"type":"null"}],"description":"Move window; default 60","title":"Window Minutes"},"description":"Move window; default 60"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page size","default":25,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/arb":{"get":{"tags":["V7"],"summary":"V7 Arb","description":"Cross-book arbitrage on the lines board (Quant).","operationId":"v7_arb_v7__sport__arb_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registry market key filter","title":"Market"},"description":"Registry market key filter"},{"name":"match","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"kr_match_id or slug: one match only","title":"Match"},"description":"kr_match_id or slug: one match only"},{"name":"min_margin","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Minimum margin_pct to return","default":0.0,"title":"Min Margin"},"description":"Minimum margin_pct to return"},{"name":"stake","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Total stake; scales leg stake amounts","title":"Stake"},"description":"Total stake; scales leg stake amounts"},{"name":"include_started","in":"query","required":false,"schema":{"type":"boolean","description":"Include markets on matches already started","default":false,"title":"Include Started"},"description":"Include markets on matches already started"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/uav":{"get":{"tags":["V7"],"summary":"V7 Uav","description":"One match overview: card, phase, prematch/live blocks, flow plays, WS subscribe hint.","operationId":"v7_uav_v7__sport__uav_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"match","in":"query","required":true,"schema":{"type":"string","description":"Required. kr_match_id or slug; retired ids follow redirects","title":"Match"},"description":"Required. kr_match_id or slug; retired ids follow redirects"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma blocks: lines, prep, veto, maps, player_board, streams, h2h, boxscore, events, frame, odds, odds_history, flow","title":"Include"},"description":"Comma blocks: lines, prep, veto, maps, player_board, streams, h2h, boxscore, events, frame, odds, odds_history, flow"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/live":{"get":{"tags":["V7"],"summary":"V7 Live","operationId":"v7_live_v7__sport__live_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"game","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"kr_match_id or slug: one match only","title":"Game"},"description":"kr_match_id or slug: one match only"},{"name":"match","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of game; every sibling route names it match","title":"Match"},"description":"Alias of game; every sibling route names it match"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma blocks: boxscore, events, frame, odds, odds_history","title":"Include"},"description":"Comma blocks: boxscore, events, frame, odds, odds_history"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/players":{"get":{"tags":["V7"],"summary":"V7 Players","operationId":"v7_players_v7__sport__players_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Nickname substring search","title":"Q"},"description":"Nickname substring search"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of q; q wins when both are sent","title":"Search"},"description":"Alias of q; q wins when both are sent"},{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One kr_pl_* player id or kr_cb_* combo id","title":"Id"},"description":"One kr_pl_* player id or kr_cb_* combo id"},{"name":"ids","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of id; one id only (a comma list of 2+ answers one_id_required)","title":"Ids"},"description":"Alias of id; one id only (a comma list of 2+ answers one_id_required)"},{"name":"include","in":"query","required":false,"schema":{"type":"string","description":"Comma blocks: research, gamelogs, stats, stats_full, history, media","default":"","title":"Include"},"description":"Comma blocks: research, gamelogs, stats, stats_full, history, media"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"rank = lifetime winnings ranking","title":"Sort"},"description":"rank = lifetime winnings ranking"},{"name":"market","in":"query","required":false,"schema":{"type":"string","description":"Market key for gamelogs/stats includes","default":"kills_maps_1_2","title":"Market"},"description":"Market key for gamelogs/stats includes"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int, or the opaque gamelog cursor include=gamelogs returns","title":"Cursor"},"description":"Next offset as int, or the opaque gamelog cursor include=gamelogs returns"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/breakdown/published/{kind}/{slug}":{"get":{"tags":["V7"],"summary":"V7 Breakdown Published","description":"Public SEO page payload (facts + validated prose). Missing pages are available: false.","operationId":"v7_breakdown_published_v7__sport__breakdown_published__kind___slug__get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"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"}}}}}}},"/v7/{sport}/breakdown/index":{"get":{"tags":["V7"],"summary":"V7 Breakdown Index","description":"Published page index for sitemaps and hubs.\n\nIndex members used to outlive their page key (page TTL expires without the\nmember leaving the set), so the index listed pages that answered\npage_not_published — a sitemap that 404s. Every listed member is checked\nagainst its live page; dead members are dropped from the listing and pruned\nfrom the index itself, and lastmod falls back to the page's published_at\nwhen the meta entry is gone.","operationId":"v7_breakdown_index_v7__sport__breakdown_index_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter published pages by kind","title":"Kind"},"description":"Filter published pages by kind"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/breakdown":{"get":{"tags":["V7"],"summary":"V7 Breakdown","description":"One fact bundle for a match, team, or H2H pair. Builder+. Numbers only from KashRock caches/vault.","operationId":"v7_breakdown_v7__sport__breakdown_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"match","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"kr_match_id or slug: one match bundle","title":"Match"},"description":"kr_match_id or slug: one match bundle"},{"name":"team","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Team name or kr_tm_*: one team bundle","title":"Team"},"description":"Team name or kr_tm_*: one team bundle"},{"name":"team1","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"With team2: head-to-head bundle","title":"Team1"},"description":"With team2: head-to-head bundle"},{"name":"team2","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"With team1: head-to-head bundle","title":"Team2"},"description":"With team1: head-to-head bundle"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Rows inside list-shaped blocks","default":50,"title":"Limit"},"description":"Rows inside list-shaped blocks"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/teams":{"get":{"tags":["V7"],"summary":"V7 Teams","operationId":"v7_teams_v7__sport__teams_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"kr_tm_* team id or slug","title":"Id"},"description":"kr_tm_* team id or slug"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Name substring search","title":"Q"},"description":"Name substring search"},{"name":"team1","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"With team2: head-to-head view","title":"Team1"},"description":"With team2: head-to-head view"},{"name":"team2","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"With team1: head-to-head view","title":"Team2"},"description":"With team1: head-to-head view"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma blocks: form, roster, maps, h2h, main_lines, upcoming","title":"Include"},"description":"Comma blocks: form, roster, maps, h2h, main_lines, upcoming"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/history":{"get":{"tags":["V7"],"summary":"V7 History","operationId":"v7_history_v7__sport__history_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","description":"contract = one prop's line tape (props is an alias) | lines = team market tapes","default":"contract","title":"Kind"},"description":"contract = one prop's line tape (props is an alias) | lines = team market tapes"},{"name":"match","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"kr_match_id or slug: scope the tape to one match","title":"Match"},"description":"kr_match_id or slug: scope the tape to one match"},{"name":"prop","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"kr_prop id: required for kind=contract","title":"Prop"},"description":"kr_prop id: required for kind=contract"},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Book key filter","title":"Book"},"description":"Book key filter"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Cap on the quote tape; omit for the full tape","title":"Limit"},"description":"Cap on the quote tape; omit for the full tape"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Ticks to skip inside the tape (kind=lines)","default":0,"title":"Offset"},"description":"Ticks to skip inside the tape (kind=lines)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/results":{"get":{"tags":["V7"],"summary":"V7 Results","operationId":"v7_results_v7__sport__results_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"grade","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"hit | miss | push | void","title":"Grade"},"description":"hit | miss | push | void"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Earliest graded_at date YYYY-MM-DD (UTC, inclusive)","title":"From"},"description":"Earliest graded_at date YYYY-MM-DD (UTC, inclusive)"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Latest graded_at date YYYY-MM-DD (UTC, inclusive)","title":"To"},"description":"Latest graded_at date YYYY-MM-DD (UTC, inclusive)"},{"name":"start","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of from","title":"Start"},"description":"Alias of from"},{"name":"end","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of to","title":"End"},"description":"Alias of to"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of from","title":"Start Date"},"description":"Alias of from"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of to","title":"End Date"},"description":"Alias of to"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/meta":{"get":{"tags":["V7"],"summary":"V7 Meta","operationId":"v7_meta_v7_meta_get","parameters":[{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma adds: boards, coverage, teams, tournaments, changelog, live_coverage (needs sport)","title":"Include"},"description":"Comma adds: boards, coverage, teams, tournaments, changelog, live_coverage (needs sport)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One title: renders concrete /v7/<sport>/ routes and narrows teams/tournaments/live_coverage","title":"Sport"},"description":"One title: renders concrete /v7/<sport>/ routes and narrows teams/tournaments/live_coverage"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":14,"minimum":1,"description":"live_coverage window, 1 to 14 days","default":14,"title":"Days"},"description":"live_coverage window, 1 to 14 days"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/signals":{"get":{"tags":["V7"],"summary":"V7 Signals","description":"Mispricing alerts, steam moves, and arb alerts (Pro+).","operationId":"v7_signals_v7__sport__signals_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"mispricing | steam | arb | all (default)","title":"Kind"},"description":"mispricing | steam | arb | all (default)"},{"name":"match","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"kr_match_id or slug: one match only","title":"Match"},"description":"kr_match_id or slug: one match only"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Registry market key filter","title":"Market"},"description":"Registry market key filter"},{"name":"min_edge","in":"query","required":false,"schema":{"anyOf":[{"type":"number","minimum":0},{"type":"null"}],"description":"Minimum edge percentage to surface","title":"Min Edge"},"description":"Minimum edge percentage to surface"},{"name":"include_started","in":"query","required":false,"schema":{"type":"boolean","description":"Include arbs on matches already underway (Quant)","default":false,"title":"Include Started"},"description":"Include arbs on matches already underway (Quant)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/clv":{"get":{"tags":["V7"],"summary":"V7 Clv","description":"Closing line value per bet, per book (Quant).","operationId":"v7_clv_v7__sport__clv_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"match","in":"query","required":true,"schema":{"type":"string","description":"Required. kr_match_id or slug: one match only","title":"Match"},"description":"Required. kr_match_id or slug: one match only"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Market type filter","title":"Market"},"description":"Market type filter"},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Book key filter (registry key, e.g. ggbet)","title":"Book"},"description":"Book key filter (registry key, e.g. ggbet)"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date YYYY-MM-DD","title":"From"},"description":"Start date YYYY-MM-DD"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date YYYY-MM-DD","title":"To"},"description":"End date YYYY-MM-DD"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/webhooks":{"get":{"tags":["V7"],"summary":"V7 Webhooks List","description":"List registered signal webhooks (Quant).","operationId":"v7_webhooks_list_v7_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["V7"],"summary":"V7 Webhooks Create","description":"Register a signal webhook endpoint (Quant).","operationId":"v7_webhooks_create_v7_webhooks_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v7/webhooks/{webhook_id}":{"delete":{"tags":["V7"],"summary":"V7 Webhooks Delete","description":"Remove a signal webhook (Quant).","operationId":"v7_webhooks_delete_v7_webhooks__webhook_id__delete","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/backtest":{"get":{"tags":["V7"],"summary":"V7 Backtest","description":"Backtest a strategy against historical lines data (Quant).","operationId":"v7_backtest_v7__sport__backtest_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"market","in":"query","required":false,"schema":{"type":"string","description":"Market type to backtest","default":"match_winner","title":"Market"},"description":"Market type to backtest"},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Book key filter","title":"Book"},"description":"Book key filter"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Start date YYYY-MM-DD","title":"From"},"description":"Start date YYYY-MM-DD"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"End date YYYY-MM-DD","title":"To"},"description":"End date YYYY-MM-DD"},{"name":"min_edge","in":"query","required":false,"schema":{"type":"number","minimum":0,"description":"Minimum edge percentage to trigger a simulated bet","default":3.0,"title":"Min Edge"},"description":"Minimum edge percentage to trigger a simulated bet"},{"name":"stake","in":"query","required":false,"schema":{"type":"number","exclusiveMinimum":0,"description":"Flat stake per bet","default":100.0,"title":"Stake"},"description":"Flat stake per bet"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/portfolio":{"get":{"tags":["V7"],"summary":"V7 Portfolio List","description":"List bets in your portfolio with stats (Quant).","operationId":"v7_portfolio_list_v7__sport__portfolio_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"result","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter: win | loss | push | pending","title":"Result"},"description":"Filter: win | loss | push | pending"},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Book key filter","title":"Book"},"description":"Book key filter"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Market type filter","title":"Market"},"description":"Market type filter"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Earliest placed_at date YYYY-MM-DD","title":"From"},"description":"Earliest placed_at date YYYY-MM-DD"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Latest placed_at date YYYY-MM-DD","title":"To"},"description":"Latest placed_at date YYYY-MM-DD"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of top-level body keys to keep","title":"Fields"},"description":"Comma list of top-level body keys to keep"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Next offset as int (same as offset)","title":"Cursor"},"description":"Next offset as int (same as offset)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/portfolio/track":{"post":{"tags":["V7"],"summary":"V7 Portfolio Track","description":"Track a bet in your portfolio (Quant).","operationId":"v7_portfolio_track_v7__sport__portfolio_track_post","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/portfolio/{bet_id}":{"delete":{"tags":["V7"],"summary":"V7 Portfolio Delete","description":"Remove a bet from your portfolio (Quant).","operationId":"v7_portfolio_delete_v7_portfolio__bet_id__delete","parameters":[{"name":"bet_id","in":"path","required":true,"schema":{"type":"string","title":"Bet Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/tools/convert":{"get":{"tags":["V7"],"summary":"V7 Tools Convert","description":"One price in, every spelling out: american, decimal, probability, percent.","operationId":"v7_tools_convert_v7_tools_convert_get","parameters":[{"name":"american","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"American odds, e.g. +350 → 350, -120 → -120","title":"American"},"description":"American odds, e.g. +350 → 350, -120 → -120"},{"name":"decimal","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Decimal odds, e.g. 4.5","title":"Decimal"},"description":"Decimal odds, e.g. 4.5"},{"name":"probability","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Implied chance as a fraction 0..1","title":"Probability"},"description":"Implied chance as a fraction 0..1"},{"name":"percent","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Implied chance as percent 0..100","title":"Percent"},"description":"Implied chance as percent 0..100"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/tools/kelly":{"get":{"tags":["V7"],"summary":"V7 Tools Kelly","description":"Kelly stake for a given edge and price. Same formula as kashrock_math.kelly.","operationId":"v7_tools_kelly_v7_tools_kelly_get","parameters":[{"name":"fair_probability","in":"query","required":true,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"description":"Your win chance as a fraction 0..1","title":"Fair Probability"},"description":"Your win chance as a fraction 0..1"},{"name":"decimal","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Decimal price, e.g. 5.7","title":"Decimal"},"description":"Decimal price, e.g. 5.7"},{"name":"american","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"American price, e.g. +470 → 470","title":"American"},"description":"American price, e.g. +470 → 470"},{"name":"fraction","in":"query","required":false,"schema":{"type":"number","maximum":1.0,"minimum":0.0,"description":"Kelly fraction: 1=full (don't), 0.5=half, 0.25=quarter, 0.125=eighth","default":0.25,"title":"Fraction"},"description":"Kelly fraction: 1=full (don't), 0.5=half, 0.25=quarter, 0.125=eighth"},{"name":"bankroll","in":"query","required":false,"schema":{"anyOf":[{"type":"number","exclusiveMinimum":0},{"type":"null"}],"description":"Dollars — adds the stake in money","title":"Bankroll"},"description":"Dollars — adds the stake in money"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v7/{sport}/completeness":{"get":{"tags":["V7"],"summary":"V7 Completeness","description":"Finished matches for a UTC day with map-level completeness, provenance and the reason for any gap.","operationId":"v7_completeness_v7__sport__completeness_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One UTC day, YYYY-MM-DD. Defaults to today.","title":"Date"},"description":"One UTC day, YYYY-MM-DD. Defaults to today."},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Range start, YYYY-MM-DD.","title":"From"},"description":"Range start, YYYY-MM-DD."},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Range end, inclusive.","title":"To"},"description":"Range end, inclusive."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Page size, 1 to 500.","default":100,"title":"Limit"},"description":"Page size, 1 to 500."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Rows to skip before this page.","default":0,"title":"Offset"},"description":"Rows to skip before this page."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/props":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Moved — use GET /v6/esports/{sport}/props","operationId":"redirect_props_query_v6_esports_props_get","deprecated":true,"parameters":[{"name":"game","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Deprecated. Put the sport in the path.","title":"Game"},"description":"Deprecated. Put the sport in the path."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/props/{game}":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Moved — use GET /v6/esports/{sport}/props","operationId":"redirect_props_path_v6_esports_props__game__get","deprecated":true,"parameters":[{"name":"game","in":"path","required":true,"schema":{"type":"string","title":"Game"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/canonical/matches/{match_id}":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Canonical Match Details","description":"Get a 'canonical match view' returning:\n- match canonical info\n- all alias ids by source\n- confidence + factors","operationId":"get_canonical_match_details_v6_esports_canonical_matches__match_id__get","parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"string","description":"The KashRock UUID of the match","title":"Match Id"},"description":"The KashRock UUID of the match"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/matches/live":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Matches Live By Discipline","description":"Live matches alias — same as GET /v6/esports/{sport}/matches/live.","operationId":"get_matches_live_by_discipline_v6_esports_matches_live_get","parameters":[{"name":"discipline","in":"query","required":false,"schema":{"type":"string","description":"Esport discipline: cs2, valorant, lol, dota2","default":"cs2","title":"Discipline"},"description":"Esport discipline: cs2, valorant, lol, dota2"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/players/{player_id}/history":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Player History","description":"Get last N games history for a player.\nScans recent maps and returns per-map stats for the given player slug/nickname.\n\nSandbox: last 30 days. Hobby: last 90 days. Builder/Pro: full vault.","operationId":"get_esports_player_history_v6_esports_players__player_id__history_get","parameters":[{"name":"player_id","in":"path","required":true,"schema":{"type":"string","description":"Player slug or nickname","title":"Player Id"},"description":"Player slug or nickname"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/props":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Player Props","description":"Live DFS player props only (PrizePicks, Underdog, Dabble, ParlayPlay, Sleeper, Betr, Boom, Pick6, Chalkboard, GetPicks).\n\nSportsbook named-player props + DFS together: GET /{sport}/player-props.\nTeam mainlines (Pinnacle, Thunderpick, …): GET /{sport}/lines.\n\nEvery row carries deeplink (URL that opens the book to bet, or null) and\ndeeplink_level (selection | player | match | board, best first).","operationId":"get_esports_player_props_v6_esports__sport__props_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock, or 'all'","examples":["cs2"],"title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock, or 'all'"},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"DFS book: prizepicks, underdog, dabble, sleeper, parlayplay, betr, boom, pick6, chalkboard, getpicks","title":"Book"},"description":"DFS book: prizepicks, underdog, dabble, sleeper, parlayplay, betr, boom, pick6, chalkboard, getpicks"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact match on canonical stat_type","title":"Market"},"description":"Exact match on canonical stat_type"},{"name":"market_contains","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring match on stat_type","title":"Market Contains"},"description":"Substring match on stat_type"},{"name":"player_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by KashRock player id (kr_pl_*). Numerics are rejected.","title":"Player Id"},"description":"Filter by KashRock player id (kr_pl_*). Numerics are rejected."},{"name":"player","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by player name (case-insensitive substring)","title":"Player"},"description":"Filter by player name (case-insensitive substring)"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size; omit = full filtered board","title":"Limit"},"description":"Page size; omit = full filtered board"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page offset","default":0,"title":"Offset"},"description":"Page offset"},{"name":"slim","in":"query","required":false,"schema":{"type":"boolean","description":"Strip identity/resolution blobs","default":false,"title":"Slim"},"description":"Strip identity/resolution blobs"},{"name":"view","in":"query","required":false,"schema":{"type":"string","description":"props (default, flat rows) | groups | both — grouped per bet like /player-props","default":"props","title":"View"},"description":"props (default, flat rows) | groups | both — grouped per bet like /player-props"},{"name":"include_props","in":"query","required":false,"schema":{"type":"boolean","description":"Set false for books/total only (coverage checks)","default":true,"title":"Include Props"},"description":"Set false for books/total only (coverage checks)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Esports Player Props V6 Esports  Sport  Props Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/fixtures":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Fixtures","description":"Get match fixtures and schedule for a specific eSport from KashRock cache.","operationId":"get_esports_fixtures_v6_esports__sport__fixtures_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","examples":["cs2"],"title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date (UTC)","examples":["2026-11-11"],"title":"Start Date"},"description":"Start date (UTC)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date (UTC)","title":"End Date"},"description":"End date (UTC)"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: upcoming, live, ended","title":"Status"},"description":"Filter by status: upcoming, live, ended"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size; omit = full filtered board","title":"Limit"},"description":"Page size; omit = full filtered board"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page offset","default":0,"title":"Offset"},"description":"Page offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Esports Fixtures V6 Esports  Sport  Fixtures Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/boxscores":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Boxscores","description":"Recent finished boxscores. Paginate with limit/offset. Players emit `kr_pl_*`.\n\nSandbox: last 30 days. Hobby: last 90 days. Builder/Pro: full vault.","operationId":"get_esports_boxscores_v6_esports__sport__boxscores_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Start date (UTC)","title":"Start Date"},"description":"Start date (UTC)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"End date (UTC)","title":"End Date"},"description":"End date (UTC)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Page size","default":20,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip (pagination)","default":0,"title":"Offset"},"description":"Rows to skip (pagination)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Esports Boxscores V6 Esports  Sport  Boxscores Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/rankings":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Rankings","description":"Get player rankings and performance stats.\nThis data is fully canonized in the KashRock format.","operationId":"get_esports_rankings_v6_esports__sport__rankings_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","examples":["cs2"],"title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"filter","in":"query","required":false,"schema":{"type":"string","description":"Stats filter: lifetime, last_3_months, etc.","examples":["lifetime"],"default":"lifetime","title":"Filter"},"description":"Stats filter: lifetime, last_3_months, etc."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Esports Rankings V6 Esports  Sport  Rankings Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/players/search":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Search Esports Players","description":"Search players by nickname. Rows emit `kr_pl_*` (not source numerics).","operationId":"search_esports_players_v6_esports__sport__players_search_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","examples":["cs2"],"title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Player nickname search query","title":"Q"},"description":"Player nickname search query"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias for q","title":"Search"},"description":"Alias for q"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max players to return","default":25,"title":"Limit"},"description":"Max players to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Search Esports Players V6 Esports  Sport  Players Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/players/{player_id}":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Player Detail","description":"Get detailed player profile, historical stats, and recent match performance (Past Games).\nThis data is fully canonized in the KashRock format.\nPass nickname or kr_pl_* from search_players / props.","operationId":"get_esports_player_detail_v6_esports__sport__players__player_id__get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","examples":["cs2"],"title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"player_id","in":"path","required":true,"schema":{"type":"string","description":"kr_pl_* id, slug, numeric id, or nickname","examples":["zywoo"],"title":"Player Id"},"description":"kr_pl_* id, slug, numeric id, or nickname"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"LoL, Dota 2, Valorant: heroes = most-played champions, heroes or agents with games, win rate and key stats.","title":"Include"},"description":"LoL, Dota 2, Valorant: heroes = most-played champions, heroes or agents with games, win rate and key stats."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Esports Player Detail V6 Esports  Sport  Players  Player Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/players/{player_id}/stats":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Player Stats","description":"Get comprehensive player statistics including K/D, ADR, rating, and performance metrics.\nPass nickname or kr_pl_* from search_players / props.","operationId":"get_esports_player_stats_v6_esports__sport__players__player_id__stats_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","examples":["cs2"],"title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"player_id","in":"path","required":true,"schema":{"type":"string","description":"kr_pl_* id, slug, numeric id, or nickname","examples":["zywoo"],"title":"Player Id"},"description":"kr_pl_* id, slug, numeric id, or nickname"},{"name":"include_history","in":"query","required":false,"schema":{"type":"boolean","description":"Include historical match performance data","default":true,"title":"Include History"},"description":"Include historical match performance data"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Esports Player Stats V6 Esports  Sport  Players  Player Id  Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/players/{player_id}/stats/full":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Player Stats Full","description":"Cache-only aggregate: period stats + foundation metrics + recent maps.\n\nMissing cache sections stay null with coverage flags — never drops the player.\nPass nickname or kr_pl_* from search_players / props.","operationId":"get_esports_player_stats_full_v6_esports__sport__players__player_id__stats_full_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","examples":["cs2"],"title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"player_id","in":"path","required":true,"schema":{"type":"string","description":"kr_pl_* id, slug, numeric id, or nickname","examples":["zywoo"],"title":"Player Id"},"description":"kr_pl_* id, slug, numeric id, or nickname"},{"name":"recent_limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Max recent cached maps to include","default":20,"title":"Recent Limit"},"description":"Max recent cached maps to include"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Esports Player Stats Full V6 Esports  Sport  Players  Player Id  Stats Full Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/streams":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Streams","description":"Get live streams for an esports game (viewer counts and platform info).","operationId":"get_esports_streams_v6_esports__sport__streams_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/teams":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Teams","description":"Get teams for an esports game (name, logo, social links, rankings).","operationId":"get_esports_teams_v6_esports__sport__teams_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","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"}}}}}}},"/v6/esports/{sport}/players":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Players","description":"Get players for an esports game (nickname, kr_pl_*, team, social links, rankings).","operationId":"get_esports_players_v6_esports__sport__players_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter players by nickname (case-insensitive partial match)","title":"Search"},"description":"Filter players by nickname (case-insensitive partial match)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max players to return","default":100,"title":"Limit"},"description":"Max players to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/tournaments":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Tournaments","description":"Get tournaments for an esports game (dates, prize pool, tier).","operationId":"get_esports_tournaments_v6_esports__sport__tournaments_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Sport Matches","description":"Convenience matches endpoint for a sport.\n\nRows emit `kr_match_id` and `kr_tm_*` team ids (not source numerics).\n\nDispatches by `status`:\n- live → /{sport}/matches/live\n- upcoming (default) → /{sport}/upcoming/matches\n- finished/completed → /{sport}/completed/matches (vault history)","operationId":"get_sport_matches_v6_esports__sport__matches_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","examples":["cs2"],"title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter: live, upcoming, finished/completed","title":"Status"},"description":"Filter: live, upcoming, finished/completed"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter by start date (YYYY-MM-DD)","title":"Start Date"},"description":"Filter by start date (YYYY-MM-DD)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter by end date (YYYY-MM-DD)","title":"End Date"},"description":"Filter by end date (YYYY-MM-DD)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Page size","default":50,"title":"Limit"},"description":"Page size"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip (pagination)","default":0,"title":"Offset"},"description":"Rows to skip (pagination)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/upcoming/matches":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Upcoming Matches","description":"Upcoming matches with `kr_match_id` and `kr_tm_*` team ids.","operationId":"get_upcoming_matches_v6_esports__sport__upcoming_matches_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Esport sport: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Esport sport: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max upcoming matches to return","default":20,"title":"Limit"},"description":"Max upcoming matches to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/completed/matches":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Completed Matches","description":"Completed matches from the history vault, paginated. Rows emit `kr_match_id` and `kr_tm_*`.\n\nSandbox: last 30 days. Hobby: last 90 days. Builder/Pro: full vault.","operationId":"get_completed_matches_v6_esports__sport__completed_matches_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Esport sport: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Esport sport: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive from date (vault)","title":"Start Date"},"description":"Inclusive from date (vault)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive to date (vault)","title":"End Date"},"description":"Inclusive to date (vault)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Page size from history vault","default":500,"title":"Limit"},"description":"Page size from history vault"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Rows to skip","default":0,"title":"Offset"},"description":"Rows to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/schedule":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Match Schedule","description":"Live/upcoming from the hot board + finished history from the vault.","operationId":"get_match_schedule_v6_esports__sport__schedule_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Esport sport: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Esport sport: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by specific date (YYYY-MM-DD)","title":"Date"},"description":"Filter by specific date (YYYY-MM-DD)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive from date (vault finished)","title":"Start Date"},"description":"Inclusive from date (vault finished)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive to date (vault finished)","title":"End Date"},"description":"Inclusive to date (vault finished)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"description":"Max finished history rows from vault","default":500,"title":"Limit"},"description":"Max finished history rows from vault"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Finished history offset","default":0,"title":"Offset"},"description":"Finished history offset"},{"name":"include_history","in":"query","required":false,"schema":{"type":"boolean","description":"Include vault finished matches (set false for hot board only)","default":true,"title":"Include History"},"description":"Include vault finished matches (set false for hot board only)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/upcoming":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Upcoming Fixtures","description":"Get upcoming fixtures for a sport from worker cache.","operationId":"get_upcoming_fixtures_v6_esports__sport__upcoming_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/search":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Search Esports Matches","description":"Search for an esports match by team names and optional date.\n\nThis is the primary way to look up a match without knowing the internal slug.\nReturns the canonical KashRock match object including `kr_match_id` and `slug`.\nThe `slug` can then be used in `GET /esports/{sport}/matches/{slug}/boxscore`.\n\nMisses return HTTP 200 with empty `matches` (not 404) so clients can treat\nsearch as a query, not a hard resource lookup.\n\n**Examples:**\n- `/esports/cs2/matches/search?team1=ARCRED&team2=Metizport&date=2026-04-16`\n- `/esports/cs2/matches/search?team1=Metizport`\n- `/esports/cs2/matches/search?team1=Vitality&event_time=2026-04-15T18:00:00Z`","operationId":"search_esports_matches_v6_esports__sport__matches_search_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"team1","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"First team name (partial match supported)","title":"Team1"},"description":"First team name (partial match supported)"},{"name":"team2","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Second team name (optional)","title":"Team2"},"description":"Second team name (optional)"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Match date YYYY-MM-DD (optional)","title":"Date"},"description":"Match date YYYY-MM-DD (optional)"},{"name":"event_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO event timestamp (alternative to date)","title":"Event Time"},"description":"ISO event timestamp (alternative to date)"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias for team1","title":"Q"},"description":"Alias for team1"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/id/{kr_match_id}":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Match By Kr Id","description":"Look up a match by its KashRock canonical match ID.\n\n    KashRock match IDs are stable, deterministic, and returned by all match-listing\nendpoints as the `kr_match_id` field. Format: `kr_{sport}_{team-a-vs-team-b-DD-MM-YYYY}`.\n    The match carries `streams`: every watch link kept for it.","operationId":"get_match_by_kr_id_v6_esports__sport__matches_id__kr_match_id__get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"kr_match_id","in":"path","required":true,"schema":{"type":"string","description":"KashRock match ID (kr_{sport}_{slug})","title":"Kr Match Id"},"description":"KashRock match ID (kr_{sport}_{slug})"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/live":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Live Matches","description":"Get currently live / in-progress matches from Redis.\n\nServed from cache only, never an upstream fetch. The live-matches worker\nprimes `esports:live:matches:{game}` on a short interval.","operationId":"get_live_matches_v6_esports__sport__matches_live_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/date/{match_date}":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Matches By Date","description":"Get all matches for a specific date — upcoming, live, and completed.\n\nReturns match stubs with scores. To get full per-map player stats for a\ncompleted match, use `GET /esports/{sport}/matches/{slug}/boxscore`.\n\nHistorical dates beyond the last ~7 days may have limited coverage.","operationId":"get_matches_by_date_v6_esports__sport__matches_date__match_date__get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"match_date","in":"path","required":true,"schema":{"type":"string","description":"Date in YYYY-MM-DD format","title":"Match Date"},"description":"Date in YYYY-MM-DD format"},{"name":"include_upcoming","in":"query","required":false,"schema":{"type":"boolean","description":"Include upcoming/scheduled matches for the date","default":true,"title":"Include Upcoming"},"description":"Include upcoming/scheduled matches for the date"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/{match_slug}/boxscore":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Match Boxscore","description":"Finished-match per-map boxscore by KashRock slug or `kr_match_id`.\n\nResolves from cache, then the history vault. Not live KDA\n(`GET /{sport}/live/{game_id}/boxscore`).\n\nEach map includes player combat stats and sport-native model fields when\npresent (gold, GPM, DPM, hero, items). Lineup includes STARTER and SUB.\nTeams and players emit `kr_tm_*` / `kr_pl_*`.\n\nSandbox: last 30 days. Hobby: last 90 days. Builder/Pro: full vault.","operationId":"get_match_boxscore_v6_esports__sport__matches__match_slug__boxscore_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"match_slug","in":"path","required":true,"schema":{"type":"string","description":"KashRock match slug or kr_match_id (e.g. arcred-vs-metizport-16-04-2026)","title":"Match Slug"},"description":"KashRock match slug or kr_match_id (e.g. arcred-vs-metizport-16-04-2026)"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`history` adds result_history (every result the series and each map has had)","title":"Include"},"description":"`history` adds result_history (every result the series and each map has had)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/{match_slug}/betting-lines":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Match Betting Lines","description":"Get betting lines and odds for a specific match.\n\nReturns comprehensive betting data including:\n- Team coefficients (odds) for both teams\n- Multiple market types (handicaps, correct scores, total maps)\n- Provider information and market counts\n- Active/inactive status for each market","operationId":"get_match_betting_lines_v6_esports__sport__matches__match_slug__betting_lines_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"match_slug","in":"path","required":true,"schema":{"type":"string","description":"KashRock match slug or kr_match_id (e.g. arcred-vs-metizport-16-04-2026)","title":"Match Slug"},"description":"KashRock match slug or kr_match_id (e.g. arcred-vs-metizport-16-04-2026)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/players/{player_slug}/gamelogs":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Player Gamelogs","description":"Per-map game log for a player from the history vault — kills, deaths,\nheadshots, assists, ADR, scores, and match context. Newest first, paged:\npass next_cursor back as cursor until it is null.\n\nSandbox: last 30 days. Hobby: last 90 days. Builder/Pro: full vault.","operationId":"get_player_gamelogs_v6_esports__sport__players__player_slug__gamelogs_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"player_slug","in":"path","required":true,"schema":{"type":"string","description":"kr_pl_* id, slug, numeric id, or nickname (case-insensitive)","title":"Player Slug"},"description":"kr_pl_* id, slug, numeric id, or nickname (case-insensitive)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maps per page. Default 500, capped to your plan's maximum (Sandbox 100, Hobby 500, Builder 2000, Pro 5000). A larger value is capped, not rejected; follow next_cursor for the rest.","default":500,"title":"Limit"},"description":"Maps per page. Default 500, capped to your plan's maximum (Sandbox 100, Hobby 500, Builder 2000, Pro 5000). A larger value is capped, not rejected; follow next_cursor for the rest."},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"next_cursor from the previous page. Omit for the newest maps.","title":"Cursor"},"description":"next_cursor from the previous page. Omit for the newest maps."},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Oldest map date to include (YYYY-MM-DD, UTC).","title":"From"},"description":"Oldest map date to include (YYYY-MM-DD, UTC)."},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Newest map date to include (YYYY-MM-DD, UTC, inclusive).","title":"To"},"description":"Newest map date to include (YYYY-MM-DD, UTC, inclusive)."},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma list of extras. include=rounds adds per-round timelines. They are always included when limit is 500 or less, and omitted above that unless asked for.","title":"Include"},"description":"Comma list of extras. include=rounds adds per-round timelines. They are always included when limit is 500 or less, and omitted above that unless asked for."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/players/{player_slug}/tournaments":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Player Tournaments","description":"Tournaments a player has logged maps in, newest first — the vault's record.","operationId":"get_player_tournaments_v6_esports__sport__players__player_slug__tournaments_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"player_slug","in":"path","required":true,"schema":{"type":"string","description":"kr_pl_* id, slug, numeric id, or nickname (case-insensitive)","title":"Player Slug"},"description":"kr_pl_* id, slug, numeric id, or nickname (case-insensitive)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/players/combo/{kr_cb}":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Player Combo","description":"A combo prop (\"A + B\") as a research subject: its members, and the sum of their stat on every map\nthey all played, newest first. A combo is the same id on every book whatever order the names are listed in.","operationId":"get_player_combo_v6_esports__sport__players_combo__kr_cb__get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock, r6","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock, r6"},{"name":"kr_cb","in":"path","required":true,"schema":{"type":"string","description":"kr_cb_* combo id from a combo prop's subject_id","title":"Kr Cb"},"description":"kr_cb_* combo id from a combo prop's subject_id"},{"name":"stat","in":"query","required":false,"schema":{"type":"string","description":"Counting stat to sum: kills, deaths, assists, headshots, first_kills, first_deaths, trade_kills, trade_deaths, flash_assists, clutches, multikills, damage_dealt, damage_received, hits, shots","default":"kills","title":"Stat"},"description":"Counting stat to sum: kills, deaths, assists, headshots, first_kills, first_deaths, trade_kills, trade_deaths, flash_assists, clutches, multikills, damage_dealt, damage_received, hits, shots"},{"name":"scope","in":"query","required":false,"schema":{"type":"string","description":"map: one row per map all members played. match: each match's maps summed.","default":"map","title":"Scope"},"description":"map: one row per map all members played. match: each match's maps summed."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maps read per member, capped to your plan's gamelog maximum.","default":500,"title":"Limit"},"description":"Maps read per member, capped to your plan's gamelog maximum."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/teams/h2h":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Team H2H","description":"Finished team-vs-team meetings from the history vault (scores + maps).","operationId":"get_team_h2h_v6_esports__sport__teams_h2h_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock"},{"name":"team1","in":"query","required":true,"schema":{"type":"string","description":"First team name","title":"Team1"},"description":"First team name"},{"name":"team2","in":"query","required":true,"schema":{"type":"string","description":"Second team name","title":"Team2"},"description":"Second team name"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Recent meetings to return","default":50,"title":"Limit"},"description":"Recent meetings to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/results":{"get":{"tags":["Esports Data","Esports Data","Esports Data"],"summary":"Get Esports Prop Results","description":"Return graded prop results for the given sport.\n\nResults are graded from per-map player stats (CS2 only for now).\nGrades: hit | miss | push | pending | error.\nSandbox: last 30 days. Hobby: last 90 days. Builder/Pro: full vault.","operationId":"get_esports_prop_results_v6_esports__sport__results_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock, or 'all'","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, mlbb, deadlock, or 'all'"},{"name":"grade","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by grade: hit, miss, push, pending, error","title":"Grade"},"description":"Filter by grade: hit, miss, push, pending, error"},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Earliest graded_at date (YYYY-MM-DD, UTC, inclusive)","title":"From"},"description":"Earliest graded_at date (YYYY-MM-DD, UTC, inclusive)"},{"name":"to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Latest graded_at date (YYYY-MM-DD, UTC, inclusive)","title":"To"},"description":"Latest graded_at date (YYYY-MM-DD, UTC, inclusive)"},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by book name, exact","title":"Book"},"description":"Filter by book name, exact"},{"name":"stat_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by canonical stat_type, exact","title":"Stat Type"},"description":"Filter by canonical stat_type, exact"},{"name":"event_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by KashRock event id","title":"Event Id"},"description":"Filter by KashRock event id"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max graded results to return","default":50,"title":"Limit"},"description":"Max graded results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Results offset for pagination","default":0,"title":"Offset"},"description":"Results offset for pagination"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Keyset cursor from a prior page's next_cursor (graded_at|prop_id)","title":"Cursor"},"description":"Keyset cursor from a prior page's next_cursor (graded_at|prop_id)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/teams/{team}/matches":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Team Matches","description":"Full finished team schedule from the history vault (paginated).","operationId":"get_team_matches_v6_esports__sport__teams__team__matches_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, …","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, …"},{"name":"team","in":"path","required":true,"schema":{"type":"string","description":"Team name or slug (e.g. Natus Vincere)","title":"Team"},"description":"Team name or slug (e.g. Natus Vincere)"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive from date","title":"Start Date"},"description":"Inclusive from date"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Inclusive to date","title":"End Date"},"description":"Inclusive to date"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"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 Get Team Matches V6 Esports  Sport  Teams  Team  Matches Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/defense-vs-role":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Defense Vs Role","description":"League table: what every team allows to the opposing player in each role.\n\nAverage per opposing player per map over each team's last N maps, against the\nleague average for that role, with a rank. Sandbox: Last 10 only, last 30 days.\nHobby: last 90 days. Builder and up: full history.","operationId":"get_defense_vs_role_v6_esports__sport__defense_vs_role_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: dota2 or valorant","title":"Sport"},"description":"Sport key: dota2 or valorant"},{"name":"window","in":"query","required":false,"schema":{"type":"string","description":"last_10, last_20 or last_50 maps per team","default":"last_20","title":"Window"},"description":"last_10, last_20 or last_50 maps per team"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/teams/{team}/defense-vs-role":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Team Defense Vs Role","description":"One team's defense by role, with league averages and ranks for each stat.","operationId":"get_team_defense_vs_role_v6_esports__sport__teams__team__defense_vs_role_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: dota2 or valorant","title":"Sport"},"description":"Sport key: dota2 or valorant"},{"name":"team","in":"path","required":true,"schema":{"type":"string","description":"Team handle: kr_tm_* id, slug, or name","title":"Team"},"description":"Team handle: kr_tm_* id, slug, or name"},{"name":"window","in":"query","required":false,"schema":{"type":"string","description":"last_10, last_20 or last_50 maps","default":"last_20","title":"Window"},"description":"last_10, last_20 or last_50 maps"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/teams/{team}":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Team","description":"A team's identity and record, by the same kr_tm_ id our match payloads carry.","operationId":"get_team_v6_esports__sport__teams__team__get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, …","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, …"},{"name":"team","in":"path","required":true,"schema":{"type":"string","description":"kr_tm_* id, slug or team name","examples":["kr_tm_219d26612344"],"title":"Team"},"description":"kr_tm_* id, slug or team name"},{"name":"recent","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":0,"description":"How many recent matches to include","default":5,"title":"Recent"},"description":"How many recent matches to include"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Team V6 Esports  Sport  Teams  Team  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/teams/{team}/stats":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Team Stats","description":"A team's aggregate record and its most-played opponents.","operationId":"get_team_stats_v6_esports__sport__teams__team__stats_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, …","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, …"},{"name":"team","in":"path","required":true,"schema":{"type":"string","description":"kr_tm_* id, slug or team name","examples":["kr_tm_219d26612344"],"title":"Team"},"description":"kr_tm_* id, slug or team name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Team Stats V6 Esports  Sport  Teams  Team  Stats Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/prep":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Match Prep By Teams","description":"Prep lookup by teams + date when the caller has no slug yet.","operationId":"get_match_prep_by_teams_v6_esports__sport__matches_prep_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key (cs2, r6, cod, valorant, apex)","title":"Sport"},"description":"Sport key (cs2, r6, cod, valorant, apex)"},{"name":"team1","in":"query","required":true,"schema":{"type":"string","description":"Team 1 name","title":"Team1"},"description":"Team 1 name"},{"name":"team2","in":"query","required":true,"schema":{"type":"string","description":"Team 2 name","title":"Team2"},"description":"Team 2 name"},{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"YYYY-MM-DD","title":"Date"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Match Prep By Teams V6 Esports  Sport  Matches Prep Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/player-board":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Match Player Board By Teams","description":"Player board lookup by teams + date when the caller has no slug yet.","operationId":"get_match_player_board_by_teams_v6_esports__sport__matches_player_board_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key (cs2, valorant)","title":"Sport"},"description":"Sport key (cs2, valorant)"},{"name":"team1","in":"query","required":true,"schema":{"type":"string","description":"Team 1 name","title":"Team1"},"description":"Team 1 name"},{"name":"team2","in":"query","required":true,"schema":{"type":"string","description":"Team 2 name","title":"Team2"},"description":"Team 2 name"},{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"YYYY-MM-DD","title":"Date"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Match Player Board By Teams V6 Esports  Sport  Matches Player Board Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/veto":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Match Veto By Teams","description":"Veto lookup by teams + date when the caller has no slug yet.","operationId":"get_match_veto_by_teams_v6_esports__sport__matches_veto_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key (cs2, valorant, r6)","title":"Sport"},"description":"Sport key (cs2, valorant, r6)"},{"name":"team1","in":"query","required":true,"schema":{"type":"string","description":"Team 1 name","title":"Team1"},"description":"Team 1 name"},{"name":"team2","in":"query","required":true,"schema":{"type":"string","description":"Team 2 name","title":"Team2"},"description":"Team 2 name"},{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"YYYY-MM-DD","title":"Date"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Match Veto By Teams V6 Esports  Sport  Matches Veto Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/{match_slug}/prep":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Match Prep","description":"Team stats, map pool/biases, form, key player matchups, and betting insights for a match (KashRock match id/slug).","operationId":"get_match_prep_v6_esports__sport__matches__match_slug__prep_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key (cs2, r6, cod, valorant, apex)","title":"Sport"},"description":"Sport key (cs2, r6, cod, valorant, apex)"},{"name":"match_slug","in":"path","required":true,"schema":{"type":"string","description":"KashRock match slug or kr_match_id from get_matches (not provider ids)","title":"Match Slug"},"description":"KashRock match slug or kr_match_id from get_matches (not provider ids)"},{"name":"team1","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Override team 1 for resolve","title":"Team1"},"description":"Override team 1 for resolve"},{"name":"team2","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Override team 2 for resolve","title":"Team2"},"description":"Override team 2 for resolve"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD override for resolve","title":"Date"},"description":"YYYY-MM-DD override for resolve"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Match Prep V6 Esports  Sport  Matches  Match Slug  Prep Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/{match_slug}/player-board":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Match Player Board","description":"Per-player stats + favourite weapons/agents for a CS2 or Valorant match (KashRock match id/slug).","operationId":"get_match_player_board_v6_esports__sport__matches__match_slug__player_board_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key (cs2, valorant)","title":"Sport"},"description":"Sport key (cs2, valorant)"},{"name":"match_slug","in":"path","required":true,"schema":{"type":"string","description":"KashRock match slug or kr_match_id from get_matches (not provider ids)","title":"Match Slug"},"description":"KashRock match slug or kr_match_id from get_matches (not provider ids)"},{"name":"team1","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team1"}},{"name":"team2","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team2"}},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Match Player Board V6 Esports  Sport  Matches  Match Slug  Player Board Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/{match_slug}/tournament-maps":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Tournament Maps","description":"Tournament map pick/ban + side winrates for the match's event (KR match ref).","operationId":"get_tournament_maps_v6_esports__sport__matches__match_slug__tournament_maps_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key (cs2)","title":"Sport"},"description":"Sport key (cs2)"},{"name":"match_slug","in":"path","required":true,"schema":{"type":"string","description":"KashRock match slug or kr_match_id from get_matches (not provider ids)","title":"Match Slug"},"description":"KashRock match slug or kr_match_id from get_matches (not provider ids)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Tournament Maps V6 Esports  Sport  Matches  Match Slug  Tournament Maps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/{match_slug}/veto":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Match Veto","description":"Pre-match map veto/pick-ban sequence for a match (KashRock match id/slug).","operationId":"get_match_veto_v6_esports__sport__matches__match_slug__veto_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key (cs2, valorant, r6)","title":"Sport"},"description":"Sport key (cs2, valorant, r6)"},{"name":"match_slug","in":"path","required":true,"schema":{"type":"string","description":"KashRock match slug or kr_match_id from get_matches (not provider ids)","title":"Match Slug"},"description":"KashRock match slug or kr_match_id from get_matches (not provider ids)"},{"name":"team1","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Override team 1 for resolve","title":"Team1"},"description":"Override team 1 for resolve"},{"name":"team2","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Override team 2 for resolve","title":"Team2"},"description":"Override team 2 for resolve"},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"YYYY-MM-DD override for resolve","title":"Date"},"description":"YYYY-MM-DD override for resolve"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Match Veto V6 Esports  Sport  Matches  Match Slug  Veto Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/player-props":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Esports Player Props Board","description":"DFS player props and sportsbook named-player props, joinable both ways.\n\nTeam mainlines live on /lines from own sportsbooks only.\n\nEvery row carries deeplink (URL that opens the book to bet, or null) and\ndeeplink_level (selection | player | match | board, best first).","operationId":"get_esports_player_props_board_v6_esports__sport__player_props_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, …","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, …"},{"name":"board","in":"query","required":false,"schema":{"type":"string","description":"dfs = DFS apps only; main = sportsbook named-player props; all = both","default":"all","title":"Board"},"description":"dfs = DFS apps only; main = sportsbook named-player props; all = both"},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by book key (prizepicks, thunderpick, …)","title":"Book"},"description":"Filter by book key (prizepicks, thunderpick, …)"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact canonical stat_type","title":"Market"},"description":"Exact canonical stat_type"},{"name":"market_contains","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring on stat_type","title":"Market Contains"},"description":"Substring on stat_type"},{"name":"player","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Forward: player nickname / slug contains","title":"Player"},"description":"Forward: player nickname / slug contains"},{"name":"player_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Deprecated alias for canonical_player_id. Must be kr_pl_*; numerics are rejected.","title":"Player Id"},"description":"Deprecated alias for canonical_player_id. Must be kr_pl_*; numerics are rejected."},{"name":"canonical_player_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by kr_pl_* player id","title":"Canonical Player Id"},"description":"Filter by kr_pl_* player id"},{"name":"event_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Backward / slice: event id or matchup","title":"Event Id"},"description":"Backward / slice: event id or matchup"},{"name":"include_event_lines","in":"query","required":false,"schema":{"type":"boolean","description":"Attach team mainlines for the same events (from /lines books)","default":false,"title":"Include Event Lines"},"description":"Attach team mainlines for the same events (from /lines books)"},{"name":"view","in":"query","required":false,"schema":{"type":"string","description":"groups (default) | props | both — default omits the duplicate flat array","default":"groups","title":"View"},"description":"groups (default) | props | both — default omits the duplicate flat array"},{"name":"slim","in":"query","required":false,"schema":{"type":"boolean","description":"Strip identity/resolution blobs; keep bettable fields + links","default":false,"title":"Slim"},"description":"Strip identity/resolution blobs; keep bettable fields + links"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Page size (groups or props depending on view)","title":"Limit"},"description":"Page size (groups or props depending on view)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Page offset","default":0,"title":"Offset"},"description":"Page offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Esports Player Props Board V6 Esports  Sport  Player Props Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/media":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Esports Media","description":"Resolve player faces and team logos without stitching other endpoints.\n\nProp boards already embed the same ``links`` shape on each prop. Use this\nwhen you only have a name/id and need the media URLs.","operationId":"get_esports_media_v6_esports__sport__media_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, …","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, …"},{"name":"player","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Player nickname or slug","title":"Player"},"description":"Player nickname or slug"},{"name":"player_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"kr_pl_* player id. Numerics are rejected; prefer nickname.","title":"Player Id"},"description":"kr_pl_* player id. Numerics are rejected; prefer nickname."},{"name":"team","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Team name or slug","title":"Team"},"description":"Team name or slug"},{"name":"team_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"kr_tm_* team id. Numerics are rejected; prefer team name.","title":"Team Id"},"description":"kr_tm_* team id. Numerics are rejected; prefer team name."},{"name":"opponent","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opponent team name or slug","title":"Opponent"},"description":"Opponent team name or slug"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"description":"Max matches per side","default":5,"title":"Limit"},"description":"Max matches per side"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Esports Media V6 Esports  Sport  Media Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/lines":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Esports Lines","description":"Every book's price per outcome, KashRock fair price, and EV for each price.\n\nFair (``fair`` on each market and outcome) is the median of de-vigged prices from books that\nprice both sides themselves, are fresh, and sit inside the overround band; fewer than two\nsuch books gives ``available: false`` with a ``reason``, and no EV. ``ev_pct`` = fair\nprobability × decimal price − 1. DFS pick'em multipliers are on ``dfs_team_pick`` markets.\n\nBy default only upcoming events and main markets are returned. Pass include_started=true to\nalso include started matches still on the board. Pass market= for round/kill lines, or\nmarket=all for every stored market.","operationId":"get_esports_lines_v6_esports__sport__lines_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"event_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional canonical event id or matchup key","title":"Event Id"},"description":"Optional canonical event id or matchup key"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One market key, or all for every stored market. Omit = main markets only (correct_score, dfs_team_pick, map_handicap, map_winner, match_winner, team_total_maps, total_maps). Round/kill/objective families need market=.","title":"Market"},"description":"One market key, or all for every stored market. Omit = main markets only (correct_score, dfs_team_pick, map_handicap, map_winner, match_winner, team_total_maps, total_maps). Round/kill/objective families need market=."},{"name":"pm_weight","in":"query","required":false,"schema":{"type":"number","maximum":5.0,"minimum":0.1,"description":"Deprecated, ignored: fair is the median of qualifying books, with no per-venue weights","default":1.5,"title":"Pm Weight"},"description":"Deprecated, ignored: fair is the median of qualifying books, with no per-venue weights"},{"name":"include_started","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"false = upcoming matches only (default); true = also include matches that have already started","title":"Include Started"},"description":"false = upcoming matches only (default); true = also include matches that have already started"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"description":"Max events to return; omit = full filtered board","title":"Limit"},"description":"Max events to return; omit = full filtered board"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Events to skip (pagination)","default":0,"title":"Offset"},"description":"Events to skip (pagination)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Esports Lines V6 Esports  Sport  Lines Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/matches/{match_slug}/lines/history":{"get":{"tags":["Esports History","Esports History"],"summary":"Get Match Lines History","description":"Pre-match open and close per book, plus the quote tape. `available: false` with a `reason` when nothing is stored.","operationId":"get_match_lines_history_v6_esports__sport__matches__match_slug__lines_history_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key: cs2, lol, dota2, valorant, …","title":"Sport"},"description":"Sport key: cs2, lol, dota2, valorant, …"},{"name":"match_slug","in":"path","required":true,"schema":{"type":"string","description":"KashRock match slug or kr_match_id from get_matches","title":"Match Slug"},"description":"KashRock match slug or kr_match_id from get_matches"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"One LINE_MARKETS key, or 'all' for every family. Omit for main markets only (same default as /v7 lines).","title":"Market"},"description":"One LINE_MARKETS key, or 'all' for every family. Omit for main markets only (same default as /v7 lines)."},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional book slug","title":"Book"},"description":"Optional book slug"},{"name":"include_live","in":"query","required":false,"schema":{"type":"boolean","description":"Include in-play ticks (each flagged is_live). Default is pre-match only.","default":false,"title":"Include Live"},"description":"Include in-play ticks (each flagged is_live). Default is pre-match only."},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":1},{"type":"null"}],"description":"Ticks per book tape. Omit for the full tape; pages carry tape_total and has_more.","title":"Limit"},"description":"Ticks per book tape. Omit for the full tape; pages carry tape_total and has_more."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Ticks to skip inside each book tape","default":0,"title":"Offset"},"description":"Ticks to skip inside each book tape"},{"name":"raw","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Raw"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Match Lines History V6 Esports  Sport  Matches  Match Slug  Lines History Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/gaps":{"get":{"tags":["Esports Data","Esports Data"],"summary":"Get Esports Gaps","description":"Retired: book-vs-book line spreads live at /v7/{sport}/props?view=gaps.","operationId":"get_esports_gaps_v6_esports__sport__gaps_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"min_gap","in":"query","required":false,"schema":{"type":"number","minimum":0.0,"description":"Minimum line_gap to include","default":0.5,"title":"Min Gap"},"description":"Minimum line_gap to include"},{"name":"player","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Player name or id substring","title":"Player"},"description":"Player name or id substring"},{"name":"market","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact/partial market (e.g. kills)","title":"Market"},"description":"Exact/partial market (e.g. kills)"},{"name":"market_contains","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring match on stat_type","title":"Market Contains"},"description":"Substring match on stat_type"},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Require this DFS book in the gap row","title":"Book"},"description":"Require this DFS book in the gap row"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"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 Get Esports Gaps V6 Esports  Sport  Gaps Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/history/contract":{"get":{"tags":["Esports History"],"summary":"Get Contract Timeline","operationId":"get_contract_timeline_v6_esports_history_contract_get","parameters":[{"name":"market_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market Key"}},{"name":"prop_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prop Id"}},{"name":"prop","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Alias of prop_id (same as V7 history?prop=)","title":"Prop"},"description":"Alias of prop_id (same as V7 history?prop=)"},{"name":"book","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Book"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/live/health":{"get":{"tags":["Esports Live","Esports Live"],"summary":"Live Pipeline Health","description":"Public live-pipeline health: measured source-frame -> WS publish latency per live game (p50/p95).","operationId":"live_pipeline_health_v6_esports_live_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v6/esports/{sport}/live/games":{"get":{"tags":["Esports Live","Esports Live"],"summary":"List Live Games","operationId":"list_live_games_v6_esports__sport__live_games_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. lol","title":"Sport"},"description":"Sport key, e.g. lol"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/live":{"get":{"tags":["Esports Live","Esports Live"],"summary":"List Live Games","operationId":"list_live_games_v6_esports__sport__live_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. lol","title":"Sport"},"description":"Sport key, e.g. lol"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/live/{game_id}/frames":{"get":{"tags":["Esports Live","Esports Live"],"summary":"Get Live Frame","description":"Normalized live frame. CS2 money/bomb; LoL gold/towers; Deadlock gold/CS/level; no LoL fields on CS2.\n\nSandbox: 30-60s delayed. Hobby: 5s delayed. Builder/Pro: real-time.","operationId":"get_live_frame_v6_esports__sport__live__game_id__frames_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"game_id","in":"path","required":true,"schema":{"type":"string","title":"Game Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/live/{game_id}/events":{"get":{"tags":["Esports Live","Esports Live"],"summary":"Get Live Events","description":"Sport-native play-by-play: named kills (killer/victim/weapon/round) on CS2 and on LoL matches carrying the upstream timeline, team-level kill ticks elsewhere; CS2 bomb/rounds, LoL towers/barons, Dota roshan, VAL/R6 round wins.\n\nSandbox: 30-60s delayed. Hobby: 5s delayed. Builder/Pro: real-time.","operationId":"get_live_events_v6_esports__sport__live__game_id__events_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"game_id","in":"path","required":true,"schema":{"type":"string","title":"Game Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/live/{game_id}/boxscore":{"get":{"tags":["Esports Live","Esports Live"],"summary":"Get Live Boxscore","description":"Sport-native live board (KDA plus CS2 money/bomb, LoL gold/towers, Deadlock gold/CS/level, VAL/R6 rounds).\n\nSandbox: 30-60s delayed. Hobby: 5s delayed. Builder/Pro: real-time (<2s SLA).","operationId":"get_live_boxscore_v6_esports__sport__live__game_id__boxscore_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"game_id","in":"path","required":true,"schema":{"type":"string","title":"Game Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/live/odds":{"get":{"tags":["Esports Live","Esports Live"],"summary":"Get Live Odds Games","description":"List matches with real-time shifting betting odds (in-play live or pre-match).","operationId":"get_live_odds_games_v6_esports__sport__live_odds_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. cs2, lol, dota2, valorant","title":"Sport"},"description":"Sport key, e.g. cs2, lol, dota2, valorant"},{"name":"status","in":"query","required":false,"schema":{"type":"string","description":"Filter by match status: all | live | prematch","default":"all","title":"Status"},"description":"Filter by match status: all | live | prematch"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/live/{game_id}/odds":{"get":{"tags":["Esports Live","Esports Live"],"summary":"Get Live Odds","description":"Get real-time shifting in-play or pre-match odds, active markets, and line movements.","operationId":"get_live_odds_v6_esports__sport__live__game_id__odds_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"game_id","in":"path","required":true,"schema":{"type":"string","description":"KashRock match slug or kr_match_id","title":"Game Id"},"description":"KashRock match slug or kr_match_id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/live/{game_id}/odds/history":{"get":{"tags":["Esports Live","Esports Live"],"summary":"Get Live Odds History","description":"Get the audit log of line and odds shifts recorded for this live game.","operationId":"get_live_odds_history_v6_esports__sport__live__game_id__odds_history_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"game_id","in":"path","required":true,"schema":{"type":"string","description":"KashRock match slug or kr_match_id","title":"Game Id"},"description":"KashRock match slug or kr_match_id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/{sport}/live/{game_id}/state-at":{"get":{"tags":["Esports Live","Esports Live"],"summary":"Get Live State At","description":"Reconstructed status/score/map_number as of `at`, from the durable\ntransition log. Only covers matches published since the log started\nrecording -- it cannot answer for matches finished before this shipped.","operationId":"get_live_state_at_v6_esports__sport__live__game_id__state_at_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"game_id","in":"path","required":true,"schema":{"type":"string","title":"Game Id"}},{"name":"at","in":"query","required":true,"schema":{"type":"string","description":"ISO-8601 timestamp to reconstruct state at","title":"At"},"description":"ISO-8601 timestamp to reconstruct state at"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Live State At V6 Esports  Sport  Live  Game Id  State At Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/cs2/live/coverage":{"get":{"tags":["Esports Live","Esports Live"],"summary":"Get Cs2 Live Coverage","description":"Share of listed CS2 matches that had live in-game stats, by tournament and tier.\n\nA match counts as having live stats once it had a live scoreboard at any\npoint (the same test as has_live_stats on the live games list). Coverage\nonly covers matches logged since tracking_since.","operationId":"get_cs2_live_coverage_v6_esports_cs2_live_coverage_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":14,"minimum":1,"description":"Days back, up to 14","default":14,"title":"Days"},"description":"Days back, up to 14"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Cs2 Live Coverage V6 Esports Cs2 Live Coverage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/demo/trust-stats":{"get":{"tags":["Demo","Demo"],"summary":"Trust Stats","operationId":"trust_stats_v6_demo_trust_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Trust Stats V6 Demo Trust Stats Get"}}}}}}},"/v6/demo/coverage-stats":{"get":{"tags":["Demo","Demo"],"summary":"Coverage Stats","operationId":"coverage_stats_v6_demo_coverage_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Coverage Stats V6 Demo Coverage Stats Get"}}}}}}},"/v6/demo/{sport}-prop":{"get":{"tags":["Demo","Demo"],"summary":"Demo Sport Prop","description":"Unauthenticated landing try-me: one live DFS prop for any covered sport.","operationId":"demo_sport_prop_v6_demo__sport__prop_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Demo Sport Prop V6 Demo  Sport  Prop Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/demo/{sport}-results":{"get":{"tags":["Demo","Demo"],"summary":"Demo Sport Results","description":"Unauthenticated landing try-me: one live settled grade (hit/miss/push/void).","operationId":"demo_sport_results_v6_demo__sport__results_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Demo Sport Results V6 Demo  Sport  Results Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/demo/{sport}-live-boxscore":{"get":{"tags":["Demo","Demo"],"summary":"Demo Sport Live Boxscore","description":"Unauthenticated landing try-me: live K/D/A board from Redis (no mocks).","operationId":"demo_sport_live_boxscore_v6_demo__sport__live_boxscore_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","title":"Sport"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Demo Sport Live Boxscore V6 Demo  Sport  Live Boxscore Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/public/changelog":{"get":{"tags":["Changelog","Changelog"],"summary":"Public Changelog","operationId":"public_changelog_v6_public_changelog_get","parameters":[{"name":"limit_weeks","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":52,"title":"Limit Weeks"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Public Changelog V6 Public Changelog Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/public/changelog/unsubscribe":{"get":{"tags":["Changelog","Changelog"],"summary":"Changelog Unsubscribe Page","description":"Renders a confirm button. Records nothing -- see the module docstring.","operationId":"changelog_unsubscribe_page_v6_public_changelog_unsubscribe_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Changelog","Changelog"],"summary":"Changelog Unsubscribe","description":"The only thing that records the opt-out.\n\nAccepts the token from the form body (confirm button) or the query string\n(RFC 8058 one-click, where the provider posts to the List-Unsubscribe URL\nas it appears in the header).","operationId":"changelog_unsubscribe_v6_public_changelog_unsubscribe_post","parameters":[{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_changelog_unsubscribe_v6_public_changelog_unsubscribe_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/public/lifecycle/unsubscribe":{"get":{"tags":["Changelog","Changelog"],"summary":"Lifecycle Unsubscribe Page","description":"Renders a confirm button. Records nothing -- see the module docstring.","operationId":"lifecycle_unsubscribe_page_v6_public_lifecycle_unsubscribe_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Changelog","Changelog"],"summary":"Lifecycle Unsubscribe","description":"The only thing that records the opt-out. Also serves RFC 8058 one-click.","operationId":"lifecycle_unsubscribe_v6_public_lifecycle_unsubscribe_post","parameters":[{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_lifecycle_unsubscribe_v6_public_lifecycle_unsubscribe_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/public/recovery/unsubscribe":{"get":{"tags":["Changelog","Changelog"],"summary":"Recovery Unsubscribe Page","description":"Renders a confirm button. Records nothing -- see the module docstring.","operationId":"recovery_unsubscribe_page_v6_public_recovery_unsubscribe_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Changelog","Changelog"],"summary":"Recovery Unsubscribe","description":"The only thing that records the opt-out. Also serves RFC 8058 one-click.","operationId":"recovery_unsubscribe_v6_public_recovery_unsubscribe_post","parameters":[{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_recovery_unsubscribe_v6_public_recovery_unsubscribe_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/public/books":{"get":{"tags":["Changelog","Changelog"],"summary":"Public Books","operationId":"public_books_v6_public_books_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Public Books V6 Public Books Get"}}}}}}},"/v6/public/status":{"get":{"tags":["Status"],"summary":"Public Status","operationId":"public_status_v6_public_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v6/public/lifecycle/email-preferences":{"get":{"tags":["Email preferences","Email preferences"],"summary":"Preferences Page","description":"Renders a confirm button. Records nothing.","operationId":"preferences_page_v6_public_lifecycle_email_preferences_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"answer","in":"query","required":false,"schema":{"type":"string","default":"yes","title":"Answer"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Email preferences","Email preferences"],"summary":"Record Preference","description":"The only thing that records consent.\n\nA decline is stored as explicitly as an opt-in: false with a timestamp and\na source means \"asked and said no\", which is different from \"never asked\"\nand stops the question being asked twice.","operationId":"record_preference_v6_public_lifecycle_email_preferences_post","parameters":[{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},{"name":"answer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_record_preference_v6_public_lifecycle_email_preferences_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/public/lifecycle/cancel-reason":{"get":{"tags":["Email preferences","Email preferences"],"summary":"Cancel Reason Page","description":"Renders a confirm button, with an optional note field. Records nothing.","operationId":"cancel_reason_page_v6_public_lifecycle_cancel_reason_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"reason","in":"query","required":true,"schema":{"type":"string","title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Email preferences","Email preferences"],"summary":"Record Cancel Reason","description":"The only thing that records the reason.","operationId":"record_cancel_reason_v6_public_lifecycle_cancel_reason_post","parameters":[{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_record_cancel_reason_v6_public_lifecycle_cancel_reason_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/me":{"get":{"tags":["Account","Account"],"summary":"Get Me","operationId":"get_me_v6_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Me V6 Me Get"}}}}}}},"/v6/usage":{"get":{"tags":["Account","Account"],"summary":"Get Usage","description":"Quota and credit-pack state for the calling key: what the gate is\nactually enforcing, plus pack balance and the nearest lot expiry.","operationId":"get_usage_v6_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Usage V6 Usage Get"}}}}}}},"/v6/esports/research/board":{"get":{"tags":["Esports Research"],"summary":"Research Board Json","operationId":"research_board_json_v6_esports_research_board_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"type":"string","default":"cs2","title":"Sport"}},{"name":"recent","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Series to return per player. 0 = full career tape.","default":10,"title":"Recent"},"description":"Series to return per player. 0 = full career tape."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/research/board-tapes":{"get":{"tags":["Esports Research"],"summary":"Research Board Tapes Json","description":"Quote tapes for every live-board prop. Movement paint — no grades/maps.","operationId":"research_board_tapes_json_v6_esports_research_board_tapes_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"type":"string","default":"cs2","title":"Sport"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/esports/research/player":{"get":{"tags":["Esports Research"],"summary":"Research Player Json","operationId":"research_player_json_v6_esports_research_player_get","parameters":[{"name":"player","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"kr_pl_* id, catalog slug, or nickname","title":"Player"},"description":"kr_pl_* id, catalog slug, or nickname"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"description":"Alias for player","title":"Q"},"description":"Alias for player"},{"name":"sport","in":"query","required":false,"schema":{"type":"string","default":"cs2","title":"Sport"}},{"name":"market","in":"query","required":false,"schema":{"type":"string","default":"kills_maps_1_2","title":"Market"}},{"name":"recent","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"0 = full career tape. Positive = newest N series.","default":0,"title":"Recent"},"description":"0 = full career tape. Positive = newest N series."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/research/player":{"get":{"tags":["Research"],"summary":"Research Player Page","operationId":"research_player_page_research_player_get","parameters":[{"name":"player","in":"query","required":false,"schema":{"type":"string","default":"","title":"Player"}},{"name":"sport","in":"query","required":false,"schema":{"type":"string","default":"cs2","title":"Sport"}},{"name":"market","in":"query","required":false,"schema":{"type":"string","default":"kills_maps_1_2","title":"Market"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/loops/webhook":{"post":{"tags":["Loops Webhooks"],"summary":"Loops Webhook","operationId":"loops_webhook_v1_loops_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/stripe/webhook":{"post":{"tags":["Billing","Stripe Webhooks"],"summary":"Stripe Webhook","description":"Handle Stripe webhook events.\n\nRequires a valid signature, claims each event exactly once, and leaves\nfailed events retryable so Stripe redelivery can complete them.","operationId":"stripe_webhook_v1_stripe_webhook_post","parameters":[{"name":"stripe-signature","in":"header","required":false,"schema":{"type":"string","title":"Stripe-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/discord/checkout":{"post":{"tags":["Discord Billing"],"summary":"Create Discord Checkout","description":"Stripe Checkout link for one Discord server. Called by the bot with its own API key.","operationId":"create_discord_checkout_v6_discord_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscordCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Create Discord Checkout V6 Discord Checkout Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stripe/webhook/discord":{"post":{"tags":["Discord Billing"],"summary":"Discord Stripe Webhook","operationId":"discord_stripe_webhook_v1_stripe_webhook_discord_post","parameters":[{"name":"stripe-signature","in":"header","required":false,"schema":{"type":"string","title":"Stripe-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/journal/refresh":{"post":{"tags":["Journal","Journal"],"summary":"Journal Refresh","description":"Rewrite the journal scorecard from live billing. Shared secret required.","operationId":"journal_refresh_v1_journal_refresh_post","parameters":[{"name":"X-Journal-Secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Journal-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/ops":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Ops Dashboard","operationId":"ops_dashboard_v6_admin_ops_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":8760,"minimum":1,"default":24,"title":"Hours"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ops Dashboard V6 Admin Ops Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/ops/health":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Ops Health","description":"Machine health in one read: the freshness check's payload, per-book\nfailing state the ticker publishes, the match-result check's last run,\nthe cache warmer's last tick, and the Picklebet App Check expiry.\nTimestamps, counts, and flags only — never token or key material.","operationId":"ops_health_v6_admin_ops_health_get","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ops Health V6 Admin Ops Health Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/usage/intelligence":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Usage Intelligence","operationId":"usage_intelligence_v6_admin_usage_intelligence_get","parameters":[{"name":"sport","in":"query","required":false,"schema":{"type":"string","default":"cs2","title":"Sport"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Usage Intelligence V6 Admin Usage Intelligence Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/usage/backfill":{"post":{"tags":["Admin (Internal)","Admin"],"summary":"Usage Backfill","operationId":"usage_backfill_v6_admin_usage_backfill_post","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":90,"title":"Days"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Usage Backfill V6 Admin Usage Backfill Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/traffic":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Traffic Dashboard","operationId":"traffic_dashboard_v6_admin_traffic_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":8760,"minimum":1,"default":168,"title":"Hours"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Traffic Dashboard V6 Admin Traffic Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/funnel":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Funnel","operationId":"funnel_v6_admin_funnel_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":8760,"minimum":1,"default":720,"title":"Hours"}},{"name":"fresh","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Fresh"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Funnel V6 Admin Funnel Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/eval":{"post":{"tags":["Admin (Internal)","Admin"],"summary":"Create Eval","operationId":"create_eval_v6_admin_eval_post","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Eval V6 Admin Eval Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/eval/revoke":{"post":{"tags":["Admin (Internal)","Admin"],"summary":"Revoke Eval","operationId":"revoke_eval_v6_admin_eval_revoke_post","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revoke Eval V6 Admin Eval Revoke Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/users/{user_id}/ban":{"post":{"tags":["Admin (Internal)","Admin"],"summary":"Ban User","description":"Ban a user: status -> banned, every key revoked, fingerprint blocks signups.","operationId":"ban_user_v6_admin_users__user_id__ban_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ban User V6 Admin Users  User Id  Ban Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/users/{user_id}/linked":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Linked Accounts","description":"Accounts sharing this user's normalized email, signup IP, or request IPs.","operationId":"linked_accounts_v6_admin_users__user_id__linked_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Linked Accounts V6 Admin Users  User Id  Linked Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/abuse":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Abuse Overview","description":"Review queue: flagged/banned/blocked accounts, events, live throttles.","operationId":"abuse_overview_v6_admin_abuse_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Abuse Overview V6 Admin Abuse Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/abuse/shared-ips":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Shared Ips","description":"Free-plan accounts sharing a signup IP or subnet, plus list freshness.\n\nReport only — the sandbox v2 gate acts at signup; this view is the audit\ntrail for collisions that already exist.","operationId":"shared_ips_v6_admin_abuse_shared_ips_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":90,"title":"Days"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Shared Ips V6 Admin Abuse Shared Ips Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/abuse/simulate-signup":{"post":{"tags":["Admin (Internal)","Admin"],"summary":"Simulate Signup","description":"Dry-run the signup gate: full decision, no user or abuse event written.\n\nThe live-proof hook for the sandbox v2 rollout — reports what\ngate_new_user would do with this email+IP. The per-IP signup throttle\nstill counts (it is part of the gate), so repeated simulations from one\nIP will eventually show throttled, same as a real signup would.","operationId":"simulate_signup_v6_admin_abuse_simulate_signup_post","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimulateSignupRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Simulate Signup V6 Admin Abuse Simulate Signup Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/keys/{api_key_id}":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Key Details","description":"One key: its owner, plan, and live RPM — the ops_key tool's backing route.","operationId":"key_details_v6_admin_keys__api_key_id__get","parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Key Details V6 Admin Keys  Api Key Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/billing/refund":{"post":{"tags":["Admin (Internal)","Admin"],"summary":"Refund Charge","operationId":"refund_charge_v6_admin_billing_refund_post","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefundRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Refund Charge V6 Admin Billing Refund Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/audit/sandbox/segments":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Audit Sandbox Segments","operationId":"audit_sandbox_segments_v6_admin_audit_sandbox_segments_get","parameters":[{"name":"as_of","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of"}},{"name":"recent_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Recent From"}},{"name":"coverage_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Coverage From"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Audit Sandbox Segments V6 Admin Audit Sandbox Segments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/audit/sandbox/checkout":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Audit Sandbox Checkout","operationId":"audit_sandbox_checkout_v6_admin_audit_sandbox_checkout_get","parameters":[{"name":"as_of","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"As Of"}},{"name":"observation_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Observation From"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Audit Sandbox Checkout V6 Admin Audit Sandbox Checkout Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/auth/status":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Auth Status","description":"Public check: is ADMIN_SECRET configured on this server?","operationId":"auth_status_v6_admin_auth_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Response Auth Status V6 Admin Auth Status Get"}}}}}}},"/v6/admin/plans":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"List Plans","operationId":"list_plans_v6_admin_plans_get","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Plans V6 Admin Plans Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/top/endpoints":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Get Top Endpoints","operationId":"get_top_endpoints_v6_admin_top_endpoints_get","parameters":[{"name":"day","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date YYYY-MM-DD (default: today UTC)","title":"Day"},"description":"Date YYYY-MM-DD (default: today UTC)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":20,"title":"Limit"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EndpointStats"},"title":"Response Get Top Endpoints V6 Admin Top Endpoints Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/top/keys":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Get Top Keys","operationId":"get_top_keys_v6_admin_top_keys_get","parameters":[{"name":"day","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date YYYY-MM-DD (default: today UTC)","title":"Day"},"description":"Date YYYY-MM-DD (default: today UTC)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KeyStats"},"title":"Response Get Top Keys V6 Admin Top Keys Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/key/{api_key_id}/endpoints":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Get Key Endpoints","operationId":"get_key_endpoints_v6_admin_key__api_key_id__endpoints_get","parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}},{"name":"day","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Date YYYY-MM-DD (default: today UTC)","title":"Day"},"description":"Date YYYY-MM-DD (default: today UTC)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EndpointStats"},"title":"Response Get Key Endpoints V6 Admin Key  Api Key Id  Endpoints Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/logs/recent":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Get Recent Logs","operationId":"get_recent_logs_v6_admin_logs_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"errors_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Errors Only"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Get Recent Logs V6 Admin Logs Recent Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/users":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Search Users","operationId":"search_users_v6_admin_users_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search by email or name","title":"Search"},"description":"Search by email or name"},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"default":24,"title":"Hours"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserInfo"},"title":"Response Search Users V6 Admin Users Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/user/{user_id}":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Get User Details","operationId":"get_user_details_v6_admin_user__user_id__get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get User Details V6 Admin User  User Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/users/{user_id}/rpm":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Get User Rpm","operationId":"get_user_rpm_v6_admin_users__user_id__rpm_get","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get User Rpm V6 Admin Users  User Id  Rpm Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/rate-limit/test":{"post":{"tags":["Admin (Internal)","Admin"],"summary":"Run Rate Limit Test","operationId":"run_rate_limit_test_v6_admin_rate_limit_test_post","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitTestRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitTestResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/keys/{api_key_id}/revoke":{"post":{"tags":["Admin (Internal)","Admin"],"summary":"Revoke Key","operationId":"revoke_key_v6_admin_keys__api_key_id__revoke_post","parameters":[{"name":"api_key_id","in":"path","required":true,"schema":{"type":"string","title":"Api Key Id"}},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Revoke Key V6 Admin Keys  Api Key Id  Revoke Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/users/{user_id}/plan":{"post":{"tags":["Admin (Internal)","Admin"],"summary":"Update User Plan","operationId":"update_user_plan_v6_admin_users__user_id__plan_post","parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"plan","in":"query","required":true,"schema":{"type":"string","description":"New plan: sandbox, hobby, builder, pro","title":"Plan"},"description":"New plan: sandbox, hobby, builder, pro"},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Update User Plan V6 Admin Users  User Id  Plan Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/stats/overview":{"get":{"tags":["Admin (Internal)","Admin"],"summary":"Get Stats Overview","operationId":"get_stats_overview_v6_admin_stats_overview_get","parameters":[{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Stats Overview V6 Admin Stats Overview Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/admin/metrics/overview":{"get":{"tags":["Metrics (Internal)","Metrics (Internal)"],"summary":"Metrics Overview","description":"Single admin view of speed, data coverage, costs/usage, and book auth health.","operationId":"metrics_overview_v6_admin_metrics_overview_get","parameters":[{"name":"hours_back","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Window for API speed stats","default":24,"title":"Hours Back"},"description":"Window for API speed stats"},{"name":"x-admin-secret","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Admin-Secret"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Metrics Overview V6 Admin Metrics Overview Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/production/health":{"get":{"tags":["Maintenance","Production"],"summary":"Production Health Check","description":"Production health check with detailed monitoring.","operationId":"production_health_check_v6_production_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v6/production/monitoring/metrics":{"get":{"tags":["Maintenance","Production"],"summary":"Get Monitoring Metrics","description":"Get detailed monitoring metrics.","operationId":"get_monitoring_metrics_v6_production_monitoring_metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"hours_back","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"default":1,"title":"Hours Back"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/production/monitoring/caches":{"get":{"tags":["Maintenance","Production"],"summary":"Get Cache Status","description":"Get detailed cache status for monitoring.","operationId":"get_cache_status_v6_production_monitoring_caches_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v6/production/monitoring/circuit-breakers":{"get":{"tags":["Maintenance","Production"],"summary":"Get Circuit Breaker Status","description":"Get circuit breaker status.","operationId":"get_circuit_breaker_status_v6_production_monitoring_circuit_breakers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v6/production/admin/caches/clear":{"post":{"tags":["Maintenance","Production"],"summary":"Clear Caches","description":"Clear caches (admin endpoint).","operationId":"clear_caches_v6_production_admin_caches_clear_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"cache_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(odds|props|all)$"},{"type":"null"}],"title":"Cache Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/production/admin/circuit-breakers/reset":{"post":{"tags":["Maintenance","Production"],"summary":"Reset Circuit Breakers","description":"Reset circuit breakers (admin endpoint).","operationId":"reset_circuit_breakers_v6_production_admin_circuit_breakers_reset_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"book_key","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Book Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/production/history/odds/{book_key}":{"get":{"tags":["Maintenance","Production"],"summary":"Get Odds History","description":"Get historical odds data.","operationId":"get_odds_history_v6_production_history_odds__book_key__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"book_key","in":"path","required":true,"schema":{"type":"string","title":"Book Key"}},{"name":"sport","in":"query","required":true,"schema":{"type":"string","title":"Sport"}},{"name":"hours_back","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":24,"title":"Hours Back"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/production/history/props/{book_key}/{player_id}":{"get":{"tags":["Maintenance","Production"],"summary":"Get Props History","description":"Get historical props data for a player.","operationId":"get_props_history_v6_production_history_props__book_key___player_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"book_key","in":"path","required":true,"schema":{"type":"string","title":"Book Key"}},{"name":"player_id","in":"path","required":true,"schema":{"type":"string","title":"Player Id"}},{"name":"hours_back","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":24,"title":"Hours Back"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/production/admin/persistence/cleanup":{"post":{"tags":["Maintenance","Production"],"summary":"Cleanup Old Data","description":"Clean up old historical data (admin endpoint).","operationId":"cleanup_old_data_v6_production_admin_persistence_cleanup_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days_to_keep","in":"query","required":false,"schema":{"type":"integer","maximum":90,"minimum":7,"default":30,"title":"Days To Keep"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/api-keys":{"get":{"tags":["Developer Dashboard"],"summary":"List Api Keys","description":"List all API keys for the authenticated user.\n\nNote: Plaintext keys are never returned - only the prefix for identification.","operationId":"list_api_keys_v1_dev_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListKeysResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Developer Dashboard"],"summary":"Create Api Key","description":"Create a new API key for the authenticated user.\n\nThe plaintext API key is returned ONLY in this response.\nStore it securely - it cannot be retrieved again.\nPer-plan key cap: 1 for Sandbox/Hobby, 3 Builder, 5 Pro/Custom, 10 Quant.","operationId":"create_api_key_v1_dev_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/api-keys/{key_id}/revoke":{"post":{"tags":["Developer Dashboard"],"summary":"Revoke Api Key","description":"Revoke an API key. The key will immediately stop working.\n\nThis action cannot be undone - you'll need to create a new key.","operationId":"revoke_api_key_v1_dev_api_keys__key_id__revoke_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/api-keys/{key_id}/regenerate":{"post":{"tags":["Developer Dashboard"],"summary":"Regenerate Api Key","description":"Rotate an active key: revoke it and mint a replacement in one transaction.\n\nThe new plaintext is returned ONLY in this response. Regeneration skips\nthe plan cap — the slot is being replaced, not added to.","operationId":"regenerate_api_key_v1_dev_api_keys__key_id__regenerate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/usage/summary":{"get":{"tags":["Developer Dashboard"],"summary":"Get Usage Summary","description":"Get usage statistics for the authenticated user.\n\nReturns:\n- Total requests in the time range\n- Error count and rate\n- Top endpoints by request count\n- Requests per day breakdown","operationId":"get_usage_summary_v1_dev_usage_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"range","in":"query","required":false,"schema":{"type":"string","description":"Time range: 24h, 7d, or 30d","default":"7d","title":"Range"},"description":"Time range: 24h, 7d, or 30d"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageSummary"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/profile":{"get":{"tags":["Developer Dashboard"],"summary":"Get Profile","description":"Get the authenticated user's profile.","operationId":"get_profile_v1_dev_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/logs":{"get":{"tags":["Developer Dashboard"],"summary":"Get Request Logs","description":"Get request logs for the authenticated user.\n\nFilters:\n- status=success: Only 2xx-3xx responses\n- status=error: Only 4xx-5xx responses\n- limit: Cap how many recent rows are returned (newest first)","operationId":"get_request_logs_v1_dev_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: 'success' (200-399) or 'error' (>=400)","title":"Status"},"description":"Filter by status: 'success' (200-399) or 'error' (>=400)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Max recent logs to return","default":50,"title":"Limit"},"description":"Max recent logs to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/waitlist":{"post":{"tags":["Developer Dashboard"],"summary":"Join Waitlist","description":"Store an email for maintenance or launch notifications.","operationId":"join_waitlist_v1_dev_waitlist_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaitlistSignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WaitlistSignupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/contact":{"post":{"tags":["Developer Dashboard"],"summary":"Submit Contact","description":"Persist a contact form submission so no lead is lost when email delivery fails.","operationId":"submit_contact_v1_dev_contact_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactSubmissionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactSubmissionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/health":{"get":{"tags":["Developer Dashboard"],"summary":"Dev Health","description":"Health check for the developer API.\nDoes not require authentication.","operationId":"dev_health_v1_dev_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/dev/usage":{"get":{"tags":["Developer Dashboard"],"summary":"Get Usage","description":"Get usage and plan information for the logged-in user.\n\nReturns usage statistics, current plan, and rate limits.","operationId":"get_usage_v1_dev_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/auth/session":{"post":{"tags":["Developer Dashboard"],"summary":"Create Auth Session","description":"Exchange a Google ID token for a long-lived KashRock session.","operationId":"create_auth_session_v1_dev_auth_session_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/auth/magic":{"post":{"tags":["Developer Dashboard"],"summary":"Create Magic Session","description":"Exchange a single-use magic sign-in token for a normal session pair.","operationId":"create_magic_session_v1_dev_auth_magic_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MagicSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/auth/refresh":{"post":{"tags":["Developer Dashboard"],"summary":"Refresh Auth Session","description":"Refresh an expired KashRock access token (rotates the refresh token).","operationId":"refresh_auth_session_v1_dev_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshSessionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/auth/logout":{"post":{"tags":["Developer Dashboard"],"summary":"Logout Session","description":"Revoke a refresh token so the session can no longer be renewed.","operationId":"logout_session_v1_dev_auth_logout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/billing/create-checkout-session":{"post":{"tags":["Developer Dashboard"],"summary":"Create Checkout Session","description":"Start a plan: Checkout only for customers with no live paid subscription.\n\nA subscriber swaps plans in place (prorated, invoiced now); asking for the\nplan they already have changes nothing. Logged-out visitors buy as guests —\nStripe collects the email and the webhook resolves the account.","operationId":"create_checkout_session_v1_dev_billing_create_checkout_session_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/billing/credit-checkout":{"post":{"tags":["Developer Dashboard"],"summary":"Create Credit Pack Checkout","description":"Buy a one-time credit pack on top of any plan. Stripe Checkout in\npayment mode; the webhook grants the lot with 12-month expiry.","operationId":"create_credit_pack_checkout_v1_dev_billing_credit_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/billing/catalog":{"get":{"tags":["Developer Dashboard"],"summary":"Get Billing Catalog","description":"The sellable custom menu — titles, data types, the flat $39 price.\n\nPublic: it is the same list the plan page shows before sign-in.","operationId":"get_billing_catalog_v1_dev_billing_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Billing Catalog V1 Dev Billing Catalog Get"}}}}}}},"/v1/dev/billing/custom-checkout":{"post":{"tags":["Developer Dashboard"],"summary":"Create Custom Checkout","description":"Start or modify a scoped custom plan.\n\nOne title plus one data type at $39/mo. No live paid subscription ->\nStripe Checkout; an existing subscription is re-priced in place\n(prorated, invoiced now). Selections a standard plan already covers are\nrefused with `covered_by_plan` and the covering plan named. Logged-out\nvisitors buy as guests.","operationId":"create_custom_checkout_v1_dev_billing_custom_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomCheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/billing/session-status":{"get":{"tags":["Developer Dashboard"],"summary":"Get Checkout Session Status","description":"Checkout status with webhook-late reconciliation and one-time key delivery.\n\nGuests pass only the session id — it is the credential Stripe hands back.\nA guest-bound session additionally returns a one-click magic sign-in link.","operationId":"get_checkout_session_status_v1_dev_billing_session_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"query","required":true,"schema":{"type":"string","description":"Stripe checkout session ID","title":"Session Id"},"description":"Stripe checkout session ID"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/billing":{"get":{"tags":["Developer Dashboard"],"summary":"Get Billing","description":"Current plan, quota, and usage for the authenticated user.","operationId":"get_billing_v1_dev_billing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/marketing-consent":{"get":{"tags":["Developer Dashboard"],"summary":"Get Marketing Consent","description":"Current product-email setting so the console toggle renders truthfully.","operationId":"get_marketing_consent_v1_dev_marketing_consent_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Marketing Consent V1 Dev Marketing Consent Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Developer Dashboard"],"summary":"Set Marketing Consent","description":"The console's product-email toggle. Records the same durable answer the\nemail link writes — off counts as an answer too, so a user who flips it off\nis never re-asked by the preference trigger.","operationId":"set_marketing_consent_v1_dev_marketing_consent_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarketingConsentRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Set Marketing Consent V1 Dev Marketing Consent Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/billing/cancel":{"post":{"tags":["Developer Dashboard"],"summary":"Cancel Billing Subscription","description":"The customer's own cancel: stop renewal at period end on the named subscription.\n\nRequires body.confirm=true from the UI confirmation step. Logs who called.","operationId":"cancel_billing_subscription_v1_dev_billing_cancel_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/trial/status":{"get":{"tags":["Builder Trial"],"summary":"Trial Status","operationId":"trial_status_v1_dev_trial_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/trial/setup":{"post":{"tags":["Builder Trial"],"summary":"Trial Setup","operationId":"trial_setup_v1_dev_trial_setup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/trial/activate":{"post":{"tags":["Builder Trial"],"summary":"Trial Activate","operationId":"trial_activate_v1_dev_trial_activate_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"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"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/trial/cancel":{"post":{"tags":["Builder Trial"],"summary":"Trial Cancel","operationId":"trial_cancel_v1_dev_trial_cancel_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/trial/upgrade":{"post":{"tags":["Builder Trial"],"summary":"Trial Upgrade","operationId":"trial_upgrade_v1_dev_trial_upgrade_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/attribution/status":{"get":{"tags":["Developer Dashboard"],"summary":"Attribution Status","operationId":"attribution_status_v1_dev_attribution_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttributionStatusResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/attribution/response":{"post":{"tags":["Developer Dashboard"],"summary":"Attribution Response","operationId":"attribution_response_v1_dev_attribution_response_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttributionResponseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Attribution Response V1 Dev Attribution Response Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/trade/status":{"get":{"tags":["Auto-Trade"],"summary":"Trade Status","description":"What this user's plan gets on /v7/trade — drives the console setup screen.","operationId":"trade_status_v1_dev_trade_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/trade/settings":{"get":{"tags":["Auto-Trade"],"summary":"Get Trade Settings","operationId":"get_trade_settings_v1_dev_trade_settings_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"query","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Auto-Trade"],"summary":"Put Trade Settings","operationId":"put_trade_settings_v1_dev_trade_settings_put","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SettingsBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/trade/ledger":{"get":{"tags":["Auto-Trade"],"summary":"Get Trade Ledger","operationId":"get_trade_ledger_v1_dev_trade_ledger_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/mcp/device/start":{"post":{"tags":["MCP"],"summary":"Mcp Device Start","description":"Begin Cursor-style login. MCP opens verify_url in the system browser.","operationId":"mcp_device_start_v1_dev_mcp_device_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceStartResponse"}}}}}}},"/v1/dev/mcp/device/complete":{"post":{"tags":["MCP"],"summary":"Mcp Device Complete","description":"Called by the site after Google login. Mints a live key for the poller.","operationId":"mcp_device_complete_v1_dev_mcp_device_complete_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceCodeBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceCompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/mcp/device/poll":{"post":{"tags":["MCP"],"summary":"Mcp Device Poll","description":"MCP waits here until Google login finishes. Key is returned once.","operationId":"mcp_device_poll_v1_dev_mcp_device_poll_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeviceCodeBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DevicePollResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dev/vantage/status":{"get":{"tags":["Vantage"],"summary":"Vantage Status","operationId":"vantage_status_v1_dev_vantage_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Vantage Status V1 Dev Vantage Status Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/vantage/chat":{"post":{"tags":["Vantage"],"summary":"Vantage Chat","operationId":"vantage_chat_v1_dev_vantage_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Vantage Chat V1 Dev Vantage Chat Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/vantage/chat/stream":{"post":{"tags":["Vantage"],"summary":"Vantage Chat Stream","description":"Server-sent events: delta text, tool events, one final result.\n\nSame auth, budget, and caller path as /chat — only the transport differs.","operationId":"vantage_chat_stream_v1_dev_vantage_chat_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/vantage/profile":{"get":{"tags":["Vantage"],"summary":"Vantage Profile","operationId":"vantage_profile_v1_dev_vantage_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Vantage Profile V1 Dev Vantage Profile Get"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["Vantage"],"summary":"Vantage Profile Save","operationId":"vantage_profile_save_v1_dev_vantage_profile_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Vantage Profile Save V1 Dev Vantage Profile Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/vantage/threads":{"get":{"tags":["Vantage"],"summary":"Vantage Threads","operationId":"vantage_threads_v1_dev_vantage_threads_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Vantage Threads V1 Dev Vantage Threads Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Vantage"],"summary":"Vantage Thread Create","operationId":"vantage_thread_create_v1_dev_vantage_threads_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Vantage Thread Create V1 Dev Vantage Threads Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/dev/vantage/threads/{thread_id}":{"get":{"tags":["Vantage"],"summary":"Vantage Thread Get","operationId":"vantage_thread_get_v1_dev_vantage_threads__thread_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vantage Thread Get V1 Dev Vantage Threads  Thread Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Vantage"],"summary":"Vantage Thread Rename","operationId":"vantage_thread_rename_v1_dev_vantage_threads__thread_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vantage Thread Rename V1 Dev Vantage Threads  Thread Id  Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Vantage"],"summary":"Vantage Thread Delete","operationId":"vantage_thread_delete_v1_dev_vantage_threads__thread_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"thread_id","in":"path","required":true,"schema":{"type":"string","title":"Thread Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Vantage Thread Delete V1 Dev Vantage Threads  Thread Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v6/books":{"get":{"tags":["Esports Data"],"summary":"Get Canonical Books","description":"Get list of all canonical sportsbooks.","operationId":"get_canonical_books_v6_books_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search books","title":"Search"},"description":"Search books"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Canonical Books V6 Books Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"APIKeyInfo":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"key_prefix":{"type":"string","title":"Key Prefix"},"status":{"type":"string","title":"Status","default":"active"},"is_active":{"type":"boolean","title":"Is Active","description":"True when the key counts against the plan cap: not revoked and not expired.","default":true},"tier":{"type":"string","title":"Tier","default":"sandbox"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","name","key_prefix","last_used_at"],"title":"APIKeyInfo","description":"API key information (without plaintext key)."},"AttributionResponseRequest":{"properties":{"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","title":"AttributionResponseRequest"},"AttributionStatusResponse":{"properties":{"eligible":{"type":"boolean","title":"Eligible"},"required":{"type":"boolean","title":"Required","default":false}},"type":"object","required":["eligible"],"title":"AttributionStatusResponse"},"AuthSessionRequest":{"properties":{"id_token":{"type":"string","title":"Id Token","description":"Google ID token from OAuth callback"},"kr_vid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kr Vid","description":"First-party visitor UUID"},"marketing_consent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Marketing Consent","description":"Signup checkbox: True records marketing opt-in for new accounts only"}},"type":"object","required":["id_token"],"title":"AuthSessionRequest"},"AuthSessionResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"expires_at":{"type":"integer","title":"Expires At"},"user":{"$ref":"#/components/schemas/ProfileResponse"},"initial_api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Initial Api Key"}},"type":"object","required":["access_token","refresh_token","expires_at","user"],"title":"AuthSessionResponse"},"BanRequest":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Why this account is being banned"},"include_linked":{"type":"boolean","title":"Include Linked","description":"Also ban accounts linked by shared IP/fingerprint","default":false}},"type":"object","title":"BanRequest"},"BillingResponse":{"properties":{"plan":{"type":"string","title":"Plan"},"monthly_limit":{"type":"integer","title":"Monthly Limit"},"current_usage":{"type":"integer","title":"Current Usage"},"daily_quota":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Quota"},"requests_today":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Requests Today"},"daily_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Daily Remaining"},"resets_in":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resets In"},"billing_cycle_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Cycle End"},"payment_method":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payment Method"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End","default":false},"can_cancel":{"type":"boolean","title":"Can Cancel","default":false},"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"},"subscription_live":{"type":"boolean","title":"Subscription Live","default":false},"is_trial":{"type":"boolean","title":"Is Trial","default":false},"trial_ends_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trial Ends At"},"trial_days_left":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trial Days Left"},"trial_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trial State"},"trial_sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trial Sport"},"trial_seconds_left":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Trial Seconds Left"},"trial_canceled":{"type":"boolean","title":"Trial Canceled","default":false},"is_trial_eval":{"type":"boolean","title":"Is Trial Eval","default":false},"sample_matches":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sample Matches"},"payment_recovery_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Recovery Url"},"components":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Components"},"quota":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Quota"},"credits":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Credits"},"weekly_429s":{"type":"integer","title":"Weekly 429S","default":0}},"type":"object","required":["plan","monthly_limit","current_usage","billing_cycle_end"],"title":"BillingResponse","description":"User billing information."},"Body_changelog_unsubscribe_v6_public_changelog_unsubscribe_post":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},"type":"object","title":"Body_changelog_unsubscribe_v6_public_changelog_unsubscribe_post"},"Body_lifecycle_unsubscribe_v6_public_lifecycle_unsubscribe_post":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},"type":"object","title":"Body_lifecycle_unsubscribe_v6_public_lifecycle_unsubscribe_post"},"Body_record_cancel_reason_v6_public_lifecycle_cancel_reason_post":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","title":"Body_record_cancel_reason_v6_public_lifecycle_cancel_reason_post"},"Body_record_preference_v6_public_lifecycle_email_preferences_post":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer"}},"type":"object","title":"Body_record_preference_v6_public_lifecycle_email_preferences_post"},"Body_recovery_unsubscribe_v6_public_recovery_unsubscribe_post":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},"type":"object","title":"Body_recovery_unsubscribe_v6_public_recovery_unsubscribe_post"},"CancelSubscriptionRequest":{"properties":{"confirm":{"type":"boolean","title":"Confirm","default":false},"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","title":"CancelSubscriptionRequest","description":"Cancel requires an explicit UI confirmation flag.\n\nA bare POST (no body / confirm≠true) is refused so an accidental or\nscripted hit cannot schedule the end of a subscription."},"CancelSubscriptionResponse":{"properties":{"plan":{"type":"string","title":"Plan"},"status":{"type":"string","title":"Status"},"cancel_at_period_end":{"type":"boolean","title":"Cancel At Period End"},"current_period_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Period End"},"already_scheduled":{"type":"boolean","title":"Already Scheduled","default":false}},"type":"object","required":["plan","status","cancel_at_period_end"],"title":"CancelSubscriptionResponse"},"ChatMessage":{"properties":{"role":{"type":"string","enum":["user","assistant"],"title":"Role"},"content":{"type":"string","minLength":1,"title":"Content"}},"type":"object","required":["role","content"],"title":"ChatMessage"},"ChatRequest":{"properties":{"messages":{"items":{"$ref":"#/components/schemas/ChatMessage"},"type":"array","minItems":1,"title":"Messages"},"thread_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread Id"}},"type":"object","required":["messages"],"title":"ChatRequest"},"ContactSubmissionRequest":{"properties":{"full_name":{"type":"string","maxLength":200,"minLength":1,"title":"Full Name"},"email":{"type":"string","format":"email","title":"Email"},"message":{"type":"string","maxLength":10000,"minLength":1,"title":"Message"}},"type":"object","required":["full_name","email","message"],"title":"ContactSubmissionRequest"},"ContactSubmissionResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true}},"type":"object","title":"ContactSubmissionResponse"},"CreateCheckoutRequest":{"properties":{"plan":{"type":"string","title":"Plan","description":"Plan id: hobby, builder, pro, or quant"},"interval":{"type":"string","enum":["month","year"],"title":"Interval","description":"Billing interval; 'year' is available on Quant","default":"month"},"kr_vid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kr Vid","description":"First-party visitor UUID"},"trial":{"type":"boolean","title":"Trial","description":"Removed: free trials are no longer offered","default":false,"deprecated":true},"promotion_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promotion Code","description":"Customer-facing Stripe promotion code"},"upgrade_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upgrade Token","description":"Signed upgrade-link token (ut=): binds a logged-out checkout to the user it was minted for"},"utm":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Utm","description":"UTM tags on the click that opened checkout"}},"type":"object","required":["plan"],"title":"CreateCheckoutRequest"},"CreateCheckoutResponse":{"properties":{"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"},"changed_immediately":{"type":"boolean","title":"Changed Immediately","default":false},"already_on_plan":{"type":"boolean","title":"Already On Plan","default":false},"reactivated":{"type":"boolean","title":"Reactivated","default":false},"discount_applied":{"type":"boolean","title":"Discount Applied","default":false},"plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"}},"type":"object","title":"CreateCheckoutResponse"},"CreateKeyRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name","description":"Optional name for the key (e.g., 'Production', 'Development')"}},"type":"object","title":"CreateKeyRequest","description":"Request body for creating a new API key."},"CreateKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"api_key":{"type":"string","title":"Api Key","description":"The plaintext API key. Store this securely - it won't be shown again!"},"key_prefix":{"type":"string","title":"Key Prefix"},"tier":{"type":"string","title":"Tier","default":"sandbox"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","name","api_key","key_prefix","created_at"],"title":"CreateKeyResponse","description":"Response after creating an API key. Contains the plaintext key (shown once)."},"CreditCheckoutRequest":{"properties":{"pack":{"type":"string","enum":["10k","50k","250k"],"title":"Pack","description":"Credit pack size"},"kr_vid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kr Vid","description":"First-party visitor UUID"},"upgrade_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upgrade Token","description":"Signed upgrade-link token (ut=): binds a logged-out checkout to the user it was minted for"},"utm":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Utm","description":"UTM tags on the click that opened checkout"}},"type":"object","required":["pack"],"title":"CreditCheckoutRequest","description":"One-time credit pack purchase, available on any plan."},"CustomCheckoutRequest":{"properties":{"components":{"items":{"type":"string"},"type":"array","title":"Components"},"kr_vid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kr Vid"},"promotion_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promotion Code"},"upgrade_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upgrade Token"},"utm":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"title":"Utm"}},"type":"object","required":["components"],"title":"CustomCheckoutRequest","description":"Component ids from GET /v1/dev/billing/catalog."},"DeviceCodeBody":{"properties":{"device_code":{"type":"string","maxLength":128,"minLength":16,"pattern":"^[A-Za-z0-9_-]+$","title":"Device Code"}},"type":"object","required":["device_code"],"title":"DeviceCodeBody"},"DeviceCompleteResponse":{"properties":{"ok":{"type":"boolean","title":"Ok"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","required":["ok"],"title":"DeviceCompleteResponse"},"DevicePollResponse":{"properties":{"status":{"type":"string","title":"Status"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["status"],"title":"DevicePollResponse"},"DeviceStartResponse":{"properties":{"device_code":{"type":"string","title":"Device Code"},"verify_url":{"type":"string","title":"Verify Url"},"expires_in":{"type":"integer","title":"Expires In"},"interval":{"type":"integer","title":"Interval"}},"type":"object","required":["device_code","verify_url","expires_in","interval"],"title":"DeviceStartResponse"},"DiscordCheckoutRequest":{"properties":{"guild_id":{"type":"string","title":"Guild Id"},"plan":{"type":"string","title":"Plan"}},"type":"object","required":["guild_id","plan"],"title":"DiscordCheckoutRequest"},"EndpointStats":{"properties":{"endpoint":{"type":"string","title":"Endpoint"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["endpoint","count"],"title":"EndpointStats"},"EvalRequest":{"properties":{"email":{"type":"string","maxLength":320,"minLength":3,"title":"Email"}},"type":"object","required":["email"],"title":"EvalRequest"},"FiltersBody":{"properties":{"filters":{"additionalProperties":true,"type":"object","title":"Filters"}},"type":"object","required":["filters"],"title":"FiltersBody"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"KeyStats":{"properties":{"api_key_id":{"type":"string","title":"Api Key Id"},"key_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Key Prefix"},"user_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Email"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["api_key_id","count"],"title":"KeyStats"},"ListKeysResponse":{"properties":{"keys":{"items":{"$ref":"#/components/schemas/APIKeyInfo"},"type":"array","title":"Keys"},"active_count":{"type":"integer","title":"Active Count","description":"How many listed keys the plan cap counts. Same predicate as Create key.","default":0}},"type":"object","required":["keys"],"title":"ListKeysResponse","description":"Response for listing API keys."},"LogoutRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"LogoutRequest"},"LogoutResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true}},"type":"object","title":"LogoutResponse"},"LogsResponse":{"properties":{"logs":{"items":{"$ref":"#/components/schemas/RequestLog"},"type":"array","title":"Logs"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["logs","total"],"title":"LogsResponse","description":"Response for request logs."},"MagicSessionRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"MagicSessionRequest","description":"The magic_login JWT from a guest-checkout success link or welcome mail."},"MarketingConsentRequest":{"properties":{"consent":{"type":"boolean","title":"Consent"}},"type":"object","required":["consent"],"title":"MarketingConsentRequest"},"ProfileResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"avatar_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Avatar Url"},"tier":{"type":"string","title":"Tier","default":"sandbox"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"trial_active":{"type":"boolean","title":"Trial Active","default":false},"trial_sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trial Sport"}},"type":"object","required":["id","email","full_name","avatar_url","created_at"],"title":"ProfileResponse","description":"User profile information."},"RateLimitTestRequest":{"properties":{"user_id":{"type":"string","title":"User Id"},"endpoint":{"type":"string","title":"Endpoint","default":"/v6/esports/cs2/props"},"burst_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Burst Count","description":"Defaults to plan RPM limit + 2"},"plan_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Override","description":"Temporarily set plan for the test, then restore"}},"type":"object","required":["user_id"],"title":"RateLimitTestRequest"},"RateLimitTestResult":{"properties":{"user_id":{"type":"string","title":"User Id"},"plan":{"type":"string","title":"Plan"},"rpm_limit":{"type":"integer","title":"Rpm Limit"},"endpoint":{"type":"string","title":"Endpoint"},"burst_count":{"type":"integer","title":"Burst Count"},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results"},"success_count":{"type":"integer","title":"Success Count"},"blocked_429_count":{"type":"integer","title":"Blocked 429 Count"},"first_429_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"First 429 At"}},"type":"object","required":["user_id","plan","rpm_limit","endpoint","burst_count","results","success_count","blocked_429_count"],"title":"RateLimitTestResult"},"RefreshSessionRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshSessionRequest"},"RefundRequest":{"properties":{"charge_id":{"type":"string","title":"Charge Id","description":"Stripe charge id (ch_...)"},"amount_cents":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Amount Cents","description":"Partial refund; omitted refunds the full charge"}},"type":"object","required":["charge_id"],"title":"RefundRequest"},"RequestLog":{"properties":{"id":{"type":"string","title":"Id"},"method":{"type":"string","title":"Method"},"endpoint":{"type":"string","title":"Endpoint"},"status_code":{"type":"integer","title":"Status Code"},"latency_ms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Latency Ms"},"timestamp":{"type":"string","title":"Timestamp"}},"type":"object","required":["id","method","endpoint","status_code","latency_ms","timestamp"],"title":"RequestLog","description":"Single request log entry."},"RevokeKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["id","status","message"],"title":"RevokeKeyResponse","description":"Response after revoking an API key."},"SessionStatusResponse":{"properties":{"status":{"type":"string","title":"Status"},"plan":{"type":"string","title":"Plan"},"payment_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Status"},"api_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"sign_in_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sign In Url"}},"type":"object","required":["status","plan"],"title":"SessionStatusResponse"},"SettingsBody":{"properties":{"key_id":{"type":"string","title":"Key Id"},"filters":{"additionalProperties":true,"type":"object","title":"Filters"}},"type":"object","required":["key_id","filters"],"title":"SettingsBody"},"SetupRequest":{"properties":{"sport":{"type":"string","maxLength":20,"minLength":2,"title":"Sport"},"use_case":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Use Case"}},"type":"object","required":["sport"],"title":"SetupRequest"},"SimulateSignupRequest":{"properties":{"email":{"type":"string","title":"Email","description":"The email a signup would present"},"ip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip","description":"Client IP to evaluate (trusted-chain value, not raw)"}},"type":"object","required":["email"],"title":"SimulateSignupRequest"},"UsageSummary":{"properties":{"total_requests":{"type":"integer","title":"Total Requests"},"error_count":{"type":"integer","title":"Error Count"},"error_rate":{"type":"number","title":"Error Rate"},"top_endpoints":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Top Endpoints"},"requests_per_day":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Requests Per Day"},"range":{"type":"string","title":"Range"}},"type":"object","required":["total_requests","error_count","error_rate","top_endpoints","requests_per_day","range"],"title":"UsageSummary","description":"Usage statistics summary."},"UserInfo":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"plan":{"type":"string","title":"Plan"},"status":{"type":"string","title":"Status"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"google_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Google Id"},"key_count":{"type":"integer","title":"Key Count","default":0},"requests_since":{"type":"integer","title":"Requests Since","default":0},"last_request_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Request At"},"current_rpm":{"type":"integer","title":"Current Rpm","default":0},"rpm_limit":{"type":"integer","title":"Rpm Limit","default":2},"is_trial":{"type":"boolean","title":"Is Trial","default":false},"eval_active":{"type":"boolean","title":"Eval Active","default":false},"eval_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Eval Until"}},"type":"object","required":["id","email","plan","status"],"title":"UserInfo"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WaitlistSignupRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"source":{"type":"string","maxLength":64,"title":"Source","default":"maintenance"}},"type":"object","required":["email"],"title":"WaitlistSignupRequest"},"WaitlistSignupResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true}},"type":"object","title":"WaitlistSignupResponse"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Custom API Key for server-to-server data access"}}}}