{"openapi":"3.1.1","info":{"title":"MoneyLine API","version":"1.0.0","description":"Sports data, odds, player props, edge signals, best bets, and AI-grounded recommendations. Existing response and billing behavior remains authoritative; see the linked documentation for credit costs and workflow details.","contact":{"name":"MoneyLine API Support","email":"cole@moneylineapp.com","url":"https://www.moneylineapp.com/contact"},"termsOfService":"https://www.moneylineapp.com/terms","license":{"name":"MoneyLine API Terms of Service","url":"https://www.moneylineapp.com/terms"}},"servers":[{"url":"https://mlapi.bet","description":"Production"}],"externalDocs":{"description":"MoneyLine API documentation","url":"https://www.moneylineapp.com/docs"},"tags":[{"name":"Discovery","description":"Unauthenticated machine-discovery resources."},{"name":"Leagues","description":"Sports, leagues, and rankings."},{"name":"Teams","description":"Teams, rosters, injuries, statistics, and schedules."},{"name":"Events","description":"Events, scores, standings, and play-by-play."},{"name":"Odds","description":"Normalized current and historical odds."},{"name":"Player Props","description":"Normalized player-prop offers and market catalogs."},{"name":"Edge","description":"Arbitrage, value, and expected-value signals."},{"name":"Best Bets","description":"Best currently available eligible prices."},{"name":"Players","description":"Players, statistics, hit rates, trends, and analysis."},{"name":"MoneyLine AI","description":"Natural-language workflows grounded in MoneyLine data."},{"name":"Public Data","description":"Limited unauthenticated data used by public MoneyLine pages."}],"security":[{"ApiKeyAuth":[]}],"paths":{"/v1/sports":{"get":{"operationId":"listSports","summary":"List supported sports","description":"Returns the sports and league families supported by MoneyLine.","tags":["Leagues"],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/leagues":{"get":{"operationId":"listLeagues","summary":"List leagues","description":"Returns canonical league records, optionally narrowed by sport.","tags":["Leagues"],"parameters":[{"name":"sport","in":"query","required":false,"description":"Filter by sport, such as basketball or football.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/League"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/leagues/{leagueId}":{"get":{"operationId":"getLeague","summary":"Get a league","description":"Returns one canonical league record by ID.","tags":["Leagues"],"parameters":[{"name":"leagueId","in":"path","required":true,"description":"Canonical MoneyLine league ID.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/League"}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/leagues/{leagueId}/rankings":{"get":{"operationId":"getLeagueRankings","summary":"Get league rankings","description":"Returns the requested NCAA ranking poll for a league.","tags":["Leagues"],"parameters":[{"name":"leagueId","in":"path","required":true,"description":"Canonical MoneyLine league ID.","schema":{"type":"string","minLength":1}},{"name":"poll","in":"query","required":false,"description":"Ranking poll key.","schema":{"type":"string","default":"ap"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/teams":{"get":{"operationId":"listTeams","summary":"List teams","description":"Returns teams, optionally filtered by league.","tags":["Teams"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Team"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/leagues/{leagueId}/teams":{"get":{"operationId":"listLeagueTeams","summary":"List teams in a league","description":"Returns every canonical team in one league.","tags":["Teams"],"parameters":[{"name":"leagueId","in":"path","required":true,"description":"Canonical MoneyLine league ID.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Team"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/teams/{teamId}":{"get":{"operationId":"getTeam","summary":"Get a team","description":"Returns canonical team details.","tags":["Teams"],"parameters":[{"name":"teamId","in":"path","required":true,"description":"Canonical MoneyLine team ID.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/teams/{teamId}/roster":{"get":{"operationId":"getTeamRoster","summary":"Get a team roster","description":"Returns the current roster for a team.","tags":["Teams"],"parameters":[{"name":"teamId","in":"path","required":true,"description":"Canonical MoneyLine team ID.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/teams/{teamId}/injuries":{"get":{"operationId":"getTeamInjuries","summary":"Get team injuries","description":"Returns the current injury report for a team.","tags":["Teams"],"parameters":[{"name":"teamId","in":"path","required":true,"description":"Canonical MoneyLine team ID.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/teams/{teamId}/stats":{"get":{"operationId":"getTeamStats","summary":"Get team statistics","description":"Returns team statistics for the requested season.","tags":["Teams"],"parameters":[{"name":"teamId","in":"path","required":true,"description":"Canonical MoneyLine team ID.","schema":{"type":"string","minLength":1}},{"name":"season","in":"query","required":false,"description":"Season identifier.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/teams/{teamId}/schedule":{"get":{"operationId":"getTeamSchedule","summary":"Get a team schedule","description":"Returns the schedule for a team.","tags":["Teams"],"parameters":[{"name":"teamId","in":"path","required":true,"description":"Canonical MoneyLine team ID.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/teams/{teamId}/injuries/history":{"get":{"operationId":"getTeamInjuryHistory","summary":"Get team injury history","description":"Returns injury observations or reconstructs the report at a point in time.","tags":["Teams"],"parameters":[{"name":"teamId","in":"path","required":true,"description":"Canonical MoneyLine team ID.","schema":{"type":"string","minLength":1}},{"name":"asOf","in":"query","required":false,"description":"Optional ISO timestamp for point-in-time reconstruction.","schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","required":false,"description":"Maximum history observations.","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/events":{"get":{"operationId":"listEvents","summary":"List events","description":"Returns scheduled, live, and completed events with bounded pagination.","tags":["Events"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"sport","in":"query","required":false,"description":"Filter by sport family.","schema":{"type":"string"}},{"name":"date","in":"query","required":false,"description":"Calendar date in YYYY-MM-DD format.","schema":{"type":"string","format":"date"}},{"name":"from","in":"query","required":false,"description":"Inclusive start date in YYYY-MM-DD format.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Inclusive end date in YYYY-MM-DD format.","schema":{"type":"string","format":"date"}},{"name":"status","in":"query","required":false,"description":"Filter by event status.","schema":{"type":"string","enum":["scheduled","in_progress","final","postponed","cancelled"]}},{"name":"limit","in":"query","required":false,"description":"Maximum event records to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"page","in":"query","required":false,"description":"One-based page number.","schema":{"type":"integer","minimum":1,"default":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/events/live":{"get":{"operationId":"listLiveEvents","summary":"List live events","description":"Returns events currently in progress.","tags":["Events"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/events/today":{"get":{"operationId":"listTodayEvents","summary":"List today's events","description":"Returns events in the current MoneyLine day window.","tags":["Events"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/events/{eventId}":{"get":{"operationId":"getEvent","summary":"Get an event","description":"Returns one event using the canonical event ID shared across MoneyLine feeds.","tags":["Events"],"parameters":[{"name":"eventId","in":"path","required":true,"description":"Canonical MoneyLine event ID.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Event"}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/events/{eventId}/play-by-play":{"get":{"operationId":"getEventPlayByPlay","summary":"Get event play-by-play","description":"Returns available play-by-play records for an event.","tags":["Events"],"parameters":[{"name":"eventId","in":"path","required":true,"description":"Canonical MoneyLine event ID.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/leagues/{leagueId}/scores":{"get":{"operationId":"getLeagueScores","summary":"Get league scores","description":"Returns league events and scores for a calendar date.","tags":["Events"],"parameters":[{"name":"leagueId","in":"path","required":true,"description":"Canonical MoneyLine league ID.","schema":{"type":"string","minLength":1}},{"name":"date","in":"query","required":false,"description":"Calendar date in YYYY-MM-DD format.","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/leagues/{leagueId}/standings":{"get":{"operationId":"getLeagueStandings","summary":"Get league standings","description":"Returns standings, optionally filtered by conference or division.","tags":["Events"],"parameters":[{"name":"leagueId","in":"path","required":true,"description":"Canonical MoneyLine league ID.","schema":{"type":"string","minLength":1}},{"name":"conference","in":"query","required":false,"description":"Conference name or abbreviation.","schema":{"type":"string"}},{"name":"division","in":"query","required":false,"description":"Division name or abbreviation.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/odds":{"get":{"operationId":"listOdds","summary":"List odds","description":"Returns normalized game and player-prop odds across supported venue types.","tags":["Odds"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"bookmaker","in":"query","required":false,"description":"Filter by canonical bookmaker key or bookmaker name.","schema":{"type":"string"}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}},{"name":"page","in":"query","required":false,"description":"One-based page number.","schema":{"type":"integer","minimum":1,"default":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OddsEvent"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/odds/bookmakers":{"get":{"operationId":"listBookmakers","summary":"List bookmakers","description":"Returns the canonical bookmaker and venue catalog.","tags":["Odds"],"parameters":[{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Bookmaker"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/events/{eventId}/odds":{"get":{"operationId":"getEventOdds","summary":"Get event odds","description":"Returns normalized odds and market summaries for one event.","tags":["Odds"],"parameters":[{"name":"eventId","in":"path","required":true,"description":"Canonical MoneyLine event ID.","schema":{"type":"string","minLength":1}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/OddsEvent"}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/events/{eventId}/odds-history":{"get":{"operationId":"getEventOddsHistory","summary":"Get event odds history","description":"Returns consensus line movement snapshots for an event.","tags":["Odds"],"parameters":[{"name":"eventId","in":"path","required":true,"description":"Canonical MoneyLine event ID.","schema":{"type":"string","minLength":1}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"playerId","in":"query","required":false,"description":"Optional canonical player ID for prop history.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Inclusive history start date.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Inclusive history end date.","schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","required":false,"description":"Maximum history snapshots.","schema":{"type":"integer","minimum":1,"maximum":1000,"default":200}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/players/{playerId}/odds-history":{"get":{"operationId":"getPlayerOddsHistory","summary":"Get player odds history","description":"Returns consensus line movement for a player's props across events.","tags":["Odds"],"parameters":[{"name":"playerId","in":"path","required":true,"description":"Canonical MoneyLine player ID.","schema":{"type":"string","minLength":1}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"eventId","in":"query","required":false,"description":"Optional canonical event ID.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Inclusive history start date.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Inclusive history end date.","schema":{"type":"string","format":"date"}},{"name":"limit","in":"query","required":false,"description":"Maximum history snapshots.","schema":{"type":"integer","minimum":1,"maximum":1000,"default":200}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/player-props":{"get":{"operationId":"listPlayerProps","summary":"List player props","description":"Returns normalized player props by event, player, market, line, bookmaker, or venue type.","tags":["Player Props"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"player","in":"query","required":false,"description":"Case-insensitive player-name filter.","schema":{"type":"string"}},{"name":"playerId","in":"query","required":false,"description":"Exact canonical MoneyLine player ID.","schema":{"type":"string"}},{"name":"bookmaker","in":"query","required":false,"description":"Filter by canonical bookmaker key or bookmaker name.","schema":{"type":"string"}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}},{"name":"page","in":"query","required":false,"description":"One-based page number.","schema":{"type":"integer","minimum":1,"default":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/events/{eventId}/player-props":{"get":{"operationId":"getEventPlayerProps","summary":"Get event player props","description":"Returns normalized player props for one event.","tags":["Player Props"],"parameters":[{"name":"eventId","in":"path","required":true,"description":"Canonical MoneyLine event ID.","schema":{"type":"string","minLength":1}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"player","in":"query","required":false,"description":"Case-insensitive player-name filter.","schema":{"type":"string"}},{"name":"playerId","in":"query","required":false,"description":"Exact canonical MoneyLine player ID.","schema":{"type":"string"}},{"name":"bookmaker","in":"query","required":false,"description":"Filter by canonical bookmaker key or bookmaker name.","schema":{"type":"string"}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/player-props/markets":{"get":{"operationId":"listPlayerPropMarkets","summary":"List player-prop markets","description":"Returns supported player-prop market metadata by league.","tags":["Player Props"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/edge":{"get":{"operationId":"listEdges","summary":"List betting edges","description":"Returns arbitrage, value, and expected-value signals.","tags":["Edge"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}},{"name":"type","in":"query","required":false,"description":"Edge type.","schema":{"type":"string","enum":["arbitrage","value","ev"]}},{"name":"minProfit","in":"query","required":false,"description":"Minimum arbitrage profit percentage.","schema":{"type":"number","minimum":0}},{"name":"minEdge","in":"query","required":false,"description":"Minimum value edge percentage.","schema":{"type":"number","minimum":0}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}},{"name":"page","in":"query","required":false,"description":"One-based page number.","schema":{"type":"integer","minimum":1,"default":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/edge/value":{"get":{"operationId":"listValueBets","summary":"List value bets","description":"Returns offers where the MoneyLine model probability exceeds market probability.","tags":["Edge"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}},{"name":"minEdge","in":"query","required":false,"description":"Minimum value edge percentage.","schema":{"type":"number","minimum":0}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/edge/ev":{"get":{"operationId":"listEvBets","summary":"List positive-EV bets","description":"Returns offers with positive expected value at the current price.","tags":["Edge"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/edge/arbitrage":{"get":{"operationId":"listArbitrageBets","summary":"List arbitrage opportunities","description":"Returns approved multi-venue positions with a positive guaranteed return.","tags":["Edge"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}},{"name":"minProfit","in":"query","required":false,"description":"Minimum guaranteed profit percentage.","schema":{"type":"number","minimum":0}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/events/{eventId}/edge":{"get":{"operationId":"getEventEdges","summary":"Get event edges","description":"Returns edge calculations for one event.","tags":["Edge"],"parameters":[{"name":"eventId","in":"path","required":true,"description":"Canonical MoneyLine event ID.","schema":{"type":"string","minLength":1}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/best-bets":{"get":{"operationId":"listBestBets","summary":"List best bets","description":"Returns the best currently available price for eligible market outcomes.","tags":["Best Bets"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"bookmaker","in":"query","required":false,"description":"Filter by canonical bookmaker key or bookmaker name.","schema":{"type":"string"}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}},{"name":"page","in":"query","required":false,"description":"One-based page number.","schema":{"type":"integer","minimum":1,"default":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/events/{eventId}/best-bets":{"get":{"operationId":"getEventBestBets","summary":"Get event best bets","description":"Returns the best available prices for one event.","tags":["Best Bets"],"parameters":[{"name":"eventId","in":"path","required":true,"description":"Canonical MoneyLine event ID.","schema":{"type":"string","minLength":1}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"bookmaker","in":"query","required":false,"description":"Filter by canonical bookmaker key or bookmaker name.","schema":{"type":"string"}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/players":{"get":{"operationId":"listPlayers","summary":"List players","description":"Returns canonical players, optionally filtered by league or team.","tags":["Players"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"team","in":"query","required":false,"description":"Canonical team ID.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Maximum player records to return.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"page","in":"query","required":false,"description":"One-based page number.","schema":{"type":"integer","minimum":1,"default":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Player"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/players/{playerId}":{"get":{"operationId":"getPlayer","summary":"Get a player","description":"Returns canonical player details.","tags":["Players"],"parameters":[{"name":"playerId","in":"path","required":true,"description":"Canonical MoneyLine player ID.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Player"}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/players/{playerId}/stats":{"get":{"operationId":"getPlayerStats","summary":"Get player statistics","description":"Returns season summaries or game logs filtered by event or date window.","tags":["Players"],"parameters":[{"name":"playerId","in":"path","required":true,"description":"Canonical MoneyLine player ID.","schema":{"type":"string","minLength":1}},{"name":"type","in":"query","required":false,"description":"Statistic record type.","schema":{"type":"string","enum":["season","game"]}},{"name":"season","in":"query","required":false,"description":"Season identifier.","schema":{"type":"string"}},{"name":"date","in":"query","required":false,"description":"Calendar date in YYYY-MM-DD format.","schema":{"type":"string","format":"date"}},{"name":"from","in":"query","required":false,"description":"Inclusive start date.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Inclusive end date.","schema":{"type":"string","format":"date"}},{"name":"eventId","in":"query","required":false,"description":"Canonical event ID.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"oneOf":[{"type":"array","items":{"type":"object","additionalProperties":true}},{"type":"object","additionalProperties":true}]}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/players/{playerId}/hit-rates":{"get":{"operationId":"getPlayerHitRates","summary":"Get player hit rates","description":"Computes L5, L10, L25, and season hit rates against a prop line.","tags":["Players"],"parameters":[{"name":"playerId","in":"path","required":true,"description":"Canonical MoneyLine player ID.","schema":{"type":"string","minLength":1}},{"name":"market","in":"query","required":true,"description":"Canonical player-prop market key.","schema":{"type":"string"}},{"name":"line","in":"query","required":true,"description":"Prop threshold to evaluate.","schema":{"type":"number"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/players/trending":{"get":{"operationId":"listTrendingPlayers","summary":"List trending players","description":"Ranks active player props by recent hit-rate windows.","tags":["Players"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}},{"name":"sortBy","in":"query","required":false,"description":"Hit-rate window used for ranking.","schema":{"type":"string","enum":["l5","l10","l25","season"],"default":"l5"}},{"name":"direction","in":"query","required":false,"description":"Prop direction.","schema":{"type":"string","enum":["over","under"],"default":"over"}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}},{"name":"page","in":"query","required":false,"description":"One-based page number.","schema":{"type":"integer","minimum":1,"default":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/players/trends":{"get":{"operationId":"listPlayerTrends","summary":"List profitable player trends","description":"Returns each player's strongest active flat-stake prop trend.","tags":["Players"],"parameters":[{"name":"league","in":"query","required":false,"description":"Filter by canonical MoneyLine league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"window","in":"query","required":false,"description":"Rolling game window.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},{"name":"bookmaker","in":"query","required":false,"description":"Filter by canonical bookmaker key or bookmaker name.","schema":{"type":"string"}},{"name":"sourceType","in":"query","required":false,"description":"Restrict results to a venue type.","schema":{"type":"string","enum":["all","sportsbook","dfs","exchange"],"default":"all"}},{"name":"limit","in":"query","required":false,"description":"Maximum records to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}},{"name":"page","in":"query","required":false,"description":"One-based page number.","schema":{"type":"integer","minimum":1,"default":1}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/players/{playerId}/analysis":{"get":{"operationId":"getPlayerAnalysis","summary":"Get integrated player analysis","description":"Returns the best available prop, hit rates, and chart-ready game data for a player.","tags":["Players"],"parameters":[{"name":"playerId","in":"path","required":true,"description":"Canonical MoneyLine player ID.","schema":{"type":"string","minLength":1}},{"name":"market","in":"query","required":true,"description":"Canonical player-prop market key.","schema":{"type":"string"}},{"name":"window","in":"query","required":false,"description":"Analysis window.","schema":{"type":"string","enum":["l5","l10","l25","season"],"default":"l5"}},{"name":"season","in":"query","required":false,"description":"Season identifier.","schema":{"type":"string"}},{"name":"date","in":"query","required":false,"description":"Calendar date in YYYY-MM-DD format.","schema":{"type":"string","format":"date"}},{"name":"from","in":"query","required":false,"description":"Inclusive start date.","schema":{"type":"string","format":"date"}},{"name":"to","in":"query","required":false,"description":"Inclusive end date.","schema":{"type":"string","format":"date"}},{"name":"eventId","in":"query","required":false,"description":"Canonical event ID.","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/v1/ai/chat":{"post":{"operationId":"chatWithMoneyLineAi","summary":"Generate a MoneyLine-grounded betting response","description":"Resolves natural-language betting intent against MoneyLine data and returns a stable presentation contract. Set stream=true to receive Server-Sent Events.","tags":["MoneyLine AI"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AiChatRequest"}}}},"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}},"text/event-stream":{"schema":{"type":"string"},"description":"Server-Sent Events when request body stream is true. The result event contains the same final envelope as a non-streaming response."}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/public/players":{"get":{"operationId":"listPublicPlayers","summary":"List public player pages","description":"Returns indexable player-page summaries without API-key authentication.","tags":["Public Data"],"parameters":[{"name":"league","in":"query","required":true,"description":"Canonical league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}}],"security":[],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PublicPlayerSummary"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/public/players/{league}/{slug}":{"get":{"operationId":"getPublicPlayer","summary":"Get a public player page","description":"Returns public player profile and hit-rate content without API-key authentication.","tags":["Public Data"],"parameters":[{"name":"league","in":"path","required":true,"description":"Canonical league ID.","schema":{"type":"string","minLength":1}},{"name":"slug","in":"path","required":true,"description":"Public player slug.","schema":{"type":"string","minLength":1}}],"security":[],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/public/teams":{"get":{"operationId":"listPublicTeams","summary":"List public team pages","description":"Returns indexable team-page summaries without API-key authentication.","tags":["Public Data"],"parameters":[{"name":"league","in":"query","required":true,"description":"Canonical league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}}],"security":[],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PublicTeamSummary"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/public/teams/{league}/{slug}":{"get":{"operationId":"getPublicTeam","summary":"Get a public team page","description":"Returns public team, roster, and schedule content without API-key authentication.","tags":["Public Data"],"parameters":[{"name":"league","in":"path","required":true,"description":"Canonical league ID.","schema":{"type":"string","minLength":1}},{"name":"slug","in":"path","required":true,"description":"Public team slug.","schema":{"type":"string","minLength":1}}],"security":[],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/public/hit-rates":{"get":{"operationId":"listPublicHitRates","summary":"List public hit rates","description":"Returns a public hit-rate leaderboard without API-key authentication.","tags":["Public Data"],"parameters":[{"name":"league","in":"query","required":true,"description":"Canonical league ID.","schema":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},{"name":"market","in":"query","required":false,"description":"Filter by canonical market key, such as moneyline or player_points.","schema":{"type":"string"}}],"security":[],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/blog/posts":{"get":{"operationId":"listPublishedPosts","summary":"List published posts","description":"Returns published generated articles without API-key authentication.","tags":["Public Data"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Maximum records to return.","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}},{"name":"page","in":"query","required":false,"description":"One-based page number.","schema":{"type":"integer","minimum":1,"default":1}}],"security":[],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BlogPostSummary"}}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/blog/posts/{slug}":{"get":{"operationId":"getPublishedPost","summary":"Get a published post","description":"Returns one published generated article without API-key authentication.","tags":["Public Data"],"parameters":[{"name":"slug","in":"path","required":true,"description":"Published article slug.","schema":{"type":"string","minLength":1}}],"security":[],"responses":{"200":{"description":"Successful response.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"type":"object","additionalProperties":true}}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/":{"get":{"operationId":"discoverMoneyLineApi","summary":"Discover MoneyLine API resources","description":"Returns canonical links for documentation, OpenAPI, llms.txt, authentication, and public data.","tags":["Discovery"],"security":[],"responses":{"200":{"description":"API discovery document.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/SuccessEnvelope"},{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Discovery"}}}]}}}}}}},"/health":{"get":{"operationId":"getHealth","summary":"Check API health","description":"Returns a lightweight service-health response.","tags":["Discovery"],"security":[],"responses":{"200":{"description":"Service is healthy.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/llms.txt":{"get":{"operationId":"getLlmReference","summary":"Get the full LLM-readable API reference","description":"Returns the backward-compatible, detailed MoneyLine API reference as plain text Markdown.","tags":["Discovery"],"security":[],"responses":{"200":{"description":"LLM-readable API reference.","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/openapi.json":{"get":{"operationId":"getOpenApiDocument","summary":"Get the OpenAPI document","description":"Returns this OpenAPI 3.1 document.","tags":["Discovery"],"security":[],"responses":{"200":{"description":"OpenAPI document.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}}},"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"MoneyLine API key created at https://www.moneylineapp.com/dashboard/keys."}},"responses":{"BadRequest":{"description":"Invalid request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"Unauthorized":{"description":"Missing, invalid, or revoked API key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"NotFound":{"description":"Resource not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"RateLimited":{"description":"Per-minute rate limit or monthly credit limit reached.","headers":{"Retry-After":{"description":"Seconds until the current rate-limit window resets.","schema":{"type":"integer","minimum":0}},"X-RateLimit-Limit":{"description":"Requests allowed in the current window.","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}},"InternalError":{"description":"Unexpected server error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}}}},"schemas":{"SuccessEnvelope":{"type":"object","required":["success","data","meta","error"],"properties":{"success":{"type":"boolean","const":true},"data":{},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"error":{"type":"null"}}},"ErrorEnvelope":{"type":"object","required":["success","data","meta","error"],"properties":{"success":{"type":"boolean","const":false},"data":{"type":"null"},"meta":{"$ref":"#/components/schemas/ResponseMeta"},"error":{"type":"object","required":["message","statusCode","code"],"properties":{"message":{"type":"string"},"statusCode":{"type":"integer","minimum":400,"maximum":599},"code":{"type":"string","pattern":"^ERR_[A-Z0-9_]+$"},"hint":{"type":"string","description":"Optional safe recovery guidance."},"details":{}}}}},"ResponseMeta":{"type":"object","required":["requestId"],"properties":{"requestId":{"type":"string","pattern":"^ml_req_"},"count":{"type":"integer","minimum":0},"total":{"type":"integer","minimum":0},"page":{"type":"integer","minimum":1},"pages":{"type":"integer","minimum":0},"creditUsage":{"type":"object","additionalProperties":true}},"additionalProperties":true},"League":{"type":"object","required":["leagueId"],"properties":{"leagueId":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]},"name":{"type":"string"},"sport":{"type":"string"},"abbreviation":{"type":"string"}},"additionalProperties":true},"Team":{"type":"object","required":["teamId","name"],"properties":{"teamId":{"type":"string"},"leagueId":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]},"name":{"type":"string"},"abbreviation":{"type":"string"}},"additionalProperties":true},"Player":{"type":"object","required":["playerId","name"],"properties":{"playerId":{"type":"string"},"leagueId":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]},"teamId":{"type":["string","null"]},"name":{"type":"string"},"position":{"type":["string","null"]},"teamAbbr":{"type":["string","null"]},"teamName":{"type":["string","null"]}},"additionalProperties":true},"Event":{"type":"object","required":["eventId","leagueId","startTime","status"],"properties":{"eventId":{"type":"string"},"leagueId":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]},"sport":{"type":"string"},"homeTeamId":{"type":["string","null"]},"homeTeamName":{"type":"string"},"awayTeamId":{"type":["string","null"]},"awayTeamName":{"type":"string"},"startTime":{"type":"string","format":"date-time"},"status":{"type":"string"},"isStub":{"type":"boolean"}},"additionalProperties":true},"OddsEvent":{"type":"object","required":["eventId","leagueId"],"properties":{"eventId":{"type":"string"},"leagueId":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]},"bookmakers":{"type":"array","items":{"type":"object","additionalProperties":true}}},"additionalProperties":true},"Bookmaker":{"type":"object","required":["bookmakerId","bookmakerName","sourceType"],"properties":{"bookmakerId":{"type":"string"},"bookmakerName":{"type":"string"},"sourceType":{"type":"string","enum":["sportsbook","dfs","exchange"]},"sourceRegion":{"type":"string"}},"additionalProperties":true},"AiChatRequest":{"type":"object","required":["messages"],"properties":{"messages":{"type":"array","minItems":1,"maxItems":6,"items":{"type":"object","required":["role","content"],"properties":{"role":{"type":"string","enum":["user","assistant"]},"content":{"type":"string","minLength":1}},"additionalProperties":false}},"context":{"type":"string","enum":["best_bets","ev_bets","arbitrage","event_best_available_bet","parlay","line_movement","line_shopping"]},"scope":{"type":"string","enum":["small","medium","large"],"default":"small"},"responseFormat":{"type":"string","enum":["natural","hybrid","structured"],"default":"hybrid"},"stream":{"type":"boolean","default":false},"filters":{"type":"object","properties":{"league":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]},"leagues":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}},"market":{"type":"string"},"sourceType":{"type":"string","enum":["all","sportsbook","dfs","exchange"]},"bookmaker":{"type":"string"},"bookmakers":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string"}}},"additionalProperties":false},"referencedBet":{"type":"object","additionalProperties":true}},"additionalProperties":false},"PublicPlayerSummary":{"type":"object","required":["slug","name","league"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"team":{"type":["string","null"]},"league":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}}},"PublicTeamSummary":{"type":"object","required":["slug","name","league"],"properties":{"slug":{"type":"string"},"name":{"type":"string"},"abbr":{"type":["string","null"]},"league":{"type":"string","enum":["nfl","nba","mlb","nhl","ncaa_football","ncaa_basketball","epl","mls","fifa_world_cup"]}}},"BlogPostSummary":{"type":"object","required":["slug","title"],"properties":{"slug":{"type":"string"},"title":{"type":"string"},"metaDescription":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"wordCount":{"type":"integer","minimum":0}},"additionalProperties":true},"Discovery":{"type":"object","required":["name","version","documentation","openapi","llms","authentication"],"properties":{"name":{"type":"string","const":"MoneyLine API"},"version":{"type":"string"},"documentation":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"llms":{"type":"string","format":"uri"},"authentication":{"type":"string","format":"uri"},"publicData":{"type":"array","items":{"type":"string","format":"uri-reference"}}}},"Health":{"type":"object","required":["status","timestamp"],"properties":{"status":{"type":"string","const":"ok"},"timestamp":{"type":"string","format":"date-time"}}}}}}