{"openapi":"3.1.0","info":{"title":"chuck — Sports Analytics API","description":"Read-only sports analytics for nfl, nba, mlb, nhl, cfb, cbb. Authenticate each request with your `sk_*` API key (`Authorization: Bearer <key>`). Responses are cached (ETag/304), rate-limited, and metered. Not betting advice.\n\nGet a key: `POST /account/signup`. Connect an AI client via the MCP server at `/mcp`.","version":"0.1.0"},"servers":[{"url":"https://chuck.blockheadlabs.tech","description":"Production"},{"url":"http://localhost:8000","description":"Local"}],"paths":{"/v1/health":{"get":{"tags":["meta"],"summary":"Liveness probe","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Health V1 Health Get"}}}}}}},"/v1/health/db":{"get":{"tags":["meta"],"summary":"Data-plane readiness (read-only pool)","operationId":"health_db_v1_health_db_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/sports":{"get":{"tags":["meta"],"summary":"Sport coverage + per-sport freshness","operationId":"sports_v1_sports_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/account/usage":{"get":{"tags":["account"],"summary":"Your usage dashboard","operationId":"usage_v1_account_usage_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageSummary"}}}}}}},"/v1/account/checkout":{"post":{"tags":["account"],"summary":"Upgrade via Stripe","operationId":"checkout_v1_account_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/{sport}/games":{"get":{"tags":["games"],"summary":"List games","operationId":"list_games_v1__sport__games_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. 'nfl'.","title":"Sport"},"description":"Sport key, e.g. 'nfl'."},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter to a date (UTC).","title":"Date"},"description":"Filter to a date (UTC)."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by short status code.","title":"Status"},"description":"Filter by short status code."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number.","default":1,"title":"Page"},"description":"1-based page number."},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"Items per page.","default":50,"title":"Page Size"},"description":"Items per page."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_GameSummary_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/{sport}/games/{game_id}":{"get":{"tags":["games"],"summary":"Game detail","operationId":"get_game_v1__sport__games__game_id__get","parameters":[{"name":"game_id","in":"path","required":true,"schema":{"type":"integer","description":"Game identifier.","title":"Game Id"},"description":"Game identifier."},{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. 'nfl'.","title":"Sport"},"description":"Sport key, e.g. 'nfl'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/{sport}/teams":{"get":{"tags":["teams"],"summary":"List teams","operationId":"list_teams_v1__sport__teams_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. 'nfl'.","title":"Sport"},"description":"Sport key, e.g. 'nfl'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_TeamRef_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/{sport}/teams/{team_id}/form":{"get":{"tags":["teams"],"summary":"Team recent form (streak / last-N / home-away split)","operationId":"team_form_v1__sport__teams__team_id__form_get","parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"integer","description":"Team identifier.","title":"Team Id"},"description":"Team identifier."},{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. 'nfl'.","title":"Sport"},"description":"Sport key, e.g. 'nfl'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamFormResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/{sport}/teams/{team_id}/season":{"get":{"tags":["teams"],"summary":"Team season summary + betting record","operationId":"team_season_v1__sport__teams__team_id__season_get","parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"integer","description":"Team identifier.","title":"Team Id"},"description":"Team identifier."},{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. 'nfl'.","title":"Sport"},"description":"Sport key, e.g. 'nfl'."},{"name":"season","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Season label filter.","title":"Season"},"description":"Season label filter."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamSeasonResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/{sport}/odds":{"get":{"tags":["odds"],"summary":"Odds by date","operationId":"list_odds_v1__sport__odds_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. 'nfl'.","title":"Sport"},"description":"Sport key, e.g. 'nfl'."},{"name":"date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"description":"Filter to a date.","title":"Date"},"description":"Filter to a date."},{"name":"live","in":"query","required":false,"schema":{"type":"boolean","description":"Use in-play lines instead of pregame snapshot.","default":false,"title":"Live"},"description":"Use in-play lines instead of pregame snapshot."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_OddsLine_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/{sport}/games/{game_id}/odds":{"get":{"tags":["odds"],"summary":"Odds for one game","operationId":"game_odds_v1__sport__games__game_id__odds_get","parameters":[{"name":"game_id","in":"path","required":true,"schema":{"type":"integer","description":"Game identifier.","title":"Game Id"},"description":"Game identifier."},{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. 'nfl'.","title":"Sport"},"description":"Sport key, e.g. 'nfl'."},{"name":"live","in":"query","required":false,"schema":{"type":"boolean","description":"Use in-play lines instead of pregame snapshot.","default":false,"title":"Live"},"description":"Use in-play lines instead of pregame snapshot."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_OddsLine_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/{sport}/standings":{"get":{"tags":["standings"],"summary":"Standings","operationId":"get_standings_v1__sport__standings_get","parameters":[{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. 'nfl'.","title":"Sport"},"description":"Sport key, e.g. 'nfl'."},{"name":"season","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Season label filter.","title":"Season"},"description":"Season label filter."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page_StandingRow_"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/{sport}/games/{game_id}/analysis":{"get":{"tags":["analysis"],"summary":"Pre-generated game analysis","operationId":"game_analysis_v1__sport__games__game_id__analysis_get","parameters":[{"name":"game_id","in":"path","required":true,"schema":{"type":"integer","description":"Game identifier.","title":"Game Id"},"description":"Game identifier."},{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. 'nfl'.","title":"Sport"},"description":"Sport key, e.g. 'nfl'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GameAnalysis"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/{sport}/teams/{team_id}/analysis":{"get":{"tags":["analysis"],"summary":"Pre-generated team analysis","operationId":"team_analysis_v1__sport__teams__team_id__analysis_get","parameters":[{"name":"team_id","in":"path","required":true,"schema":{"type":"integer","description":"Team identifier.","title":"Team Id"},"description":"Team identifier."},{"name":"sport","in":"path","required":true,"schema":{"type":"string","description":"Sport key, e.g. 'nfl'.","title":"Sport"},"description":"Sport key, e.g. 'nfl'."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamAnalysis"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/billing/webhook":{"post":{"tags":["billing"],"summary":"Stripe webhook receiver","operationId":"stripe_webhook_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stripe Webhook Billing Webhook Post"}}}}}}},"/account/signup":{"post":{"tags":["account"],"summary":"Create an account + API key","operationId":"signup_account_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"CheckoutRequest":{"properties":{"plan":{"type":"string","title":"Plan","description":"Target plan name, e.g. 'pro'."},"success_url":{"type":"string","title":"Success Url","default":"https://app.blockheadlabs.tech/billing/success"},"cancel_url":{"type":"string","title":"Cancel Url","default":"https://app.blockheadlabs.tech/billing/cancel"}},"type":"object","required":["plan"],"title":"CheckoutRequest"},"CheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"CheckoutResponse"},"GameAnalysis":{"properties":{"sport":{"type":"string","title":"Sport"},"game_id":{"type":"integer","title":"Game Id"},"game_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Game Date"},"home_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Home Team Id"},"away_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Away Team Id"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"Pre-generated narrative summary."},"key_insights":{"anyOf":[{},{"type":"null"}],"title":"Key Insights","description":"Structured insight list/object."},"ats_lean":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ats Lean"},"total_lean":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Total Lean"},"best_bet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Best Bet","description":"Betting-adjacent: tier/geo/age gated."},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"data_quality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Quality"},"player_spotlight":{"anyOf":[{},{"type":"null"}],"title":"Player Spotlight"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model","description":"Generator that produced this (audit)."},"generated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Generated At"}},"type":"object","required":["sport","game_id"],"title":"GameAnalysis"},"GameDetail":{"properties":{"game":{"$ref":"#/components/schemas/GameSummary"},"standings":{"items":{"$ref":"#/components/schemas/StandingRow"},"type":"array","title":"Standings","description":"Standings for both teams."},"season_summaries":{"items":{"$ref":"#/components/schemas/TeamSeasonSummary"},"type":"array","title":"Season Summaries"},"home_away_splits":{"items":{"$ref":"#/components/schemas/HomeAwaySplit"},"type":"array","title":"Home Away Splits"},"head_to_head":{"anyOf":[{"$ref":"#/components/schemas/HeadToHead"},{"type":"null"}]},"has_analysis":{"type":"boolean","title":"Has Analysis","description":"Whether pre-generated analysis exists.","default":false}},"type":"object","required":["game"],"title":"GameDetail"},"GameSummary":{"properties":{"sport":{"type":"string","title":"Sport","description":"Sport key, e.g. 'nfl'."},"game_id":{"type":"integer","title":"Game Id","description":"Stable game identifier within the sport."},"season":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Season","description":"Season label."},"game_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Game Date","description":"Scheduled/played kickoff time (UTC)."},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Short status code, e.g. 'NS', 'FT'."},"is_completed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Completed","description":"Whether the game is final."},"home_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Home Team Id"},"home_team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Home Team Name"},"away_team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Away Team Id"},"away_team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Away Team Name"},"home_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Home Score","description":"Final/current home score (normalized)."},"away_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Away Score","description":"Final/current away score (normalized)."},"winner_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Winner Id"},"prediction":{"anyOf":[{"$ref":"#/components/schemas/Prediction"},{"type":"null"}],"description":"Model output, when available."}},"type":"object","required":["sport","game_id"],"title":"GameSummary"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HeadToHead":{"properties":{"team_a_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team A Id"},"team_b_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team B Id"},"games":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Games"},"team_a_wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team A Wins"},"team_b_wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team B Wins"}},"type":"object","title":"HeadToHead"},"HomeAwaySplit":{"properties":{"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"home_wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Home Wins"},"home_losses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Home Losses"},"away_wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Away Wins"},"away_losses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Away Losses"}},"type":"object","title":"HomeAwaySplit"},"Meta":{"properties":{"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport","description":"Sport scope of the response, if applicable."},"cache_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cache Seconds","description":"Max seconds this payload may be considered fresh."},"generated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generated At","description":"ISO-8601 timestamp the payload was produced."}},"type":"object","title":"Meta","description":"Per-response metadata (freshness / cache hints)."},"OddsLine":{"properties":{"game_id":{"type":"integer","title":"Game Id","description":"Game the line applies to."},"bookmaker":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bookmaker"},"home_ml":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Home Ml","description":"Home moneyline (American)."},"away_ml":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Away Ml","description":"Away moneyline (American)."},"spread_line":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spread Line","description":"Point spread (home perspective)."},"total_line":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Line","description":"Over/under total."},"over_odds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Over Odds"},"under_odds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Under Odds"},"captured_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Captured At","description":"When this line was observed."}},"type":"object","required":["game_id"],"title":"OddsLine"},"Page_GameSummary_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/GameSummary"},"type":"array","title":"Data","description":"The page of results."},"page":{"type":"integer","minimum":1.0,"title":"Page","description":"1-based page number."},"page_size":{"type":"integer","minimum":1.0,"title":"Page Size","description":"Number of items requested per page."},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total number of matching items (best-effort)."},"has_more":{"type":"boolean","title":"Has More","description":"True if more pages exist after this one."},"meta":{"anyOf":[{"$ref":"#/components/schemas/Meta"},{"type":"null"}],"description":"Optional response metadata."}},"type":"object","required":["data","page","page_size","total","has_more"],"title":"Page[GameSummary]"},"Page_OddsLine_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/OddsLine"},"type":"array","title":"Data","description":"The page of results."},"page":{"type":"integer","minimum":1.0,"title":"Page","description":"1-based page number."},"page_size":{"type":"integer","minimum":1.0,"title":"Page Size","description":"Number of items requested per page."},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total number of matching items (best-effort)."},"has_more":{"type":"boolean","title":"Has More","description":"True if more pages exist after this one."},"meta":{"anyOf":[{"$ref":"#/components/schemas/Meta"},{"type":"null"}],"description":"Optional response metadata."}},"type":"object","required":["data","page","page_size","total","has_more"],"title":"Page[OddsLine]"},"Page_StandingRow_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/StandingRow"},"type":"array","title":"Data","description":"The page of results."},"page":{"type":"integer","minimum":1.0,"title":"Page","description":"1-based page number."},"page_size":{"type":"integer","minimum":1.0,"title":"Page Size","description":"Number of items requested per page."},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total number of matching items (best-effort)."},"has_more":{"type":"boolean","title":"Has More","description":"True if more pages exist after this one."},"meta":{"anyOf":[{"$ref":"#/components/schemas/Meta"},{"type":"null"}],"description":"Optional response metadata."}},"type":"object","required":["data","page","page_size","total","has_more"],"title":"Page[StandingRow]"},"Page_TeamRef_":{"properties":{"data":{"items":{"$ref":"#/components/schemas/TeamRef"},"type":"array","title":"Data","description":"The page of results."},"page":{"type":"integer","minimum":1.0,"title":"Page","description":"1-based page number."},"page_size":{"type":"integer","minimum":1.0,"title":"Page Size","description":"Number of items requested per page."},"total":{"type":"integer","minimum":0.0,"title":"Total","description":"Total number of matching items (best-effort)."},"has_more":{"type":"boolean","title":"Has More","description":"True if more pages exist after this one."},"meta":{"anyOf":[{"$ref":"#/components/schemas/Meta"},{"type":"null"}],"description":"Optional response metadata."}},"type":"object","required":["data","page","page_size","total","has_more"],"title":"Page[TeamRef]"},"Prediction":{"properties":{"predicted_home_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Predicted Home Score","description":"Model's projected home score."},"predicted_away_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Predicted Away Score","description":"Model's projected away score."},"predicted_winner":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Predicted Winner","description":"Model's projected winner."},"total":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total","description":"Model's projected combined total."},"spread":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Spread","description":"Model's projected spread (home perspective)."},"home_win_probability":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Home Win Probability","description":"Model home win probability [0,1]."},"away_win_probability":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Away Win Probability","description":"Model away win probability [0,1]."}},"type":"object","title":"Prediction"},"SignupRequest":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name","description":"Your name or organization."},"email":{"type":"string","maxLength":320,"minLength":3,"title":"Email","description":"Contact email."}},"type":"object","required":["name","email"],"title":"SignupRequest"},"SignupResponse":{"properties":{"tenant_id":{"type":"integer","title":"Tenant Id"},"plan":{"type":"string","title":"Plan","description":"Starting plan (free)."},"api_key":{"type":"string","title":"Api Key","description":"Your API key — shown ONCE. Store it now; it is unrecoverable."},"next_steps":{"type":"string","title":"Next Steps"}},"type":"object","required":["tenant_id","plan","api_key","next_steps"],"title":"SignupResponse"},"StandingRow":{"properties":{"season":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Season"},"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"conference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conference"},"wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wins"},"losses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Losses"},"win_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Win Pct"},"rank":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rank"}},"type":"object","title":"StandingRow"},"TeamAnalysis":{"properties":{"sport":{"type":"string","title":"Sport"},"team_id":{"type":"integer","title":"Team Id"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"key_insights":{"anyOf":[{},{"type":"null"}],"title":"Key Insights"},"model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model"},"generated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Generated At"}},"type":"object","required":["sport","team_id"],"title":"TeamAnalysis"},"TeamBettingRecord":{"properties":{"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"ats_wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ats Wins"},"ats_losses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ats Losses"},"over_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Over Count"},"under_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Under Count"}},"type":"object","title":"TeamBettingRecord"},"TeamForm":{"properties":{"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"games":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Games"},"wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wins"},"losses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Losses"},"last_results":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Results","description":"Recent results, newest first, e.g. 'WWL'."}},"type":"object","title":"TeamForm"},"TeamFormResponse":{"properties":{"streak":{"anyOf":[{"$ref":"#/components/schemas/TeamStreak"},{"type":"null"}]},"form":{"anyOf":[{"$ref":"#/components/schemas/TeamForm"},{"type":"null"}]},"home_away_split":{"anyOf":[{"$ref":"#/components/schemas/HomeAwaySplit"},{"type":"null"}]}},"type":"object","title":"TeamFormResponse"},"TeamRef":{"properties":{"id":{"type":"integer","title":"Id","description":"Team identifier."},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"abbreviation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Abbreviation"},"sport":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"},"league_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"League Name"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"}},"type":"object","required":["id"],"title":"TeamRef"},"TeamSeasonResponse":{"properties":{"season_summary":{"anyOf":[{"$ref":"#/components/schemas/TeamSeasonSummary"},{"type":"null"}]},"betting_record":{"anyOf":[{"$ref":"#/components/schemas/TeamBettingRecord"},{"type":"null"}]}},"type":"object","title":"TeamSeasonResponse"},"TeamSeasonSummary":{"properties":{"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"season":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Season"},"wins":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Wins"},"losses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Losses"},"points_for":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Points For"},"points_against":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Points Against"}},"type":"object","title":"TeamSeasonSummary"},"TeamStreak":{"properties":{"team_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Team Id"},"team_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Name"},"streak_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Streak Type","description":"'W' or 'L'."},"streak_length":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Streak Length"}},"type":"object","title":"TeamStreak"},"UsageSummary":{"properties":{"plan":{"type":"string","title":"Plan"},"window_days":{"type":"integer","title":"Window Days"},"total_requests":{"type":"integer","title":"Total Requests"},"total_cost_units":{"type":"integer","title":"Total Cost Units"},"by_surface":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Surface"},"rate_limit_rpm":{"type":"integer","title":"Rate Limit Rpm"},"monthly_quota":{"type":"integer","title":"Monthly Quota"}},"type":"object","required":["plan","window_days","total_requests","total_cost_units","by_surface","rate_limit_rpm","monthly_quota"],"title":"UsageSummary"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","description":"Your sk_* API key. Also accepted via the X-API-Key header."}}},"tags":[{"name":"meta","description":"Health, coverage, freshness."},{"name":"games","description":"Game lists + composite detail."},{"name":"teams","description":"Team form, season summaries, betting records."},{"name":"odds","description":"Odds snapshots (betting-adjacent; tier/geo gated)."},{"name":"standings","description":"League standings."},{"name":"analysis","description":"Pre-generated narrative analysis (plan-gated)."},{"name":"account","description":"Self-serve signup, usage, and upgrades."}],"security":[{"ApiKeyAuth":[]}]}