{
  "components": {
    "responses": {
      "PaymentRequired": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "accepts": {
                  "items": {
                    "additionalProperties": true,
                    "type": "object"
                  },
                  "type": "array"
                },
                "error": {
                  "type": "string"
                },
                "resource": {
                  "properties": {
                    "mimeType": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                },
                "x402Version": {
                  "example": 2,
                  "type": "integer"
                }
              },
              "required": [
                "x402Version",
                "accepts"
              ],
              "type": "object"
            }
          }
        },
        "description": "Payment Required: no API key and no valid payment. The body and the PAYMENT-REQUIRED header (base64 JSON) carry the x402 offers; pay one and repeat the request with PAYMENT-SIGNATURE. Only a 200 answer is charged.",
        "headers": {
          "PAYMENT-REQUIRED": {
            "description": "Base64 JSON of the x402 offers",
            "schema": {
              "type": "string"
            }
          }
        }
      }
    },
    "schemas": {
      "database.EventPlayer": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "database.HorseRacingName": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "last_race_date": {
            "description": "YYYY-MM-DD",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "runners": {
            "description": "declared runners in our data",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "database.LeagueInfo": {
        "properties": {
          "divisions": {
            "description": "Divisions: the separate competitions the data provider files under this one id\n(soccer only, e.g. the five Regionalliga divisions). Filter matches of\none division with league_name.",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "gid": {
            "type": "integer"
          },
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "name_source": {
            "enum": [
              "official",
              "wikidata",
              "provider",
              "admin"
            ],
            "type": "string"
          },
          "official_name": {
            "description": "OfficialName: the competition's name without country and stage, from\nthe official source, Wikidata or the data provider (NameSource); stable when a\nsponsor renames the league. Name stays the provider's (\"Country: League\"),\nthe value the league_name filters take.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "database.MatchEvent": {
        "properties": {
          "assist": {
            "$ref": "#/components/schemas/database.EventPlayer"
          },
          "detail": {
            "description": "Detail: a card's reason, \"injury\" for an injury substitution, a VAR\nreview's outcome (\"Goal cancelled\").",
            "type": "string"
          },
          "extra_minute": {
            "type": "integer"
          },
          "kind": {
            "type": "string"
          },
          "minute": {
            "description": "null: the feed gave no minute",
            "type": "integer"
          },
          "on_field_decision": {
            "description": "VAR: the referee's decision reviewed",
            "type": "string"
          },
          "player": {
            "$ref": "#/components/schemas/database.EventPlayer"
          },
          "player_in": {
            "$ref": "#/components/schemas/database.EventPlayer"
          },
          "player_out": {
            "$ref": "#/components/schemas/database.EventPlayer"
          },
          "team": {
            "description": "home or away",
            "type": "string"
          },
          "team_id": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "database.TVChannel": {
        "properties": {
          "channel": {
            "type": "string"
          },
          "country": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "database.TennisLeagueInfo": {
        "properties": {
          "category_id": {
            "type": "integer"
          },
          "category_name": {
            "type": "string"
          },
          "discipline": {
            "type": "string"
          },
          "stage": {
            "type": "string"
          },
          "surface": {
            "type": "string"
          },
          "tour": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "database.TopScorer": {
        "properties": {
          "assists": {
            "type": "integer"
          },
          "goals": {
            "type": "integer"
          },
          "penalty_goals": {
            "type": "integer"
          },
          "player_id": {
            "type": "integer"
          },
          "player_name": {
            "type": "string"
          },
          "position": {
            "type": "integer"
          },
          "red_cards": {
            "type": "integer"
          },
          "team_id": {
            "type": "integer"
          },
          "team_name": {
            "type": "string"
          },
          "yellow_cards": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.AddedTime": {
        "properties": {
          "first_half": {
            "type": "integer"
          },
          "second_half": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.AmericanFootballMatchResponse": {
        "properties": {
          "away_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "events": {
            "type": "object"
          },
          "file_group": {
            "type": "string"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "id": {
            "type": "integer"
          },
          "league_gid": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "quarter_scores": {
            "$ref": "#/components/schemas/dto.QuarterScores"
          },
          "sport": {
            "type": "string"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "timer": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.BaseballInningScores": {
        "properties": {
          "errors": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "extra": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "hits": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "in1": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "in2": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "in3": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "in4": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "in5": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "in6": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "in7": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "in8": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "in9": {
            "$ref": "#/components/schemas/dto.ScorePair"
          }
        },
        "type": "object"
      },
      "dto.BaseballMatchResponse": {
        "properties": {
          "away_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "extra_innings": {
            "type": "integer"
          },
          "file_group": {
            "type": "string"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "id": {
            "type": "integer"
          },
          "inning_scores": {
            "$ref": "#/components/schemas/dto.BaseballInningScores"
          },
          "league_gid": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "sport": {
            "type": "string"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.BasketballMatchResponse": {
        "properties": {
          "away_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "file_group": {
            "type": "string"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "id": {
            "type": "integer"
          },
          "league_gid": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "quarter_scores": {
            "$ref": "#/components/schemas/dto.QuarterScores"
          },
          "sport": {
            "type": "string"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "timer": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.BoxingBoutResponse": {
        "properties": {
          "card": {
            "type": "string"
          },
          "date": {
            "type": "string"
          },
          "event": {
            "$ref": "#/components/schemas/dto.WikiTournamentRef"
          },
          "fighter1": {
            "$ref": "#/components/schemas/dto.WikiPlayerRef"
          },
          "fighter2": {
            "$ref": "#/components/schemas/dto.WikiPlayerRef"
          },
          "id": {
            "type": "integer"
          },
          "method": {
            "type": "string"
          },
          "result": {
            "type": "string"
          },
          "round": {
            "type": "integer"
          },
          "scheduled_rounds": {
            "type": "integer"
          },
          "time": {
            "type": "string"
          },
          "titles": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "weight_class": {
            "type": "string"
          },
          "winner": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.BoxingEventResponse": {
        "properties": {
          "attribution": {
            "type": "string"
          },
          "bouts": {
            "items": {
              "$ref": "#/components/schemas/dto.BoxingBoutResponse"
            },
            "type": "array"
          },
          "city": {
            "type": "string"
          },
          "date": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "kind": {
            "type": "string"
          },
          "main_event_winner": {
            "$ref": "#/components/schemas/dto.WikiPlayerRef"
          },
          "name": {
            "type": "string"
          },
          "season": {
            "description": "year",
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "venue": {
            "type": "string"
          },
          "wikipedia_article": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.BriefingLineups": {
        "properties": {
          "coaches": {
            "type": "object"
          },
          "expected": {
            "additionalProperties": {
              "$ref": "#/components/schemas/dto.ExpectedLineupBasis"
            },
            "type": "object"
          },
          "lineup_type": {
            "description": "confirmed or expected",
            "type": "string"
          },
          "lineups": {
            "type": "object"
          }
        },
        "type": "object"
      },
      "dto.BriefingResponse": {
        "properties": {
          "after_match": {
            "description": "form, streaks and records include this match",
            "type": "boolean"
          },
          "completeness": {
            "$ref": "#/components/schemas/insights.Completeness"
          },
          "facts": {
            "items": {
              "$ref": "#/components/schemas/insights.Fact"
            },
            "type": "array"
          },
          "form": {
            "$ref": "#/components/schemas/insights.Pair-array_insights_FormEntry"
          },
          "head_to_head": {
            "$ref": "#/components/schemas/insights.HeadToHead"
          },
          "injuries": {
            "items": {
              "$ref": "#/components/schemas/insights.Injury"
            },
            "type": "array"
          },
          "lineup_type": {
            "description": "confirmed, expected or \"\"",
            "type": "string"
          },
          "lineups": {
            "$ref": "#/components/schemas/dto.BriefingLineups"
          },
          "match": {
            "description": "Match: soccer as /soccer/matches/{id} serves it; other sports as BriefingMatch."
          },
          "records": {
            "$ref": "#/components/schemas/insights.Pair-insights_Records"
          },
          "schedule": {
            "$ref": "#/components/schemas/insights.Pair-insights_Schedule"
          },
          "sport": {
            "type": "string"
          },
          "story": {
            "allOf": [
              {
                "$ref": "#/components/schemas/insights.Story"
              }
            ],
            "description": "a played match: goals, red cards"
          },
          "streaks": {
            "$ref": "#/components/schemas/insights.Pair-array_insights_Streak"
          },
          "table": {
            "$ref": "#/components/schemas/insights.TableContext"
          }
        },
        "type": "object"
      },
      "dto.CricketInnings": {
        "properties": {
          "overs": {
            "type": "string"
          },
          "runs": {
            "type": "integer"
          },
          "wickets": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.CricketMatchResponse": {
        "properties": {
          "attribution": {
            "description": "Matches from Cricsheet's history (before the provider's feeds): the\nnotice its licence (ODC-BY) asks for.",
            "type": "string"
          },
          "away_team": {
            "$ref": "#/components/schemas/dto.CricketTeam"
          },
          "end_date": {
            "type": "string"
          },
          "format": {
            "description": "Test, First-class, ODI, T20...",
            "type": "string"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.CricketTeam"
          },
          "id": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "match_num": {
            "type": "string"
          },
          "result": {
            "type": "string"
          },
          "season": {
            "type": "string"
          },
          "sport": {
            "type": "string"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "toss": {
            "type": "string"
          },
          "toss_winner_id": {
            "type": "integer"
          },
          "venue": {
            "type": "string"
          },
          "winner_id": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.CricketTeam": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "innings": {
            "items": {
              "$ref": "#/components/schemas/dto.CricketInnings"
            },
            "type": "array"
          },
          "name": {
            "type": "string"
          },
          "score": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.EsportsMatchResponse": {
        "properties": {
          "attribution": {
            "description": "Attribution is set on a Valorant match from Liquipedia, and on a\nwalkover whose winner came from it.",
            "type": "string"
          },
          "away_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "best_of": {
            "type": "integer"
          },
          "game": {
            "description": "cs2, dota2, lol...",
            "type": "string"
          },
          "has_maps": {
            "description": "maps or games with player lines at /matches/{id}/maps",
            "type": "boolean"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "id": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "description": "\"CS2: ESL Pro League Playoffs\"",
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "description": "NS, Started, Pause, Finished, WO, Postponed, Canceled",
            "type": "string"
          },
          "winner": {
            "description": "Winner: home or away, for a finished series (the higher score) and a\nwalkover whose winner is known (WO is stored 0-0; winner_source\nliquipedia when Liquipedia gave it).",
            "type": "string"
          },
          "winner_source": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.ExpectedLineupBasis": {
        "properties": {
          "based_on_date": {
            "type": "string"
          },
          "based_on_match_id": {
            "type": "integer"
          },
          "removed": {
            "description": "listed as missing for this match",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "dto.GolfLineResponse": {
        "properties": {
          "earnings": {
            "type": "integer"
          },
          "holes": {
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "player": {
            "$ref": "#/components/schemas/dto.GolfPlayerRef"
          },
          "position": {
            "type": "integer"
          },
          "rounds": {
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "stats": {
            "description": "birdies, eagles, pars, bogeys, double_bogeys, driving_distance, driving_accuracy_pct, gir_pct, putts_per_gir, saves_pct",
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "status": {
            "description": "active, finished, cut, wd",
            "type": "string"
          },
          "thru": {
            "type": "string"
          },
          "tied": {
            "type": "boolean"
          },
          "to_par": {
            "type": "integer"
          },
          "today": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          },
          "tournament": {
            "$ref": "#/components/schemas/dto.GolfTournamentResponse"
          }
        },
        "type": "object"
      },
      "dto.GolfPlayerRef": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.GolfPlayerResponse": {
        "properties": {
          "birth_date": {
            "type": "string"
          },
          "birth_place": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "pga_rank": {
            "type": "integer"
          },
          "profile_earnings": {
            "description": "the provider's figure",
            "type": "integer"
          },
          "results": {
            "items": {
              "$ref": "#/components/schemas/dto.GolfLineResponse"
            },
            "type": "array"
          },
          "season": {
            "type": "integer"
          },
          "season_summary": {
            "$ref": "#/components/schemas/dto.GolfSeasonSummary"
          }
        },
        "type": "object"
      },
      "dto.GolfSeasonSummary": {
        "properties": {
          "cuts_made": {
            "type": "integer"
          },
          "earnings": {
            "type": "integer"
          },
          "events": {
            "type": "integer"
          },
          "top10s": {
            "type": "integer"
          },
          "wins": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.GolfTournamentResponse": {
        "properties": {
          "attribution": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "course": {
            "type": "string"
          },
          "current_round": {
            "type": "integer"
          },
          "earnings_complete": {
            "description": "EarningsComplete (finished only): every top-3 line has earnings and\nthey add up to 90 % of the purse; false: some are missing upstream.",
            "type": "boolean"
          },
          "end_date": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "leaderboard": {
            "items": {
              "$ref": "#/components/schemas/dto.GolfLineResponse"
            },
            "type": "array"
          },
          "leaders": {
            "items": {
              "$ref": "#/components/schemas/dto.GolfPlayerRef"
            },
            "type": "array"
          },
          "location": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "par": {
            "type": "integer"
          },
          "par_source": {
            "description": "Sources of values not from provider: par_source wikipedia (the\nevent's course) or leaderboard (our totals minus to-par), purse_source\nwikipedia, result_source wikipedia (a playoff winner the data provider never\nposted, an LPGA leaderboard, earnings the data provider left empty);\nAttribution is set when one is wikipedia.",
            "type": "string"
          },
          "players": {
            "type": "integer"
          },
          "purse": {
            "type": "integer"
          },
          "purse_source": {
            "type": "string"
          },
          "result_source": {
            "type": "string"
          },
          "rounds": {
            "type": "integer"
          },
          "season": {
            "type": "integer"
          },
          "start_date": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "status_detail": {
            "description": "\"Round 3 - In Progress\"",
            "type": "string"
          },
          "tour": {
            "description": "pga, lpga",
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.HalfScores": {
        "properties": {
          "t1": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "t2": {
            "$ref": "#/components/schemas/dto.ScorePair"
          }
        },
        "type": "object"
      },
      "dto.HandballMatchResponse": {
        "properties": {
          "away_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "file_group": {
            "type": "string"
          },
          "half_scores": {
            "$ref": "#/components/schemas/dto.HalfScores"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "id": {
            "type": "integer"
          },
          "league_gid": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "sport": {
            "type": "string"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.HockeyMatchResponse": {
        "properties": {
          "away_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "events": {
            "type": "object"
          },
          "file_group": {
            "type": "string"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "id": {
            "type": "integer"
          },
          "league_gid": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "period_scores": {
            "$ref": "#/components/schemas/dto.PeriodScores"
          },
          "sport": {
            "type": "string"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "timer": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.HorseRacingBookmakerResponse": {
        "properties": {
          "id": {
            "example": 3,
            "type": "integer"
          },
          "logo_url": {
            "type": "string"
          },
          "name": {
            "example": "William Hill",
            "type": "string"
          },
          "slug": {
            "example": "william-hill",
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.HorseRacingEachWay": {
        "properties": {
          "fraction": {
            "example": "1/5",
            "type": "string"
          },
          "places": {
            "example": 3,
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.HorseRacingJockeyInfo": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.HorseRacingMeetingInfo": {
        "properties": {
          "date": {
            "description": "Date is the local card date (YYYY-MM-DD). It can precede the UTC\nrace_date when a card runs past midnight UTC.",
            "type": "string"
          },
          "going": {
            "type": "string"
          },
          "id": {
            "description": "ID is the the data provider racecourse id. It is reused every day the course\nraces, so a meeting is identified by (id, date).",
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "region": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.HorseRacingMorningLine": {
        "properties": {
          "decimal": {
            "example": 2.8,
            "type": "number"
          },
          "fractional": {
            "example": "9/5",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.HorseRacingQuote": {
        "properties": {
          "bookmaker_id": {
            "description": "BookmakerID is our stable registry id (see GET /horse-racing/bookmakers).",
            "example": 3,
            "type": "integer"
          },
          "decimal": {
            "description": "Decimal odds; null unless price_type is \"fixed\".",
            "example": 2.75,
            "type": "number"
          },
          "each_way": {
            "$ref": "#/components/schemas/dto.HorseRacingEachWay"
          },
          "fractional": {
            "description": "Fractional odds as displayed by UK bookmakers; null when unknown.",
            "example": "7/4",
            "type": "string"
          },
          "name": {
            "example": "William Hill",
            "type": "string"
          },
          "price_type": {
            "description": "PriceType is \"fixed\" (a price), \"sp\" (starting price only) or \"none\"\n(not priced yet).",
            "enum": [
              "fixed",
              "sp",
              "none"
            ],
            "example": "fixed",
            "type": "string"
          },
          "slug": {
            "example": "william-hill",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.HorseRacingRaceResponse": {
        "properties": {
          "distance": {
            "type": "string"
          },
          "each_way": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.HorseRacingEachWay"
              }
            ],
            "description": "EachWay is the most common each-way terms across bookmakers; individual\nbookmakers may offer different terms (see each quote's each_way)."
          },
          "id": {
            "type": "integer"
          },
          "meeting": {
            "$ref": "#/components/schemas/dto.HorseRacingMeetingInfo"
          },
          "purse": {
            "type": "string"
          },
          "race_class": {
            "type": "string"
          },
          "race_date": {
            "description": "RaceDate and StartTime are UTC.",
            "example": "2026-09-12",
            "type": "string"
          },
          "race_name": {
            "type": "string"
          },
          "results_final": {
            "description": "ResultsFinal is true once every declared runner is accounted for as a\nfinisher, a non-finisher or a non-runner.",
            "type": "boolean"
          },
          "runners": {
            "items": {
              "$ref": "#/components/schemas/dto.HorseRacingRunnerResponse"
            },
            "type": "array"
          },
          "runners_count": {
            "type": "integer"
          },
          "sport": {
            "type": "string"
          },
          "start_time": {
            "example": "13:15",
            "type": "string"
          },
          "start_utc": {
            "description": "StartUTC is the scheduled off-time in ISO 8601 UTC.",
            "example": "2026-09-12T13:15:00Z",
            "type": "string"
          },
          "status": {
            "description": "Status: NS (not started), live (off within the last 30 minutes, no\nresults yet), result_pending (off more than 30 minutes ago, no results\nyet), FT (results published). the data provider sends no called-off signal, so an\nabandoned race stays result_pending.",
            "enum": [
              "NS",
              "live",
              "result_pending",
              "FT"
            ],
            "type": "string"
          },
          "surface": {
            "type": "string"
          },
          "updated_at": {
            "description": "UpdatedAt is when the race or any of its runners last changed (UTC, RFC 3339).",
            "example": "2026-09-12T09:20:00Z",
            "type": "string"
          },
          "wagers": {
            "type": "object"
          }
        },
        "type": "object"
      },
      "dto.HorseRacingRunnerOdds": {
        "properties": {
          "best": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.HorseRacingQuote"
              }
            ],
            "description": "Best is the highest fixed decimal price among Bookmakers; null when none is fixed."
          },
          "bookmakers": {
            "items": {
              "$ref": "#/components/schemas/dto.HorseRacingQuote"
            },
            "type": "array"
          },
          "updated_at": {
            "description": "UpdatedAt is when our sync first saw these prices (UTC, RFC 3339).\nthe data provider publishes no price timestamp.",
            "example": "2026-09-12T09:20:00Z",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.HorseRacingRunnerResponse": {
        "properties": {
          "age": {
            "type": "string"
          },
          "distance": {
            "type": "string"
          },
          "gender": {
            "type": "string"
          },
          "horse_name": {
            "type": "string"
          },
          "id": {
            "description": "ID is the the data provider horse id.",
            "type": "integer"
          },
          "jockey": {
            "$ref": "#/components/schemas/dto.HorseRacingJockeyInfo"
          },
          "morning_line": {
            "$ref": "#/components/schemas/dto.HorseRacingMorningLine"
          },
          "number": {
            "description": "Number is the saddle-cloth number; outcome codes never appear here.",
            "type": "string"
          },
          "odds": {
            "$ref": "#/components/schemas/dto.HorseRacingRunnerOdds"
          },
          "race_id": {
            "type": "integer"
          },
          "rating": {
            "type": "string"
          },
          "recent_form": {
            "type": "object"
          },
          "result": {
            "$ref": "#/components/schemas/dto.HorseRacingRunnerResult"
          },
          "stall": {
            "type": "string"
          },
          "status": {
            "description": "Status is \"runner\", \"non_runner\" (withdrawn) or \"did_not_finish\".",
            "enum": [
              "runner",
              "non_runner",
              "did_not_finish"
            ],
            "type": "string"
          },
          "trainer": {
            "$ref": "#/components/schemas/dto.HorseRacingTrainerInfo"
          },
          "updated_at": {
            "description": "UpdatedAt is when anything about this runner last changed (UTC, RFC 3339).",
            "example": "2026-09-12T09:20:00Z",
            "type": "string"
          },
          "weight": {
            "type": "string"
          },
          "weight_lbs": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.HorseRacingRunnerResult": {
        "properties": {
          "dead_heat": {
            "description": "DeadHeat is true when the runner shares its position with another.",
            "type": "boolean"
          },
          "distance": {
            "type": "string"
          },
          "finish_code": {
            "description": "FinishCode is set when the runner did not finish: PU (pulled up),\nF (fell), U/UR (unseated), B/BD (brought down), RR/RO (refused/ran out),\nS (slipped), and other upstream codes.",
            "example": "PU",
            "type": "string"
          },
          "position": {
            "description": "Position is null when the runner did not finish.",
            "type": "integer"
          },
          "sp": {
            "type": "string"
          },
          "sp_decimal": {
            "example": 3.5,
            "type": "number"
          },
          "time": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.HorseRacingTrainerInfo": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.MMABoutResponse": {
        "properties": {
          "attribution": {
            "type": "string"
          },
          "event_id": {
            "type": "integer"
          },
          "fighter1": {
            "$ref": "#/components/schemas/dto.MMAFighterRef"
          },
          "fighter2": {
            "$ref": "#/components/schemas/dto.MMAFighterRef"
          },
          "id": {
            "type": "integer"
          },
          "judges_scores": {
            "description": "\"29-28\", one per judge",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "main_card": {
            "type": "boolean"
          },
          "main_event": {
            "type": "boolean"
          },
          "method": {
            "type": "string"
          },
          "method_detail": {
            "description": "Punches, Rear Naked Choke",
            "type": "string"
          },
          "order": {
            "type": "integer"
          },
          "result_source": {
            "description": "ResultSource: the data provider, or wikipedia where the result (winner,\nmethod, round, time, scores) is the event article's: the data provider had\nnone, it was changed after the event (overturned), or the data provider does\nnot list the bout. Attribution is set then.",
            "type": "string"
          },
          "round": {
            "description": "the round it ended in",
            "type": "integer"
          },
          "start": {
            "description": "UTC",
            "type": "string"
          },
          "stats": {
            "description": "fighter1, fighter2: strikes by target (total, power), knockdowns, takedowns, submissions, control time",
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "status": {
            "description": "scheduled, live, finished, cancelled, postponed",
            "type": "string"
          },
          "time": {
            "description": "time in that round, \"4:07\"",
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "weight_class": {
            "type": "string"
          },
          "winner": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.MMAEventResponse": {
        "properties": {
          "attribution": {
            "description": "Attribution: set when a result shown comes from Wikipedia.",
            "type": "string"
          },
          "bouts": {
            "type": "integer"
          },
          "card": {
            "items": {
              "$ref": "#/components/schemas/dto.MMABoutResponse"
            },
            "type": "array"
          },
          "date": {
            "description": "the event's (US) date",
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "main_event": {
            "$ref": "#/components/schemas/dto.MMABoutResponse"
          },
          "name": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.MMAFighterRef": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.MatchStatsResponse": {
        "properties": {
          "feed_match_id": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "source": {
            "type": "string"
          },
          "sport": {
            "type": "string"
          },
          "stats": {
            "type": "object"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.MeetingResponse": {
        "properties": {
          "going": {
            "type": "string"
          },
          "meeting_date": {
            "type": "string"
          },
          "meeting_id": {
            "type": "integer"
          },
          "meeting_name": {
            "type": "string"
          },
          "region": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.NamedRef": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "wikidata_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.PeriodScores": {
        "properties": {
          "ot": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "p1": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "p2": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "p3": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "penalties": {
            "$ref": "#/components/schemas/dto.ScorePair"
          }
        },
        "type": "object"
      },
      "dto.PlayByPlayResponse": {
        "properties": {
          "feed_match_id": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "play_by_play": {
            "type": "object"
          },
          "sport": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.PlayerBioResponse": {
        "properties": {
          "age": {
            "description": "Age: from the birth date on today's date, else as the squad feed has it.",
            "type": "integer"
          },
          "birth_date": {
            "description": "YYYY-MM-DD",
            "type": "string"
          },
          "club": {
            "$ref": "#/components/schemas/dto.NamedRef"
          },
          "full_name": {
            "description": "first and last name from the profile",
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "known_as": {
            "description": "the name the feeds use",
            "type": "string"
          },
          "market_value_eur": {
            "type": "integer"
          },
          "nationality": {
            "type": "string"
          },
          "number": {
            "type": "integer"
          },
          "photo_url": {
            "type": "string"
          },
          "position": {
            "description": "Position: goalkeeper, defender, midfielder or forward.",
            "type": "string"
          },
          "short_name": {
            "description": "ShortName: the profile's common name (\"E. Haaland\").",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.PlayerResponse": {
        "properties": {
          "age": {
            "type": "integer"
          },
          "attribution": {
            "type": "string"
          },
          "bio": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.PlayerBioResponse"
              }
            ],
            "description": "Bio (soccer, only on /players/{id}): the normalised profile (full\nand short name, birth date and age, position, number, club, market\nvalue); profile above stays the feed's sections as sent."
          },
          "birthdate": {
            "description": "From the soccer player profile.",
            "type": "string"
          },
          "details": {
            "description": "Details: the feed's other attributes, as sent (season stats, height,\nweight, college, injured...); keys differ per sport.",
            "type": "object"
          },
          "filled_from_wikidata": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "height": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "market_value_eur": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "nationality": {
            "type": "string"
          },
          "number": {
            "type": "string"
          },
          "photo_url": {
            "description": "PhotoURL: the player's photo on this API (image licence not included).",
            "type": "string"
          },
          "position": {
            "type": "string"
          },
          "preferred_foot": {
            "type": "string"
          },
          "profile": {
            "description": "Profile: as sent, only on /players/{id}. Soccer: career statistics,\ntransfers, trophies, sidelined. Tennis: birthplace, residence, plays,\ncareer_high, earnings, recent results and tournaments.",
            "type": "object"
          },
          "rank": {
            "type": "integer"
          },
          "rank_movement": {
            "description": "up, down or same since the last list",
            "type": "string"
          },
          "rank_points": {
            "type": "integer"
          },
          "rating": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.TeamRatingResponse"
              }
            ],
            "description": "Rating (tennis, only on /players/{id}): the player's Elo-style rating\nfrom our results (docs/ratings.md)."
          },
          "season": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.PlayerSeasonResponse"
              }
            ],
            "description": "Season (soccer, only on /players/{id}): the current season in every\ncompetition we hold statistics for, summed and per competition."
          },
          "sport": {
            "type": "string"
          },
          "team_id": {
            "type": "integer"
          },
          "tour": {
            "description": "Tennis singles ranking (atp or wta), when the player is in it.",
            "type": "string"
          },
          "transfers": {
            "description": "Transfers (soccer, only on /players/{id}): the profile's transfers\nnormalised, latest first.",
            "items": {
              "$ref": "#/components/schemas/dto.TransferResponse"
            },
            "type": "array"
          },
          "updated_at": {
            "type": "string"
          },
          "weight": {
            "type": "string"
          },
          "wikidata": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.WikiPlayerProfile"
              }
            ],
            "description": "Wikidata: the player's Wikidata values (cricket, tennis; only on\n/players/{id}); birthdate, height and nationality above are filled\nfrom it only where the feed has none (listed in filled_from_wikidata)."
          }
        },
        "type": "object"
      },
      "dto.PlayerSeasonResponse": {
        "properties": {
          "leagues": {
            "items": {
              "$ref": "#/components/schemas/dto.PlayerSeasonStatsResponse"
            },
            "type": "array"
          },
          "season": {
            "type": "string"
          },
          "total": {
            "$ref": "#/components/schemas/dto.PlayerSeasonStatsResponse"
          }
        },
        "type": "object"
      },
      "dto.PlayerSeasonStatsResponse": {
        "properties": {
          "apps": {
            "type": "integer"
          },
          "assists": {
            "type": "integer"
          },
          "clean_sheets": {
            "type": "integer"
          },
          "goals": {
            "type": "integer"
          },
          "goals_conceded": {
            "type": "integer"
          },
          "last_match_date": {
            "description": "the league season's latest finished match",
            "type": "string"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "matches_with_stats": {
            "type": "integer"
          },
          "minutes": {
            "type": "integer"
          },
          "own_goals": {
            "type": "integer"
          },
          "partial": {
            "description": "Partial: the season began before our live window, so the row counts\nonly its matches from then on (team_matches_played says how many).",
            "type": "boolean"
          },
          "penalty_goals": {
            "type": "integer"
          },
          "player_id": {
            "type": "integer"
          },
          "player_name": {
            "type": "string"
          },
          "rating_avg": {
            "type": "number"
          },
          "red": {
            "type": "integer"
          },
          "saves": {
            "type": "integer"
          },
          "season": {
            "type": "string"
          },
          "second_yellow": {
            "type": "integer"
          },
          "shots": {
            "type": "integer"
          },
          "shots_on_target": {
            "type": "integer"
          },
          "starts": {
            "type": "integer"
          },
          "sub_apps": {
            "type": "integer"
          },
          "team_id": {
            "type": "integer"
          },
          "team_matches_played": {
            "type": "integer"
          },
          "team_name": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "xa": {
            "type": "number"
          },
          "xg": {
            "type": "number"
          },
          "yellow": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.QuarterScores": {
        "properties": {
          "ot": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "q1": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "q2": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "q3": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "q4": {
            "$ref": "#/components/schemas/dto.ScorePair"
          }
        },
        "type": "object"
      },
      "dto.RatingHistoryResponse": {
        "properties": {
          "change": {
            "type": "number"
          },
          "date": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "opponent_id": {
            "type": "integer"
          },
          "rating": {
            "type": "number"
          }
        },
        "type": "object"
      },
      "dto.RefereeResponse": {
        "properties": {
          "country": {
            "type": "string"
          },
          "first_match_date": {
            "type": "string"
          },
          "games": {
            "type": "integer"
          },
          "last_match_date": {
            "type": "string"
          },
          "league_id": {
            "type": "integer"
          },
          "league_matches_played": {
            "type": "integer"
          },
          "league_matches_with_referee": {
            "type": "integer"
          },
          "league_matches_with_stats": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "penalties": {
            "type": "integer"
          },
          "penalties_per_game": {
            "type": "number"
          },
          "red_cards": {
            "type": "integer"
          },
          "red_per_game": {
            "type": "number"
          },
          "season": {
            "type": "string"
          },
          "second_yellows": {
            "type": "integer"
          },
          "slug": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "yellow_cards": {
            "type": "integer"
          },
          "yellow_per_game": {
            "type": "number"
          }
        },
        "type": "object"
      },
      "dto.RugbyMatchResponse": {
        "properties": {
          "away_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "has_events": {
            "description": "tries, conversions, penalties at /matches/{id}/events",
            "type": "boolean"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "id": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "minute": {
            "description": "in play",
            "type": "string"
          },
          "score_corrected": {
            "description": "The final score is a hand correction of the provider's (wrong) result.",
            "type": "boolean"
          },
          "score_correction_note": {
            "type": "string"
          },
          "scores": {
            "$ref": "#/components/schemas/dto.RugbyScores"
          },
          "season": {
            "type": "string"
          },
          "sport": {
            "type": "string"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "venue": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.RugbyScores": {
        "properties": {
          "extra_time": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "first_half": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "second_half": {
            "$ref": "#/components/schemas/dto.ScorePair"
          }
        },
        "type": "object"
      },
      "dto.ScorePair": {
        "properties": {
          "away": {
            "type": "integer"
          },
          "home": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.SoccerInjuryLeagueInfo": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.SoccerInjuryPlayerInfo": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.SoccerInjuryResponse": {
        "properties": {
          "availability": {
            "type": "string"
          },
          "expected_return": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "league": {
            "$ref": "#/components/schemas/dto.SoccerInjuryLeagueInfo"
          },
          "match_date": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "matches_missed": {
            "description": "MatchesMissed: the team's played matches before this one in which the\nplayer was listed, counted back without a gap; complete false when\nthe count reached a match the injury feed did not cover (a lower\nbound). Null without a player id.",
            "type": "integer"
          },
          "matches_missed_complete": {
            "type": "boolean"
          },
          "player": {
            "$ref": "#/components/schemas/dto.SoccerInjuryPlayerInfo"
          },
          "side": {
            "type": "string"
          },
          "since": {
            "description": "Since and ExpectedReturn (YYYY-MM-DD) from the player profile's\nsidelined list when a spell of the same type covers the match; null\nwhen unknown (the provider's lists end in September 2025, so mostly null).",
            "type": "string"
          },
          "sport": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "suspension_risk": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.SuspensionRisk"
              }
            ],
            "description": "SuspensionRisk: the player's card state in this league now (suspended,\npossibly_suspended, one_booking_away; see\n/soccer/leagues/{id}/suspensions), on rows of today's or later\nmatches; omitted without one."
          },
          "team": {
            "$ref": "#/components/schemas/dto.SoccerInjuryTeamInfo"
          },
          "type": {
            "description": "Type from the status text: injury, suspension, illness,\ninternational_duty, personal, other or unknown.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.SoccerInjuryTeamInfo": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.SoccerLineupsResponse": {
        "properties": {
          "away_team": {
            "$ref": "#/components/schemas/dto.SoccerStatsTeamInfo"
          },
          "coaches": {
            "type": "object"
          },
          "expected": {
            "additionalProperties": {
              "$ref": "#/components/schemas/dto.ExpectedLineupBasis"
            },
            "type": "object"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.SoccerStatsTeamInfo"
          },
          "league": {
            "$ref": "#/components/schemas/dto.SoccerStatsLeagueInfo"
          },
          "lineup_type": {
            "description": "LineupType is \"confirmed\" (published by the clubs, about an hour before\nkickoff) or \"expected\" (built by us from each team's last lineup\nminus players listed as missing; see expected).",
            "type": "string"
          },
          "lineups": {
            "type": "object"
          },
          "match_date": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "sources": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "fields from an official source",
            "type": "object"
          },
          "sport": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "substitutes": {
            "type": "object"
          },
          "team_colors": {
            "type": "object"
          }
        },
        "type": "object"
      },
      "dto.SoccerMatchResponse": {
        "properties": {
          "added_time": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.AddedTime"
              }
            ],
            "description": "commentaries feed (top leagues)"
          },
          "attendance": {
            "description": "commentaries feed (top leagues) or an official source",
            "type": "integer"
          },
          "away_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "events": {
            "items": {
              "type": "object"
            },
            "type": "array"
          },
          "extra_time_score": {
            "type": "string"
          },
          "fixture_id": {
            "description": "season fixtures feed id",
            "type": "integer"
          },
          "full_time_score": {
            "description": "90 minutes",
            "type": "string"
          },
          "half_time_score": {
            "type": "string"
          },
          "highlights": {
            "description": "Highlights video (YouTube) once posted, and the TV channels showing the\nmatch, by country (TheSportsDB). Every sport's match answers carry them\n(middleware.MatchMedia); listed here for the API docs.",
            "type": "string"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "id": {
            "type": "integer"
          },
          "league_gid": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "penalty_score": {
            "description": "shoot-out",
            "type": "string"
          },
          "referee": {
            "description": "commentaries feed (top leagues) or an official source",
            "type": "string"
          },
          "referee_stats": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.RefereeResponse"
              }
            ],
            "description": "RefereeStats: the referee's season in this league (match detail only;\nabsent without a referee or computed statistics)."
          },
          "round": {
            "type": "string"
          },
          "season": {
            "type": "string"
          },
          "sources": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "Sources names the official source of fields it supplied (e.g.\n{\"result\": \"dfb\", \"events\": \"dfb\"}); absent when all data is the provider's.",
            "type": "object"
          },
          "sport": {
            "type": "string"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "static_id": {
            "description": "the data provider id shared by livescore and season feeds; the stable key",
            "type": "integer"
          },
          "status": {
            "type": "string"
          },
          "timeline": {
            "description": "Timeline: the events normalised (kind goal, penalty, own_goal,\nmissed_penalty, yellow, second_yellow, red, substitution, var), from\nthe commentary summary (top leagues) or else the events above. Match\ndetail only; absent when no event is known.",
            "items": {
              "$ref": "#/components/schemas/database.MatchEvent"
            },
            "type": "array"
          },
          "tv": {
            "items": {
              "$ref": "#/components/schemas/database.TVChannel"
            },
            "type": "array"
          },
          "venue": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.SoccerMatchStatsResponse": {
        "properties": {
          "added_time": {
            "$ref": "#/components/schemas/dto.AddedTime"
          },
          "away_team": {
            "$ref": "#/components/schemas/dto.SoccerStatsTeamInfo"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.SoccerStatsTeamInfo"
          },
          "league": {
            "$ref": "#/components/schemas/dto.SoccerStatsLeagueInfo"
          },
          "match_date": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "player_stats": {
            "type": "object"
          },
          "sources": {
            "additionalProperties": {
              "type": "string"
            },
            "description": "fields from an official source",
            "type": "object"
          },
          "sport": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "static_id": {
            "type": "integer"
          },
          "stats": {
            "type": "object"
          },
          "status": {
            "type": "string"
          },
          "substitutions": {
            "type": "object"
          },
          "summary": {
            "type": "object"
          },
          "venue": {
            "$ref": "#/components/schemas/dto.SoccerStatsVenueInfo"
          }
        },
        "type": "object"
      },
      "dto.SoccerStatsLeagueInfo": {
        "properties": {
          "name": {
            "type": "string"
          },
          "ref": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.SoccerStatsTeamInfo": {
        "properties": {
          "formation": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.SoccerStatsVenueInfo": {
        "properties": {
          "attendance": {
            "type": "string"
          },
          "referee": {
            "type": "string"
          },
          "stadium": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.SportOption": {
        "properties": {
          "label": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.SquadResponse": {
        "properties": {
          "players": {
            "items": {
              "$ref": "#/components/schemas/dto.PlayerResponse"
            },
            "type": "array"
          },
          "team": {
            "$ref": "#/components/schemas/dto.TeamResponse"
          }
        },
        "type": "object"
      },
      "dto.StandingsResponse": {
        "properties": {
          "as_of": {
            "type": "string"
          },
          "attribution": {
            "type": "string"
          },
          "checked_at": {
            "type": "string"
          },
          "league_id": {
            "type": "integer"
          },
          "season": {
            "type": "string"
          },
          "source": {
            "description": "Tables from Wikipedia (rugby union, cricket bonus-point tables):\nsource \"wikipedia\", as_of the page revision's time, attribution.\nTables we compute from results where the feed has none: source\n\"computed\" (points deductions not included).\nTables from the official league or federation page: source\n\"official\", source_url the page.",
            "type": "string"
          },
          "source_url": {
            "type": "string"
          },
          "sport": {
            "type": "string"
          },
          "standings": {
            "type": "object"
          },
          "updated_at": {
            "description": "when the table last changed",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.SuspensionRisk": {
        "properties": {
          "complete": {
            "type": "boolean"
          },
          "counted_yellows": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "matches_left": {
            "type": "integer"
          },
          "matches_left_min": {
            "type": "integer"
          },
          "next_threshold": {
            "type": "integer"
          },
          "reason": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "yellow_cards": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.TableTennisMatchResponse": {
        "properties": {
          "attribution": {
            "type": "string"
          },
          "away_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "has_games": {
            "description": "singles and doubles at /matches/{id}/games",
            "type": "boolean"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "id": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "description": "\"Poland: Superliga\"",
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "round": {
            "type": "string"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "description": "NS, Live, FT, Postp., Cancl.",
            "type": "string"
          },
          "venue": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.TeamCoachResponse": {
        "properties": {
          "appointed": {
            "description": "YYYY-MM-DD",
            "type": "string"
          },
          "drawn": {
            "type": "integer"
          },
          "lost": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "played": {
            "description": "with appointed only",
            "type": "integer"
          },
          "previous_club": {
            "$ref": "#/components/schemas/dto.NamedRef"
          },
          "previous_coach": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.NamedRef"
              }
            ],
            "description": "The team's coach before this one and this coach's own team before\n(a club or national team), from Wikidata; absent when not known."
          },
          "record_complete": {
            "description": "false: our history starts after the appointment, record partial",
            "type": "boolean"
          },
          "record_from": {
            "description": "first match counted, YYYY-MM-DD",
            "type": "string"
          },
          "role": {
            "description": "e.g. caretaker",
            "type": "string"
          },
          "source": {
            "description": "Wikidata, or the data provider (name only)",
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "wikidata_id": {
            "type": "string"
          },
          "won": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.TeamInfo": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "score": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.TeamRatingResponse": {
        "properties": {
          "history": {
            "description": "/teams/{id}: the last 10 rated matches, latest first",
            "items": {
              "$ref": "#/components/schemas/dto.RatingHistoryResponse"
            },
            "type": "array"
          },
          "last_match_date": {
            "type": "string"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "matches_rated": {
            "type": "integer"
          },
          "of": {
            "type": "integer"
          },
          "peak": {
            "type": "number"
          },
          "provisional": {
            "type": "boolean"
          },
          "rank": {
            "type": "integer"
          },
          "rated_from": {
            "type": "string"
          },
          "rating": {
            "type": "number"
          },
          "team_id": {
            "type": "integer"
          },
          "team_name": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.TeamResponse": {
        "properties": {
          "abbreviation": {
            "type": "string"
          },
          "attribution": {
            "type": "string"
          },
          "coach": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.TeamCoachResponse"
              }
            ],
            "description": "Coach: the current head coach from Wikidata (soccer; only on\n/teams/{id}), with the attribution."
          },
          "coach_id": {
            "type": "integer"
          },
          "coach_name": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "founded": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "is_national": {
            "type": "boolean"
          },
          "is_women": {
            "type": "boolean"
          },
          "league_ids": {
            "description": "leagues played in during the last 120 days",
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "logo_url": {
            "description": "LogoURL: the team's logo on this API (image licence not included).",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "players_with_value": {
            "type": "integer"
          },
          "profile": {
            "description": "Profile: soccer profile sections as sent (transfers, trophies,\nsidelined, detailed_stats); only on /teams/{id}.",
            "type": "object"
          },
          "rating": {
            "allOf": [
              {
                "$ref": "#/components/schemas/dto.TeamRatingResponse"
              }
            ],
            "description": "Rating: the team's Elo-style rating with its rank in its league and\nits last 10 rated matches (only on /teams/{id}; docs/ratings.md)."
          },
          "sport": {
            "type": "string"
          },
          "squad_players": {
            "type": "integer"
          },
          "squad_value_eur": {
            "description": "Squad market value (soccer, only on /teams/{id}): the sum of the current\nsquad's market values, over players_with_value of squad_players.",
            "type": "integer"
          },
          "updated_at": {
            "type": "string"
          },
          "venue_address": {
            "type": "string"
          },
          "venue_capacity": {
            "type": "integer"
          },
          "venue_city": {
            "type": "string"
          },
          "venue_id": {
            "type": "integer"
          },
          "venue_name": {
            "type": "string"
          },
          "venue_surface": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.TennisCompetitorResponse": {
        "properties": {
          "game_score": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "member_ids": {
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "name": {
            "type": "string"
          },
          "serving": {
            "type": "boolean"
          },
          "sets_won": {
            "type": "integer"
          },
          "winner": {
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "dto.TennisH2HPlayer": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "wins": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.TennisH2HResponse": {
        "properties": {
          "matches": {
            "type": "integer"
          },
          "meetings": {
            "description": "latest first",
            "items": {
              "$ref": "#/components/schemas/dto.TennisMeeting"
            },
            "type": "array"
          },
          "player_a": {
            "$ref": "#/components/schemas/dto.TennisH2HPlayer"
          },
          "player_b": {
            "$ref": "#/components/schemas/dto.TennisH2HPlayer"
          },
          "source": {
            "description": "Source of the totals: the data provider (its whole history, read before a\ncoming ATP or WTA match) or ours (the meetings listed).",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.TennisMatchResponse": {
        "properties": {
          "category_id": {
            "type": "integer"
          },
          "category_name": {
            "type": "string"
          },
          "competitor1": {
            "$ref": "#/components/schemas/dto.TennisCompetitorResponse"
          },
          "competitor2": {
            "$ref": "#/components/schemas/dto.TennisCompetitorResponse"
          },
          "discipline": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "match_id": {
            "type": "integer"
          },
          "set_scores": {
            "$ref": "#/components/schemas/dto.TennisSetScores"
          },
          "sport": {
            "type": "string"
          },
          "stage": {
            "type": "string"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "surface": {
            "type": "string"
          },
          "tiebreak": {
            "type": "boolean"
          },
          "tour": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.TennisMeeting": {
        "properties": {
          "date": {
            "description": "YYYY-MM-DD",
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "score_a": {
            "type": "integer"
          },
          "score_b": {
            "type": "integer"
          },
          "tournament": {
            "type": "string"
          },
          "winner_id": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.TennisRankingResponse": {
        "properties": {
          "movement": {
            "description": "up, down or same since the last list",
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "nationality": {
            "type": "string"
          },
          "photo_url": {
            "type": "string"
          },
          "player_id": {
            "type": "integer"
          },
          "points": {
            "type": "integer"
          },
          "rank": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.TennisSetScore": {
        "properties": {
          "competitor1": {
            "type": "string"
          },
          "competitor2": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.TennisSetScores": {
        "properties": {
          "s1": {
            "$ref": "#/components/schemas/dto.TennisSetScore"
          },
          "s2": {
            "$ref": "#/components/schemas/dto.TennisSetScore"
          },
          "s3": {
            "$ref": "#/components/schemas/dto.TennisSetScore"
          },
          "s4": {
            "$ref": "#/components/schemas/dto.TennisSetScore"
          },
          "s5": {
            "$ref": "#/components/schemas/dto.TennisSetScore"
          }
        },
        "type": "object"
      },
      "dto.TopScorersResponse": {
        "properties": {
          "kind": {
            "type": "string"
          },
          "league_id": {
            "type": "integer"
          },
          "players": {
            "items": {
              "$ref": "#/components/schemas/database.TopScorer"
            },
            "type": "array"
          },
          "season": {
            "type": "string"
          },
          "updated_at": {
            "description": "when the list last changed",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.TransferResponse": {
        "properties": {
          "date": {
            "description": "YYYY-MM-DD",
            "type": "string"
          },
          "fee_eur": {
            "description": "only when the feed gives a number",
            "type": "integer"
          },
          "fee_text": {
            "description": "as sent, e.g. \"EUR 30.0m\"",
            "type": "string"
          },
          "from_team_id": {
            "type": "integer"
          },
          "from_team_name": {
            "type": "string"
          },
          "planned": {
            "description": "dated after today (UTC): an agreed move to come, e.g. a loan end",
            "type": "boolean"
          },
          "player_id": {
            "type": "integer"
          },
          "player_name": {
            "type": "string"
          },
          "season": {
            "description": "2026/2027: from 1 June",
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "to_team_id": {
            "type": "integer"
          },
          "to_team_name": {
            "type": "string"
          },
          "type": {
            "description": "Type: transfer, loan, loan_return, free, promoted, swap or unknown;\ntype_label as the feed writes it.",
            "type": "string"
          },
          "type_label": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "window": {
            "description": "summer, winter, other",
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.VolleyballMatchResponse": {
        "properties": {
          "away_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "file_group": {
            "type": "string"
          },
          "home_team": {
            "$ref": "#/components/schemas/dto.TeamInfo"
          },
          "id": {
            "type": "integer"
          },
          "league_gid": {
            "type": "integer"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "set_scores": {
            "$ref": "#/components/schemas/dto.VolleyballSetScores"
          },
          "sport": {
            "type": "string"
          },
          "start_date": {
            "type": "string"
          },
          "start_time": {
            "type": "string"
          },
          "status": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.VolleyballSetScores": {
        "properties": {
          "s1": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "s2": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "s3": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "s4": {
            "$ref": "#/components/schemas/dto.ScorePair"
          },
          "s5": {
            "$ref": "#/components/schemas/dto.ScorePair"
          }
        },
        "type": "object"
      },
      "dto.WikiMatchPlayer": {
        "properties": {
          "average": {
            "type": "number"
          },
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "score": {
            "type": "integer"
          },
          "seed": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.WikiMatchResponse": {
        "properties": {
          "best_of": {
            "type": "integer"
          },
          "date": {
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "player1": {
            "$ref": "#/components/schemas/dto.WikiMatchPlayer"
          },
          "player2": {
            "$ref": "#/components/schemas/dto.WikiMatchPlayer"
          },
          "round": {
            "type": "string"
          },
          "stage": {
            "description": "main, qualifying",
            "type": "string"
          },
          "tournament": {
            "$ref": "#/components/schemas/dto.WikiTournamentRef"
          },
          "unit": {
            "type": "string"
          },
          "walkover": {
            "type": "boolean"
          },
          "winner": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.WikiPlayerData": {
        "properties": {
          "birth_date": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "wikidata_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.WikiPlayerProfile": {
        "properties": {
          "birth_date": {
            "type": "string"
          },
          "bowling_style": {
            "description": "cricket",
            "type": "string"
          },
          "country": {
            "description": "country for sport, else citizenship",
            "type": "string"
          },
          "hand": {
            "description": "right, left, ambidextrous: cricket batting hand, tennis playing hand",
            "type": "string"
          },
          "height_cm": {
            "type": "integer"
          },
          "role": {
            "description": "cricket: batter, bowler, all-rounder...",
            "type": "string"
          },
          "source": {
            "type": "string"
          },
          "updated_at": {
            "type": "string"
          },
          "wikidata_id": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.WikiPlayerRef": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.WikiPlayerResponse": {
        "properties": {
          "attribution": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "external_ids": {
            "additionalProperties": {
              "type": "string"
            },
            "type": "object"
          },
          "finals": {
            "type": "integer"
          },
          "id": {
            "type": "integer"
          },
          "matches_recorded": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "rank": {
            "type": "integer"
          },
          "rank_points": {
            "type": "integer"
          },
          "recent_matches": {
            "items": {
              "$ref": "#/components/schemas/dto.WikiMatchResponse"
            },
            "type": "array"
          },
          "titles": {
            "type": "integer"
          },
          "wikidata": {
            "$ref": "#/components/schemas/dto.WikiPlayerData"
          },
          "wikipedia_article": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "dto.WikiRankingLine": {
        "properties": {
          "country": {
            "description": "flag code (ENG, CHN)",
            "type": "string"
          },
          "player": {
            "$ref": "#/components/schemas/dto.WikiPlayerRef"
          },
          "points": {
            "type": "integer"
          },
          "position": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "dto.WikiRankingResponse": {
        "properties": {
          "as_of": {
            "type": "string"
          },
          "attribution": {
            "type": "string"
          },
          "rankings": {
            "items": {
              "$ref": "#/components/schemas/dto.WikiRankingLine"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "dto.WikiTournamentRef": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "season": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "handlers.HeadToHeadResponse": {
        "properties": {
          "facts": {
            "items": {
              "$ref": "#/components/schemas/insights.Fact"
            },
            "type": "array"
          },
          "head_to_head": {
            "allOf": [
              {
                "$ref": "#/components/schemas/insights.HeadToHead"
              }
            ],
            "description": "home_team = team_a, away_team = team_b"
          },
          "team_a": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "team_b": {
            "$ref": "#/components/schemas/insights.TeamRef"
          }
        },
        "type": "object"
      },
      "handlers.HorseRacingBriefingResponse": {
        "properties": {
          "after_race": {
            "type": "boolean"
          },
          "as_of": {
            "type": "string"
          },
          "distance": {
            "type": "string"
          },
          "facts": {
            "items": {
              "$ref": "#/components/schemas/insights.Fact"
            },
            "type": "array"
          },
          "favourites": {
            "description": "joint favourites share the price",
            "items": {
              "$ref": "#/components/schemas/insights.RaceFavourite"
            },
            "type": "array"
          },
          "field_size": {
            "type": "integer"
          },
          "going": {
            "type": "string"
          },
          "history_from": {
            "description": "HistoryFrom: form and strike rates only count our results since this day.",
            "type": "string"
          },
          "non_runners": {
            "type": "integer"
          },
          "race": {
            "$ref": "#/components/schemas/dto.HorseRacingRaceResponse"
          },
          "race_class": {
            "type": "string"
          },
          "result": {
            "$ref": "#/components/schemas/insights.RaceOutcome"
          },
          "runners": {
            "items": {
              "$ref": "#/components/schemas/insights.RunnerBriefing"
            },
            "type": "array"
          },
          "sport": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "handlers.HorseRacingFormResponse": {
        "properties": {
          "form": {
            "description": "Form: the horse's figures over these runs, oldest left (horses only).",
            "type": "string"
          },
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "runs": {
            "items": {
              "$ref": "#/components/schemas/handlers.HorseRacingRunResponse"
            },
            "type": "array"
          },
          "subject": {
            "enum": [
              "horse",
              "jockey",
              "trainer"
            ],
            "type": "string"
          },
          "summary": {
            "$ref": "#/components/schemas/handlers.HorseRacingFormSummary"
          }
        },
        "type": "object"
      },
      "handlers.HorseRacingFormSummary": {
        "properties": {
          "runs": {
            "type": "integer"
          },
          "strike_rate": {
            "description": "wins per run in %",
            "type": "number"
          },
          "top_three": {
            "type": "integer"
          },
          "wins": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "handlers.HorseRacingRunResponse": {
        "properties": {
          "course": {
            "type": "string"
          },
          "date": {
            "type": "string"
          },
          "dead_heat": {
            "type": "boolean"
          },
          "distance": {
            "type": "string"
          },
          "field_size": {
            "type": "integer"
          },
          "finish_code": {
            "type": "string"
          },
          "going": {
            "type": "string"
          },
          "horse": {
            "$ref": "#/components/schemas/dto.HorseRacingJockeyInfo"
          },
          "jockey": {
            "$ref": "#/components/schemas/dto.HorseRacingJockeyInfo"
          },
          "position": {
            "description": "null: did not finish",
            "type": "integer"
          },
          "race_class": {
            "type": "string"
          },
          "race_id": {
            "type": "integer"
          },
          "race_name": {
            "type": "string"
          },
          "region": {
            "type": "string"
          },
          "sp": {
            "type": "string"
          },
          "sp_decimal": {
            "type": "number"
          },
          "time": {
            "type": "string"
          },
          "trainer": {
            "$ref": "#/components/schemas/dto.HorseRacingTrainerInfo"
          }
        },
        "type": "object"
      },
      "handlers.MatchFactsItem": {
        "properties": {
          "away_score": {
            "type": "integer"
          },
          "away_team": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "date": {
            "type": "string"
          },
          "facts": {
            "items": {
              "$ref": "#/components/schemas/insights.Fact"
            },
            "type": "array"
          },
          "home_score": {
            "type": "integer"
          },
          "home_team": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "league_id": {
            "type": "integer"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "updated_at": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "handlers.TeamFactsResponse": {
        "properties": {
          "as_of": {
            "type": "string"
          },
          "facts": {
            "items": {
              "$ref": "#/components/schemas/insights.Fact"
            },
            "type": "array"
          },
          "history_from": {
            "type": "string"
          },
          "results_complete": {
            "type": "boolean"
          },
          "sport": {
            "type": "string"
          },
          "team": {
            "$ref": "#/components/schemas/insights.TeamRef"
          }
        },
        "type": "object"
      },
      "insights.Completeness": {
        "properties": {
          "as_of": {
            "type": "string"
          },
          "away_results_complete": {
            "type": "boolean"
          },
          "history_from": {
            "type": "string"
          },
          "home_results_complete": {
            "type": "boolean"
          },
          "team_ids": {
            "description": "false: the data provider sent no team ids, only names",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "insights.Congestion": {
        "properties": {
          "games_last_14d": {
            "type": "integer"
          },
          "games_last_7d": {
            "type": "integer"
          },
          "last_match_date": {
            "type": "string"
          },
          "next_match_date": {
            "type": "string"
          },
          "rest_days": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "insights.Fact": {
        "properties": {
          "based_on": {
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "history_from": {
            "type": "string"
          },
          "importance": {
            "type": "integer"
          },
          "incomplete": {
            "description": "a match without a result cuts it: no sentence",
            "type": "boolean"
          },
          "opponent": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "player_id": {
            "type": "integer"
          },
          "since": {
            "type": "string"
          },
          "team": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "team_id": {
            "description": "Flat fields for consumers that do not read values: the team's and\nplayer's id, the fact's main number, the day a run or \"first since\"\nreaches back to, and the start of our data (no claim reaches further).",
            "type": "integer"
          },
          "text": {
            "type": "string"
          },
          "type": {
            "type": "string"
          },
          "value": {
            "type": "integer"
          },
          "values": {
            "additionalProperties": {},
            "type": "object"
          }
        },
        "type": "object"
      },
      "insights.Fixture": {
        "properties": {
          "away_team": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "date": {
            "type": "string"
          },
          "home_team": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "insights.FormEntry": {
        "properties": {
          "date": {
            "type": "string"
          },
          "decided_on_penalties": {
            "type": "boolean"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "opponent": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "result": {
            "description": "W, D, L; \"?\" for a match without a result",
            "type": "string"
          },
          "score": {
            "type": "string"
          },
          "venue": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "insights.HeadToHead": {
        "properties": {
          "away_team_goals": {
            "type": "integer"
          },
          "away_team_wins": {
            "type": "integer"
          },
          "biggest_away_team_win": {
            "$ref": "#/components/schemas/insights.Meeting"
          },
          "biggest_home_team_win": {
            "$ref": "#/components/schemas/insights.Meeting"
          },
          "draws": {
            "type": "integer"
          },
          "history_from": {
            "description": "our results start here: no claim reaches further back",
            "type": "string"
          },
          "home_team_goals": {
            "description": "Goals over the counted meetings, and each side's biggest win (largest\nmargin, the latest of equal ones; a shoot-out is no win).",
            "type": "integer"
          },
          "home_team_wins": {
            "type": "integer"
          },
          "meetings": {
            "description": "latest first, at most 5",
            "items": {
              "$ref": "#/components/schemas/insights.Meeting"
            },
            "type": "array"
          },
          "meetings_without_result": {
            "description": "Meetings in the past without a result: the counts leave them out, so a\nsummary is incomplete; LatestMissing: the most recent one is among them.",
            "type": "integer"
          },
          "played": {
            "description": "all meetings in our data",
            "type": "integer"
          }
        },
        "type": "object"
      },
      "insights.Injury": {
        "properties": {
          "availability": {
            "description": "to_miss or questionable",
            "type": "string"
          },
          "lineups": {
            "type": "integer"
          },
          "player": {
            "type": "string"
          },
          "player_id": {
            "type": "integer"
          },
          "reason": {
            "type": "string"
          },
          "season_goals": {
            "description": "Why the player matters (filled from our data, soccer only).",
            "type": "integer"
          },
          "starts": {
            "description": "starts in the team's last Lineups confirmed lineups",
            "type": "integer"
          },
          "team_id": {
            "type": "integer"
          },
          "top_scorer": {
            "description": "the team's top scorer (ties count)",
            "type": "boolean"
          }
        },
        "type": "object"
      },
      "insights.Meeting": {
        "properties": {
          "away_team": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "date": {
            "type": "string"
          },
          "decided_on_penalties": {
            "type": "boolean"
          },
          "home_team": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "league_name": {
            "type": "string"
          },
          "match_id": {
            "type": "integer"
          },
          "score": {
            "description": "home-away",
            "type": "string"
          }
        },
        "type": "object"
      },
      "insights.Pair-array_insights_FormEntry": {
        "properties": {
          "away": {
            "items": {
              "$ref": "#/components/schemas/insights.FormEntry"
            },
            "type": "array"
          },
          "home": {
            "items": {
              "$ref": "#/components/schemas/insights.FormEntry"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "insights.Pair-array_insights_Streak": {
        "properties": {
          "away": {
            "items": {
              "$ref": "#/components/schemas/insights.Streak"
            },
            "type": "array"
          },
          "home": {
            "items": {
              "$ref": "#/components/schemas/insights.Streak"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "insights.Pair-insights_Records": {
        "properties": {
          "away": {
            "$ref": "#/components/schemas/insights.Records"
          },
          "home": {
            "$ref": "#/components/schemas/insights.Records"
          }
        },
        "type": "object"
      },
      "insights.Pair-insights_Schedule": {
        "properties": {
          "away": {
            "$ref": "#/components/schemas/insights.Schedule"
          },
          "home": {
            "$ref": "#/components/schemas/insights.Schedule"
          }
        },
        "type": "object"
      },
      "insights.RaceFavourite": {
        "properties": {
          "decimal": {
            "type": "number"
          },
          "horse": {
            "type": "string"
          },
          "horse_id": {
            "type": "integer"
          },
          "source": {
            "description": "sp, best_price or morning_line",
            "type": "string"
          }
        },
        "type": "object"
      },
      "insights.RaceOutcome": {
        "properties": {
          "favourite_won": {
            "description": "FavouriteWon is null without a favourite.",
            "type": "boolean"
          },
          "winners": {
            "items": {
              "$ref": "#/components/schemas/insights.RaceWinner"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "insights.RacePerson": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "last_30_days": {
            "$ref": "#/components/schemas/insights.Record30"
          },
          "name": {
            "type": "string"
          },
          "strike_rate": {
            "description": "wins per run in %, from StrikeRateMin runs",
            "type": "number"
          }
        },
        "type": "object"
      },
      "insights.RaceRun": {
        "properties": {
          "course": {
            "type": "string"
          },
          "date": {
            "description": "YYYY-MM-DD (UTC race date)",
            "type": "string"
          },
          "distance": {
            "type": "string"
          },
          "field_size": {
            "type": "integer"
          },
          "finish_code": {
            "type": "string"
          },
          "going": {
            "type": "string"
          },
          "position": {
            "description": "0: no position (did not finish)",
            "type": "integer"
          },
          "race_id": {
            "type": "integer"
          },
          "sp": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "insights.RaceWinner": {
        "properties": {
          "horse": {
            "type": "string"
          },
          "horse_id": {
            "type": "integer"
          },
          "sp": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "insights.Record": {
        "properties": {
          "drawn": {
            "type": "integer"
          },
          "goals_against": {
            "type": "integer"
          },
          "goals_for": {
            "type": "integer"
          },
          "lost": {
            "type": "integer"
          },
          "played": {
            "type": "integer"
          },
          "won": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "insights.Record30": {
        "properties": {
          "runs": {
            "type": "integer"
          },
          "top_three": {
            "type": "integer"
          },
          "wins": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "insights.Records": {
        "properties": {
          "away": {
            "$ref": "#/components/schemas/insights.Record"
          },
          "home": {
            "$ref": "#/components/schemas/insights.Record"
          },
          "matches_without_result": {
            "description": "Computed records: league matches since the season start without a\nresult (the records are then incomplete and stated by no sentence).",
            "type": "integer"
          },
          "overall": {
            "$ref": "#/components/schemas/insights.Record"
          },
          "source": {
            "description": "the data provider (league table) or computed (our results)",
            "type": "string"
          }
        },
        "type": "object"
      },
      "insights.Row": {
        "properties": {
          "away": {
            "$ref": "#/components/schemas/insights.Record"
          },
          "goal_difference": {
            "type": "integer"
          },
          "home": {
            "$ref": "#/components/schemas/insights.Record"
          },
          "overall": {
            "$ref": "#/components/schemas/insights.Record"
          },
          "points": {
            "type": "integer"
          },
          "position": {
            "type": "integer"
          },
          "recent_form": {
            "type": "string"
          },
          "team": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "zone": {
            "description": "continental, promotion, playoff, relegation, relegation_round, other",
            "type": "string"
          },
          "zone_label": {
            "description": "the label as stored",
            "type": "string"
          },
          "zone_target": {
            "description": "what the zone leads to, as the league writes it",
            "type": "string"
          }
        },
        "type": "object"
      },
      "insights.RunnerBriefing": {
        "properties": {
          "form": {
            "description": "our results, oldest left, latest right: 1-9, 0 = 10th or worse, a letter = did not finish",
            "type": "string"
          },
          "horse": {
            "type": "string"
          },
          "horse_id": {
            "type": "integer"
          },
          "jockey": {
            "$ref": "#/components/schemas/insights.RacePerson"
          },
          "last_run": {
            "$ref": "#/components/schemas/insights.RaceRun"
          },
          "non_runner": {
            "type": "boolean"
          },
          "number": {
            "type": "string"
          },
          "runs_in_our_data": {
            "type": "integer"
          },
          "trainer": {
            "$ref": "#/components/schemas/insights.RacePerson"
          }
        },
        "type": "object"
      },
      "insights.Schedule": {
        "properties": {
          "days_since_last_match": {
            "description": "-1: no earlier match in our data",
            "type": "integer"
          },
          "matches_last_14_days": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "insights.Story": {
        "properties": {
          "complete": {
            "description": "goal events, each with a minute, add up to the final score",
            "type": "boolean"
          },
          "goals": {
            "items": {
              "$ref": "#/components/schemas/insights.StoryRow"
            },
            "type": "array"
          },
          "red_cards": {
            "items": {
              "$ref": "#/components/schemas/insights.StoryRow"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "insights.StoryRow": {
        "properties": {
          "minute": {
            "type": "string"
          },
          "player": {
            "type": "string"
          },
          "score": {
            "description": "home-away after the event (goals) or at it (cards)",
            "type": "string"
          },
          "team": {
            "description": "home or away",
            "type": "string"
          }
        },
        "type": "object"
      },
      "insights.Streak": {
        "properties": {
          "based_on": {
            "items": {
              "type": "integer"
            },
            "type": "array"
          },
          "incomplete": {
            "description": "cut by a match without a result",
            "type": "boolean"
          },
          "length": {
            "type": "integer"
          },
          "type": {
            "description": "wins, losses, clean_sheets, no_goals, unbeaten, winless, scoring",
            "type": "string"
          },
          "venue": {
            "description": "\"\" overall, \"home\", \"away\"",
            "type": "string"
          }
        },
        "type": "object"
      },
      "insights.TableContext": {
        "properties": {
          "away": {
            "$ref": "#/components/schemas/insights.TeamTable"
          },
          "group": {
            "type": "string"
          },
          "home": {
            "$ref": "#/components/schemas/insights.TeamTable"
          },
          "leader": {
            "$ref": "#/components/schemas/insights.Row"
          },
          "matches_without_result": {
            "description": "Computed tables: league matches since the season start without a\nresult; the table is then incomplete and stated by no sentence.",
            "type": "integer"
          },
          "points": {
            "description": "the table ranks by points (else by win percentage)",
            "type": "boolean"
          },
          "same_table": {
            "type": "boolean"
          },
          "source": {
            "description": "the data provider or computed",
            "type": "string"
          },
          "teams": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "insights.TeamBriefing": {
        "properties": {
          "completeness": {
            "properties": {
              "as_of": {
                "type": "string"
              },
              "history_from": {
                "type": "string"
              },
              "results_complete": {
                "type": "boolean"
              }
            },
            "type": "object"
          },
          "congestion": {
            "allOf": [
              {
                "$ref": "#/components/schemas/insights.Congestion"
              }
            ],
            "description": "fixture load: games in the last 7 and 14 days, rest days before the next match"
          },
          "facts": {
            "items": {
              "$ref": "#/components/schemas/insights.Fact"
            },
            "type": "array"
          },
          "form": {
            "items": {
              "$ref": "#/components/schemas/insights.FormEntry"
            },
            "type": "array"
          },
          "injuries": {
            "items": {
              "$ref": "#/components/schemas/insights.Injury"
            },
            "type": "array"
          },
          "last_match": {
            "$ref": "#/components/schemas/insights.Meeting"
          },
          "league_name": {
            "description": "the league the table and records are about",
            "type": "string"
          },
          "next_match": {
            "$ref": "#/components/schemas/insights.Fixture"
          },
          "next_matches": {
            "description": "the next 5 in every competition, soonest first",
            "items": {
              "$ref": "#/components/schemas/insights.Fixture"
            },
            "type": "array"
          },
          "records": {
            "$ref": "#/components/schemas/insights.Records"
          },
          "sport": {
            "type": "string"
          },
          "streaks": {
            "items": {
              "$ref": "#/components/schemas/insights.Streak"
            },
            "type": "array"
          },
          "table": {
            "$ref": "#/components/schemas/insights.TableContext"
          },
          "team": {
            "$ref": "#/components/schemas/insights.TeamRef"
          }
        },
        "type": "object"
      },
      "insights.TeamRef": {
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "insights.TeamTable": {
        "properties": {
          "away": {
            "$ref": "#/components/schemas/insights.Record"
          },
          "games_behind": {
            "description": "Tables without points (basketball, baseball...): games behind the leader.",
            "type": "number"
          },
          "goal_difference": {
            "type": "integer"
          },
          "group_leader": {
            "allOf": [
              {
                "$ref": "#/components/schemas/insights.TeamRef"
              }
            ],
            "description": "The leader of this team's group (another group than the opponent's when\nthey play in different conferences or divisions)."
          },
          "home": {
            "$ref": "#/components/schemas/insights.Record"
          },
          "overall": {
            "$ref": "#/components/schemas/insights.Record"
          },
          "points": {
            "type": "integer"
          },
          "points_above_danger": {
            "description": "points ahead of the highest danger place (outside it)",
            "type": "integer"
          },
          "points_behind_leader": {
            "description": "0 for the leader",
            "type": "integer"
          },
          "points_behind_top_zone": {
            "type": "integer"
          },
          "points_to_safety": {
            "description": "points behind the lowest safe place (inside danger)",
            "type": "integer"
          },
          "position": {
            "type": "integer"
          },
          "recent_form": {
            "type": "string"
          },
          "team": {
            "$ref": "#/components/schemas/insights.TeamRef"
          },
          "zone": {
            "description": "continental, promotion, playoff, relegation, relegation_round, other",
            "type": "string"
          },
          "zone_label": {
            "description": "the label as stored",
            "type": "string"
          },
          "zone_target": {
            "description": "what the zone leads to, as the league writes it",
            "type": "string"
          }
        },
        "type": "object"
      },
      "middleware.ErrorInfo": {
        "properties": {
          "code": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "middleware.MetaInfo": {
        "properties": {
          "attribution": {
            "description": "Attribution a data source's licence asks for (Cricsheet's history).",
            "type": "string"
          },
          "limit": {
            "type": "integer"
          },
          "offset": {
            "type": "integer"
          },
          "total": {
            "type": "integer"
          }
        },
        "type": "object"
      },
      "middleware.Response": {
        "properties": {
          "data": {},
          "error": {
            "$ref": "#/components/schemas/middleware.ErrorInfo"
          },
          "meta": {
            "$ref": "#/components/schemas/middleware.MetaInfo"
          },
          "success": {
            "type": "boolean"
          }
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "ApiKeyAuth": {
        "description": "API key",
        "in": "header",
        "name": "X-API-Key",
        "type": "apiKey"
      },
      "BearerAuth": {
        "description": "The same API key as a bearer token",
        "scheme": "bearer",
        "type": "http"
      },
      "x402": {
        "description": "x402 v2 payment (USDC on Base, eip155:8453) built from the offers of a 402 answer; see https://api.sportstatsapi.com/.well-known/x402",
        "in": "header",
        "name": "PAYMENT-SIGNATURE",
        "type": "apiKey"
      }
    }
  },
  "externalDocs": {
    "description": "x402 payment offers and prices",
    "url": "https://api.sportstatsapi.com/.well-known/x402"
  },
  "info": {
    "contact": {
      "name": "SportStatsAPI",
      "url": "https://sportstatsapi.com"
    },
    "description": "The endpoints an AI agent can call without signing up, paying per call in USDC on Base (x402, no API key): lists, live scores, standings, teams, players, match details and ready briefings. Each operation lists its price in x-x402; with an API key the same calls are covered by its plan.\n\nAuthentication: an API key (header X-API-Key, or Authorization: Bearer \u003ckey\u003e), or without a key an x402 payment (header PAYMENT-SIGNATURE, USDC on Base). Prices and payment offers: https://api.sportstatsapi.com/.well-known/x402. Docs for AI models: https://api.sportstatsapi.com/llms.txt. MCP server: https://mcp.sportstatsapi.com/mcp.",
    "summary": "Sports data API and x402 pay-per-call endpoints",
    "title": "SportStatsAPI for AI agents",
    "version": "1.0"
  },
  "openapi": "3.1.0",
  "paths": {
    "/american-football/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Finished matches of the last days with their new facts: the match story (comebacks, late winners, red cards), runs that started, grew or ended, table places and zones. Each fact also as a sentence (lang de, es, it, fr). Newest first; poll with since (the last item's updated_at). Facts only, no predictions.",
        "operationId": "getAmericanFootballFacts",
        "parameters": [
          {
            "description": "League id",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches updated after this time (RFC 3339)",
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only facts with at least this importance (0-100, default 50)",
            "in": "query",
            "name": "min_importance",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Matches (default 50, max 200)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/handlers.MatchFactsItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Facts feed: what finished matches changed",
        "tags": [
          "insights"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/american-football/h2h/{a}/{b}": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Every meeting of two teams in our data (friendlies left out), any team sport with results: won, drawn and lost from team a's side (home_team_* = team a, away_team_* = team b), goals (the sport's score: points, runs, sets won in volleyball, maps in esports), each side's biggest win (largest margin), the last 5 meetings, and history_from (our data starts there: nothing is claimed before). Meetings without a result are counted apart. With sentences (lang de, es, it, fr). Facts only. Tennis: /tennis/h2h/{a}/{b} (players).",
        "operationId": "getAmericanFootballH2hByAByB",
        "parameters": [
          {
            "description": "Team A ID",
            "in": "path",
            "name": "a",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Team B ID",
            "in": "path",
            "name": "b",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HeadToHeadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Head-to-head of two teams (all competitions)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/american-football/leagues": {
      "get": {
        "description": "Returns a list of all available American football leagues",
        "operationId": "getAmericanFootballLeagues",
        "parameters": [
          {
            "description": "Filter to leagues with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get American football leagues",
        "tags": [
          "american-football"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/american-football/leagues/{id}/standings": {
      "get": {
        "description": "Returns a league's table as the data provider sends it for that sport: soccer with position, form and overall/home/away records; NBA, NHL, MLB, NFL and NCAA by conference and division; other leagues as one table; cricket: computed from the results (IPL, BBL, The Hundred, PSL, CPL, SA20, T20 Blast, County Championship, Sheffield Shield, Ranji Trophy...), with the points rules in rules and groups per group or division. Where the data provider has no usable table, the current table of the Wikipedia season article is served as it stands (rugby union: Premiership, Top 14, URC, Super Rugby, Six Nations; cricket with bonus points and deductions: County Championship, Sheffield Shield, World Test Championship), with source wikipedia, as_of (the time of the page revision) and the attribution in data and meta. Read again a few minutes after each of the league's matches finishes, and weekly. 404 for leagues without a table (cups, uncovered leagues).",
        "operationId": "getAmericanFootballLeaguesByIdStandings",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.StandingsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league standings",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/american-football/matches": {
      "get": {
        "description": "Returns a paginated list of American football matches with optional filtering",
        "operationId": "getAmericanFootballMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (Not Started, Finished, 1st Quarter, 2nd Quarter, Half Time, 3rd Quarter, 4th Quarter, Overtime)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.AmericanFootballMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List American football matches",
        "tags": [
          "american-football"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/american-football/matches/live": {
      "get": {
        "description": "Returns all currently live American football matches",
        "operationId": "getAmericanFootballMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.AmericanFootballMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live American football matches",
        "tags": [
          "american-football"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/american-football/matches/{id}": {
      "get": {
        "description": "Returns a single American football match by its match ID",
        "operationId": "getAmericanFootballMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.AmericanFootballMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get American football match by ID",
        "tags": [
          "american-football"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/american-football/matches/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Ready context for one match, computed from stored results and tables: last-5 form, current streaks (overall and at the venue), season home and away records, head-to-head in our data, table position, gaps and zones, stakes (first against second, top-3 clash, relegation clash, local derby, what a win means against the leader's current points), schedule load, injuries and lineups; soccer before kickoff also suspended_out and one_booking_from_ban (league card rules, complete cards only). Every statement is also a fact with a sentence (lang=de, es, it, fr; default English). Facts only: no predictions. A fact marked incomplete (a match without a result inside its window) has no sentence. format=md returns Markdown.",
        "operationId": "getAmericanFootballMatchesByIdBriefing",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Match briefing (all sports)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/american-football/matches/{id}/play-by-play": {
      "get": {
        "description": "Play-by-play of a match from the provider's play-by-play feeds, as sent for that sport: NFL and NCAA football (drives with every play: clock, down and distance, yards, description), NBA, NCAA basketball, NHL, MLB, and tennis point by point (top matches). Read every 2 minutes while the league has a game on; 404 for matches without play-by-play.",
        "operationId": "getAmericanFootballMatchesByIdPlayByPlay",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayByPlayResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get match play-by-play",
        "tags": [
          "stats"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/american-football/matches/{id}/stats": {
      "get": {
        "description": "Returns the box score of a match from the provider's per-league stats feeds, as the data provider sends it for that sport.\nBasketball (NBA, NCAA, WNBA, Euroleague, ACB, Eurocup, KBL and every other league the data provider has box scores for): team_stats, player_stats (starters and bench).\nHockey (NHL, KHL, Liiga, SHL, DEL, Czech Extraliga and every other league the data provider has box scores for): scoring and penalties by period, team and player stats.\nBaseball (MLB; the data provider sends none for KBO and NPB): starting_pitchers, stats (hitters, pitchers), events, umpires.\nTennis (top matches): player, with service/return/points stats for the match and each set.\nAmerican football (NFL, NCAA FBS): team_stats, passing, rushing, receiving, defensive, kicking, punting, returns, fumbles, interceptions, events.\nStats are fetched from kickoff until shortly after the end (leagues without a live box-score feed: from the league season file, which gets a game after it ends and can miss games); 404 for matches without a box score.",
        "operationId": "getAmericanFootballMatchesByIdStats",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.MatchStatsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get match statistics (box score)",
        "tags": [
          "stats"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/american-football/players/{id}": {
      "get": {
        "description": "Cricket and tennis players matched to Wikidata (cricket by the Cricinfo id, tennis by name, country, tour and birth year) also have wikidata: birth date, height, hand (cricket batting hand, tennis playing hand), bowling style and role (cricket), country; the feed's empty birthdate, height and nationality are filled from it (filled_from_wikidata), with the attribution (Wikidata, CC0) in data and meta. Soccer players also have season: the current season in every competition we hold statistics for, summed (total) and per competition (leagues), as /soccer/players/{id}/season, and transfers: the profile's transfers normalised, latest first (fields as /soccer/transfers; moves dated after today only with planned=true, which then lists only those), and bio: the normalised profile (known_as, full_name, short_name, birth_date, age, nationality, position, number, club, market_value_eur; null when not in our data; no contract dates in the feed), as in /soccer/leagues/{id}/players. Tennis players also have rating: the Elo-style rating from our results (docs/ratings.md; list: /tennis/ratings).",
        "operationId": "getAmericanFootballPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Soccer: true lists only transfers dated after today",
            "in": "query",
            "name": "planned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayerResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a player",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/american-football/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getAmericanFootballTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/american-football/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getAmericanFootballTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/american-football/teams/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A team's current state from stored results and tables: last-5 form, streaks (overall, home, away), season home and away record, table place, gaps and zone in its current league, last and next match, injuries for the next match, coach_change (soccer: a head coach appointed in the last 45 days), suspended_out and one_booking_from_ban (soccer: the league's card rules, next league match, complete cards only). Every statement is also a sentence (lang=de, es, it, fr). Facts only. format=md returns Markdown.",
        "operationId": "getAmericanFootballTeamsByIdBriefing",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/insights.TeamBriefing"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team briefing (all sports; tennis: player)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/american-football/teams/{id}/squad": {
      "get": {
        "description": "The team and its current players, refreshed weekly: soccer from the league squad feeds; NBA, WNBA, NCAA, Euroleague, NHL, MLB, KBO, NPB, NFL and NCAA football from team rosters. Players' details carry the feed's other attributes (soccer season stats; height, weight, college, salary, bats/throws, shot...; group is the roster section such as Pitchers or Offense).",
        "operationId": "getAmericanFootballTeamsByIdSquad",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.SquadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team's squad",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/baseball/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Finished matches of the last days with their new facts: the match story (comebacks, late winners, red cards), runs that started, grew or ended, table places and zones. Each fact also as a sentence (lang de, es, it, fr). Newest first; poll with since (the last item's updated_at). Facts only, no predictions.",
        "operationId": "getBaseballFacts",
        "parameters": [
          {
            "description": "League id",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches updated after this time (RFC 3339)",
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only facts with at least this importance (0-100, default 50)",
            "in": "query",
            "name": "min_importance",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Matches (default 50, max 200)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/handlers.MatchFactsItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Facts feed: what finished matches changed",
        "tags": [
          "insights"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/baseball/h2h/{a}/{b}": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Every meeting of two teams in our data (friendlies left out), any team sport with results: won, drawn and lost from team a's side (home_team_* = team a, away_team_* = team b), goals (the sport's score: points, runs, sets won in volleyball, maps in esports), each side's biggest win (largest margin), the last 5 meetings, and history_from (our data starts there: nothing is claimed before). Meetings without a result are counted apart. With sentences (lang de, es, it, fr). Facts only. Tennis: /tennis/h2h/{a}/{b} (players).",
        "operationId": "getBaseballH2hByAByB",
        "parameters": [
          {
            "description": "Team A ID",
            "in": "path",
            "name": "a",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Team B ID",
            "in": "path",
            "name": "b",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HeadToHeadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Head-to-head of two teams (all competitions)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/baseball/leagues": {
      "get": {
        "description": "Returns a list of all available baseball leagues",
        "operationId": "getBaseballLeagues",
        "parameters": [
          {
            "description": "Filter to leagues with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get baseball leagues",
        "tags": [
          "baseball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/baseball/leagues/{id}/standings": {
      "get": {
        "description": "Returns a league's table as the data provider sends it for that sport: soccer with position, form and overall/home/away records; NBA, NHL, MLB, NFL and NCAA by conference and division; other leagues as one table; cricket: computed from the results (IPL, BBL, The Hundred, PSL, CPL, SA20, T20 Blast, County Championship, Sheffield Shield, Ranji Trophy...), with the points rules in rules and groups per group or division. Where the data provider has no usable table, the current table of the Wikipedia season article is served as it stands (rugby union: Premiership, Top 14, URC, Super Rugby, Six Nations; cricket with bonus points and deductions: County Championship, Sheffield Shield, World Test Championship), with source wikipedia, as_of (the time of the page revision) and the attribution in data and meta. Read again a few minutes after each of the league's matches finishes, and weekly. 404 for leagues without a table (cups, uncovered leagues).",
        "operationId": "getBaseballLeaguesByIdStandings",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.StandingsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league standings",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/baseball/matches": {
      "get": {
        "description": "Returns a paginated list of baseball matches with optional filtering",
        "operationId": "getBaseballMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (Not Started, Finished, Inning 1-9)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Filter to matches scheduled today or later (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.BaseballMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List baseball matches",
        "tags": [
          "baseball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/baseball/matches/live": {
      "get": {
        "description": "Returns all currently live baseball matches",
        "operationId": "getBaseballMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.BaseballMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live baseball matches",
        "tags": [
          "baseball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/baseball/matches/{id}": {
      "get": {
        "description": "Returns a single baseball match by its match ID",
        "operationId": "getBaseballMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BaseballMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get baseball match by ID",
        "tags": [
          "baseball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/baseball/matches/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Ready context for one match, computed from stored results and tables: last-5 form, current streaks (overall and at the venue), season home and away records, head-to-head in our data, table position, gaps and zones, stakes (first against second, top-3 clash, relegation clash, local derby, what a win means against the leader's current points), schedule load, injuries and lineups; soccer before kickoff also suspended_out and one_booking_from_ban (league card rules, complete cards only). Every statement is also a fact with a sentence (lang=de, es, it, fr; default English). Facts only: no predictions. A fact marked incomplete (a match without a result inside its window) has no sentence. format=md returns Markdown.",
        "operationId": "getBaseballMatchesByIdBriefing",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Match briefing (all sports)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/baseball/matches/{id}/play-by-play": {
      "get": {
        "description": "Play-by-play of a match from the provider's play-by-play feeds, as sent for that sport: NFL and NCAA football (drives with every play: clock, down and distance, yards, description), NBA, NCAA basketball, NHL, MLB, and tennis point by point (top matches). Read every 2 minutes while the league has a game on; 404 for matches without play-by-play.",
        "operationId": "getBaseballMatchesByIdPlayByPlay",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayByPlayResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get match play-by-play",
        "tags": [
          "stats"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/baseball/matches/{id}/stats": {
      "get": {
        "description": "Returns the box score of a match from the provider's per-league stats feeds, as the data provider sends it for that sport.\nBasketball (NBA, NCAA, WNBA, Euroleague, ACB, Eurocup, KBL and every other league the data provider has box scores for): team_stats, player_stats (starters and bench).\nHockey (NHL, KHL, Liiga, SHL, DEL, Czech Extraliga and every other league the data provider has box scores for): scoring and penalties by period, team and player stats.\nBaseball (MLB; the data provider sends none for KBO and NPB): starting_pitchers, stats (hitters, pitchers), events, umpires.\nTennis (top matches): player, with service/return/points stats for the match and each set.\nAmerican football (NFL, NCAA FBS): team_stats, passing, rushing, receiving, defensive, kicking, punting, returns, fumbles, interceptions, events.\nStats are fetched from kickoff until shortly after the end (leagues without a live box-score feed: from the league season file, which gets a game after it ends and can miss games); 404 for matches without a box score.",
        "operationId": "getBaseballMatchesByIdStats",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.MatchStatsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get match statistics (box score)",
        "tags": [
          "stats"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/baseball/players/{id}": {
      "get": {
        "description": "Cricket and tennis players matched to Wikidata (cricket by the Cricinfo id, tennis by name, country, tour and birth year) also have wikidata: birth date, height, hand (cricket batting hand, tennis playing hand), bowling style and role (cricket), country; the feed's empty birthdate, height and nationality are filled from it (filled_from_wikidata), with the attribution (Wikidata, CC0) in data and meta. Soccer players also have season: the current season in every competition we hold statistics for, summed (total) and per competition (leagues), as /soccer/players/{id}/season, and transfers: the profile's transfers normalised, latest first (fields as /soccer/transfers; moves dated after today only with planned=true, which then lists only those), and bio: the normalised profile (known_as, full_name, short_name, birth_date, age, nationality, position, number, club, market_value_eur; null when not in our data; no contract dates in the feed), as in /soccer/leagues/{id}/players. Tennis players also have rating: the Elo-style rating from our results (docs/ratings.md; list: /tennis/ratings).",
        "operationId": "getBaseballPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Soccer: true lists only transfers dated after today",
            "in": "query",
            "name": "planned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayerResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a player",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/baseball/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getBaseballTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/baseball/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getBaseballTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/baseball/teams/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A team's current state from stored results and tables: last-5 form, streaks (overall, home, away), season home and away record, table place, gaps and zone in its current league, last and next match, injuries for the next match, coach_change (soccer: a head coach appointed in the last 45 days), suspended_out and one_booking_from_ban (soccer: the league's card rules, next league match, complete cards only). Every statement is also a sentence (lang=de, es, it, fr). Facts only. format=md returns Markdown.",
        "operationId": "getBaseballTeamsByIdBriefing",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/insights.TeamBriefing"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team briefing (all sports; tennis: player)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/baseball/teams/{id}/squad": {
      "get": {
        "description": "The team and its current players, refreshed weekly: soccer from the league squad feeds; NBA, WNBA, NCAA, Euroleague, NHL, MLB, KBO, NPB, NFL and NCAA football from team rosters. Players' details carry the feed's other attributes (soccer season stats; height, weight, college, salary, bats/throws, shot...; group is the roster section such as Pitchers or Offense).",
        "operationId": "getBaseballTeamsByIdSquad",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.SquadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team's squad",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/basketball/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Finished matches of the last days with their new facts: the match story (comebacks, late winners, red cards), runs that started, grew or ended, table places and zones. Each fact also as a sentence (lang de, es, it, fr). Newest first; poll with since (the last item's updated_at). Facts only, no predictions.",
        "operationId": "getBasketballFacts",
        "parameters": [
          {
            "description": "League id",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches updated after this time (RFC 3339)",
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only facts with at least this importance (0-100, default 50)",
            "in": "query",
            "name": "min_importance",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Matches (default 50, max 200)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/handlers.MatchFactsItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Facts feed: what finished matches changed",
        "tags": [
          "insights"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/basketball/h2h/{a}/{b}": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Every meeting of two teams in our data (friendlies left out), any team sport with results: won, drawn and lost from team a's side (home_team_* = team a, away_team_* = team b), goals (the sport's score: points, runs, sets won in volleyball, maps in esports), each side's biggest win (largest margin), the last 5 meetings, and history_from (our data starts there: nothing is claimed before). Meetings without a result are counted apart. With sentences (lang de, es, it, fr). Facts only. Tennis: /tennis/h2h/{a}/{b} (players).",
        "operationId": "getBasketballH2hByAByB",
        "parameters": [
          {
            "description": "Team A ID",
            "in": "path",
            "name": "a",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Team B ID",
            "in": "path",
            "name": "b",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HeadToHeadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Head-to-head of two teams (all competitions)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/basketball/leagues": {
      "get": {
        "description": "Returns a list of all available basketball leagues",
        "operationId": "getBasketballLeagues",
        "parameters": [
          {
            "description": "Filter to leagues with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get basketball leagues",
        "tags": [
          "basketball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/basketball/leagues/{id}/standings": {
      "get": {
        "description": "Returns a league's table as the data provider sends it for that sport: soccer with position, form and overall/home/away records; NBA, NHL, MLB, NFL and NCAA by conference and division; other leagues as one table; cricket: computed from the results (IPL, BBL, The Hundred, PSL, CPL, SA20, T20 Blast, County Championship, Sheffield Shield, Ranji Trophy...), with the points rules in rules and groups per group or division. Where the data provider has no usable table, the current table of the Wikipedia season article is served as it stands (rugby union: Premiership, Top 14, URC, Super Rugby, Six Nations; cricket with bonus points and deductions: County Championship, Sheffield Shield, World Test Championship), with source wikipedia, as_of (the time of the page revision) and the attribution in data and meta. Read again a few minutes after each of the league's matches finishes, and weekly. 404 for leagues without a table (cups, uncovered leagues).",
        "operationId": "getBasketballLeaguesByIdStandings",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.StandingsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league standings",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/basketball/matches": {
      "get": {
        "description": "Returns a paginated list of basketball matches with optional filtering",
        "operationId": "getBasketballMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (FT, Q1, Q2, Q3, Q4, OT, HT)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.BasketballMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List basketball matches",
        "tags": [
          "basketball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/basketball/matches/live": {
      "get": {
        "description": "Returns all currently live basketball matches",
        "operationId": "getBasketballMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.BasketballMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live basketball matches",
        "tags": [
          "basketball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/basketball/matches/{id}": {
      "get": {
        "description": "Returns a single basketball match by its match ID",
        "operationId": "getBasketballMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BasketballMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get basketball match by ID",
        "tags": [
          "basketball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/basketball/matches/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Ready context for one match, computed from stored results and tables: last-5 form, current streaks (overall and at the venue), season home and away records, head-to-head in our data, table position, gaps and zones, stakes (first against second, top-3 clash, relegation clash, local derby, what a win means against the leader's current points), schedule load, injuries and lineups; soccer before kickoff also suspended_out and one_booking_from_ban (league card rules, complete cards only). Every statement is also a fact with a sentence (lang=de, es, it, fr; default English). Facts only: no predictions. A fact marked incomplete (a match without a result inside its window) has no sentence. format=md returns Markdown.",
        "operationId": "getBasketballMatchesByIdBriefing",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Match briefing (all sports)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/basketball/matches/{id}/play-by-play": {
      "get": {
        "description": "Play-by-play of a match from the provider's play-by-play feeds, as sent for that sport: NFL and NCAA football (drives with every play: clock, down and distance, yards, description), NBA, NCAA basketball, NHL, MLB, and tennis point by point (top matches). Read every 2 minutes while the league has a game on; 404 for matches without play-by-play.",
        "operationId": "getBasketballMatchesByIdPlayByPlay",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayByPlayResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get match play-by-play",
        "tags": [
          "stats"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/basketball/matches/{id}/stats": {
      "get": {
        "description": "Returns the box score of a match from the provider's per-league stats feeds, as the data provider sends it for that sport.\nBasketball (NBA, NCAA, WNBA, Euroleague, ACB, Eurocup, KBL and every other league the data provider has box scores for): team_stats, player_stats (starters and bench).\nHockey (NHL, KHL, Liiga, SHL, DEL, Czech Extraliga and every other league the data provider has box scores for): scoring and penalties by period, team and player stats.\nBaseball (MLB; the data provider sends none for KBO and NPB): starting_pitchers, stats (hitters, pitchers), events, umpires.\nTennis (top matches): player, with service/return/points stats for the match and each set.\nAmerican football (NFL, NCAA FBS): team_stats, passing, rushing, receiving, defensive, kicking, punting, returns, fumbles, interceptions, events.\nStats are fetched from kickoff until shortly after the end (leagues without a live box-score feed: from the league season file, which gets a game after it ends and can miss games); 404 for matches without a box score.",
        "operationId": "getBasketballMatchesByIdStats",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.MatchStatsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get match statistics (box score)",
        "tags": [
          "stats"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/basketball/players/{id}": {
      "get": {
        "description": "Cricket and tennis players matched to Wikidata (cricket by the Cricinfo id, tennis by name, country, tour and birth year) also have wikidata: birth date, height, hand (cricket batting hand, tennis playing hand), bowling style and role (cricket), country; the feed's empty birthdate, height and nationality are filled from it (filled_from_wikidata), with the attribution (Wikidata, CC0) in data and meta. Soccer players also have season: the current season in every competition we hold statistics for, summed (total) and per competition (leagues), as /soccer/players/{id}/season, and transfers: the profile's transfers normalised, latest first (fields as /soccer/transfers; moves dated after today only with planned=true, which then lists only those), and bio: the normalised profile (known_as, full_name, short_name, birth_date, age, nationality, position, number, club, market_value_eur; null when not in our data; no contract dates in the feed), as in /soccer/leagues/{id}/players. Tennis players also have rating: the Elo-style rating from our results (docs/ratings.md; list: /tennis/ratings).",
        "operationId": "getBasketballPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Soccer: true lists only transfers dated after today",
            "in": "query",
            "name": "planned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayerResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a player",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/basketball/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getBasketballTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/basketball/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getBasketballTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/basketball/teams/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A team's current state from stored results and tables: last-5 form, streaks (overall, home, away), season home and away record, table place, gaps and zone in its current league, last and next match, injuries for the next match, coach_change (soccer: a head coach appointed in the last 45 days), suspended_out and one_booking_from_ban (soccer: the league's card rules, next league match, complete cards only). Every statement is also a sentence (lang=de, es, it, fr). Facts only. format=md returns Markdown.",
        "operationId": "getBasketballTeamsByIdBriefing",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/insights.TeamBriefing"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team briefing (all sports; tennis: player)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/basketball/teams/{id}/squad": {
      "get": {
        "description": "The team and its current players, refreshed weekly: soccer from the league squad feeds; NBA, WNBA, NCAA, Euroleague, NHL, MLB, KBO, NPB, NFL and NCAA football from team rosters. Players' details carry the feed's other attributes (soccer season stats; height, weight, college, salary, bats/throws, shot...; group is the roster section such as Pitchers or Offense).",
        "operationId": "getBasketballTeamsByIdSquad",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.SquadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team's squad",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/boxing/events": {
      "get": {
        "description": "Boxing events of the last and the current year from Wikipedia (CC BY-SA 4.0): cards of the fight articles and Zuffa Boxing (kind card) and world title fights from the champions' record tables (kind title_fight). Latest first, with venue, city and the main event's winner.",
        "operationId": "getBoxingEvents",
        "parameters": [
          {
            "description": "Year (2026)",
            "in": "query",
            "name": "season",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "scheduled, live, finished or no_results",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "card or title_fight",
            "in": "query",
            "name": "kind",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Events on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Events on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.BoxingEventResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List boxing events",
        "tags": [
          "boxing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/boxing/events/{id}": {
      "get": {
        "description": "An event with every bout of its card, main event first: weight class, world titles at stake (WBA, WBC, IBF, WBO, Ring), fighters, result, method (KO, TKO, UD, SD, MD, RTD, DQ, TD, PTS, NC, draw), round and time, rounds scheduled.",
        "operationId": "getBoxingEventsById",
        "parameters": [
          {
            "description": "Event ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BoxingEventResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a boxing event with its bouts",
        "tags": [
          "boxing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/cricket/leagues": {
      "get": {
        "description": "Returns the cricket series and competitions (tours, leagues, ICC events)",
        "operationId": "getCricketLeagues",
        "parameters": [
          {
            "description": "Filter to series with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get cricket series",
        "tags": [
          "cricket"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/cricket/leagues/{id}/standings": {
      "get": {
        "description": "Returns a league's table as the data provider sends it for that sport: soccer with position, form and overall/home/away records; NBA, NHL, MLB, NFL and NCAA by conference and division; other leagues as one table; cricket: computed from the results (IPL, BBL, The Hundred, PSL, CPL, SA20, T20 Blast, County Championship, Sheffield Shield, Ranji Trophy...), with the points rules in rules and groups per group or division. Where the data provider has no usable table, the current table of the Wikipedia season article is served as it stands (rugby union: Premiership, Top 14, URC, Super Rugby, Six Nations; cricket with bonus points and deductions: County Championship, Sheffield Shield, World Test Championship), with source wikipedia, as_of (the time of the page revision) and the attribution in data and meta. Read again a few minutes after each of the league's matches finishes, and weekly. 404 for leagues without a table (cups, uncovered leagues).",
        "operationId": "getCricketLeaguesByIdStandings",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.StandingsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league standings",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/cricket/matches": {
      "get": {
        "description": "Returns a paginated list of cricket matches (Tests, first-class, ODIs, T20s) with optional filtering",
        "operationId": "getCricketMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by first day (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches starting on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches starting on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (NS, In Progress, Stumps, Innings Break, Finished)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by series (league) ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Filter to matches starting today or later (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.CricketMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List cricket matches",
        "tags": [
          "cricket"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/cricket/matches/live": {
      "get": {
        "description": "Returns the cricket matches in play, including multi-day matches between days (Stumps)",
        "operationId": "getCricketMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.CricketMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live cricket matches",
        "tags": [
          "cricket"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/cricket/matches/{id}": {
      "get": {
        "description": "Returns a single cricket match: innings totals, toss, result",
        "operationId": "getCricketMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.CricketMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get cricket match by ID",
        "tags": [
          "cricket"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/cricket/matches/{id}/scorecard": {
      "get": {
        "description": "Batting, bowling, extras and fall of wickets per innings, in batting order; super overs are marked. Available once the match has started.",
        "operationId": "getCricketMatchesByIdScorecard",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "object"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a cricket match's scorecard",
        "tags": [
          "cricket"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/cricket/players/{id}": {
      "get": {
        "description": "Cricket and tennis players matched to Wikidata (cricket by the Cricinfo id, tennis by name, country, tour and birth year) also have wikidata: birth date, height, hand (cricket batting hand, tennis playing hand), bowling style and role (cricket), country; the feed's empty birthdate, height and nationality are filled from it (filled_from_wikidata), with the attribution (Wikidata, CC0) in data and meta. Soccer players also have season: the current season in every competition we hold statistics for, summed (total) and per competition (leagues), as /soccer/players/{id}/season, and transfers: the profile's transfers normalised, latest first (fields as /soccer/transfers; moves dated after today only with planned=true, which then lists only those), and bio: the normalised profile (known_as, full_name, short_name, birth_date, age, nationality, position, number, club, market_value_eur; null when not in our data; no contract dates in the feed), as in /soccer/leagues/{id}/players. Tennis players also have rating: the Elo-style rating from our results (docs/ratings.md; list: /tennis/ratings).",
        "operationId": "getCricketPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Soccer: true lists only transfers dated after today",
            "in": "query",
            "name": "planned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayerResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a player",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/cricket/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getCricketTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/cricket/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getCricketTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/darts/players/{id}": {
      "get": {
        "description": "Country, ranking, Wikidata profile (birth date, country), ids on snooker.org, CueTracker, WPBSA SnookerScores, Darts Database, WDF or darts1.de as references, titles and finals in the stored seasons and the latest 20 matches",
        "operationId": "getDartsPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.WikiPlayerResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a snooker or darts player",
        "tags": [
          "snooker-darts"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/darts/rankings": {
      "get": {
        "description": "Snooker: the WPBSA world ranking at the latest revision Wikipedia lists (points for the players of the end-of-season list); darts: the PDC Order of Merit with two-year prize money (GBP).",
        "operationId": "getDartsRankings",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.WikiRankingResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get the snooker or darts world ranking",
        "tags": [
          "snooker-darts"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/esports/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Finished matches of the last days with their new facts: the match story (comebacks, late winners, red cards), runs that started, grew or ended, table places and zones. Each fact also as a sentence (lang de, es, it, fr). Newest first; poll with since (the last item's updated_at). Facts only, no predictions.",
        "operationId": "getEsportsFacts",
        "parameters": [
          {
            "description": "League id",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches updated after this time (RFC 3339)",
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only facts with at least this importance (0-100, default 50)",
            "in": "query",
            "name": "min_importance",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Matches (default 50, max 200)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/handlers.MatchFactsItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Facts feed: what finished matches changed",
        "tags": [
          "insights"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/esports/h2h/{a}/{b}": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Every meeting of two teams in our data (friendlies left out), any team sport with results: won, drawn and lost from team a's side (home_team_* = team a, away_team_* = team b), goals (the sport's score: points, runs, sets won in volleyball, maps in esports), each side's biggest win (largest margin), the last 5 meetings, and history_from (our data starts there: nothing is claimed before). Meetings without a result are counted apart. With sentences (lang de, es, it, fr). Facts only. Tennis: /tennis/h2h/{a}/{b} (players).",
        "operationId": "getEsportsH2hByAByB",
        "parameters": [
          {
            "description": "Team A ID",
            "in": "path",
            "name": "a",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Team B ID",
            "in": "path",
            "name": "b",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HeadToHeadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Head-to-head of two teams (all competitions)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/esports/leagues": {
      "get": {
        "description": "Tournaments and their stages, named \"\u003cgame\u003e: \u003ctournament\u003e\" (CS2, Dota 2, LoL)",
        "operationId": "getEsportsLeagues",
        "parameters": [
          {
            "description": "Filter to leagues with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get esports leagues",
        "tags": [
          "esports"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/esports/matches": {
      "get": {
        "description": "CS2, Dota 2 and League of Legends matches from the data provider and Valorant matches from Liquipedia (score = maps or games won; a Liquipedia match carries attribution), paginated and filtered",
        "operationId": "getEsportsMatches",
        "parameters": [
          {
            "description": "cs2, dota2, lol or valorant",
            "in": "query",
            "name": "game",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (NS, Started, Pause, Finished, WO, Postponed, Canceled)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Filter to matches scheduled today or later (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.EsportsMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List esports matches",
        "tags": [
          "esports"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/esports/matches/live": {
      "get": {
        "description": "The esports matches in play (status Started or Pause)",
        "operationId": "getEsportsMatchesLive",
        "parameters": [
          {
            "description": "cs2, dota2, lol or valorant",
            "in": "query",
            "name": "game",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.EsportsMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live esports matches",
        "tags": [
          "esports"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/esports/matches/{id}": {
      "get": {
        "description": "One esports match",
        "operationId": "getEsportsMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.EsportsMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get esports match by ID",
        "tags": [
          "esports"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/esports/matches/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Ready context for one match, computed from stored results and tables: last-5 form, current streaks (overall and at the venue), season home and away records, head-to-head in our data, table position, gaps and zones, stakes (first against second, top-3 clash, relegation clash, local derby, what a win means against the leader's current points), schedule load, injuries and lineups; soccer before kickoff also suspended_out and one_booking_from_ban (league card rules, complete cards only). Every statement is also a fact with a sentence (lang=de, es, it, fr; default English). Facts only: no predictions. A fact marked incomplete (a match without a result inside its window) has no sentence. format=md returns Markdown.",
        "operationId": "getEsportsMatchesByIdBriefing",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Match briefing (all sports)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/esports/matches/{id}/maps": {
      "get": {
        "description": "Per map (CS2: name, rounds per half; Valorant: name, rounds per half, agents) or game (Dota 2: duration, side; LoL: duration, kills, team stats), with each player's line (CS2: kills, deaths, assists, headshots, ADR, KAST; Dota 2: hero, K/D/A, last hits, GPM, XPM). A Dota 2 game paired with OpenDota also has \"opendota\": every player's hero, K/D/A, GPM/XPM, net worth, damage, healing and items.",
        "operationId": "getEsportsMatchesByIdMaps",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "type": "object"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get an esports match's maps or games",
        "tags": [
          "esports"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/esports/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getEsportsTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/esports/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getEsportsTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/esports/teams/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A team's current state from stored results and tables: last-5 form, streaks (overall, home, away), season home and away record, table place, gaps and zone in its current league, last and next match, injuries for the next match, coach_change (soccer: a head coach appointed in the last 45 days), suspended_out and one_booking_from_ban (soccer: the league's card rules, next league match, complete cards only). Every statement is also a sentence (lang=de, es, it, fr). Facts only. format=md returns Markdown.",
        "operationId": "getEsportsTeamsByIdBriefing",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/insights.TeamBriefing"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team briefing (all sports; tennis: player)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/golf/players/{id}": {
      "get": {
        "description": "Profile (country, birth date and place, PGA Tour rank and the provider's season earnings) and the season's tournaments from our leaderboards with a summary (events, wins, top 10s, cuts made, earnings)",
        "operationId": "getGolfPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Season (default: the latest the player has results in)",
            "in": "query",
            "name": "season",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.GolfPlayerResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a golfer",
        "tags": [
          "golf"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/handball/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Finished matches of the last days with their new facts: the match story (comebacks, late winners, red cards), runs that started, grew or ended, table places and zones. Each fact also as a sentence (lang de, es, it, fr). Newest first; poll with since (the last item's updated_at). Facts only, no predictions.",
        "operationId": "getHandballFacts",
        "parameters": [
          {
            "description": "League id",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches updated after this time (RFC 3339)",
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only facts with at least this importance (0-100, default 50)",
            "in": "query",
            "name": "min_importance",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Matches (default 50, max 200)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/handlers.MatchFactsItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Facts feed: what finished matches changed",
        "tags": [
          "insights"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/handball/h2h/{a}/{b}": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Every meeting of two teams in our data (friendlies left out), any team sport with results: won, drawn and lost from team a's side (home_team_* = team a, away_team_* = team b), goals (the sport's score: points, runs, sets won in volleyball, maps in esports), each side's biggest win (largest margin), the last 5 meetings, and history_from (our data starts there: nothing is claimed before). Meetings without a result are counted apart. With sentences (lang de, es, it, fr). Facts only. Tennis: /tennis/h2h/{a}/{b} (players).",
        "operationId": "getHandballH2hByAByB",
        "parameters": [
          {
            "description": "Team A ID",
            "in": "path",
            "name": "a",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Team B ID",
            "in": "path",
            "name": "b",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HeadToHeadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Head-to-head of two teams (all competitions)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/handball/leagues": {
      "get": {
        "description": "Returns a list of all available handball leagues",
        "operationId": "getHandballLeagues",
        "parameters": [
          {
            "description": "Filter to leagues with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get handball leagues",
        "tags": [
          "handball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/handball/leagues/{id}/standings": {
      "get": {
        "description": "Returns a league's table as the data provider sends it for that sport: soccer with position, form and overall/home/away records; NBA, NHL, MLB, NFL and NCAA by conference and division; other leagues as one table; cricket: computed from the results (IPL, BBL, The Hundred, PSL, CPL, SA20, T20 Blast, County Championship, Sheffield Shield, Ranji Trophy...), with the points rules in rules and groups per group or division. Where the data provider has no usable table, the current table of the Wikipedia season article is served as it stands (rugby union: Premiership, Top 14, URC, Super Rugby, Six Nations; cricket with bonus points and deductions: County Championship, Sheffield Shield, World Test Championship), with source wikipedia, as_of (the time of the page revision) and the attribution in data and meta. Read again a few minutes after each of the league's matches finishes, and weekly. 404 for leagues without a table (cups, uncovered leagues).",
        "operationId": "getHandballLeaguesByIdStandings",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.StandingsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league standings",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/handball/matches": {
      "get": {
        "description": "Returns a paginated list of handball matches with optional filtering",
        "operationId": "getHandballMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (NS, Finished, 1st Half, Half Time, 2nd Half)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Filter to matches scheduled today or later (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.HandballMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List handball matches",
        "tags": [
          "handball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/handball/matches/live": {
      "get": {
        "description": "Returns all currently live handball matches",
        "operationId": "getHandballMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.HandballMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live handball matches",
        "tags": [
          "handball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/handball/matches/{id}": {
      "get": {
        "description": "Returns a single handball match by its match ID",
        "operationId": "getHandballMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.HandballMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get handball match by ID",
        "tags": [
          "handball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/handball/matches/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Ready context for one match, computed from stored results and tables: last-5 form, current streaks (overall and at the venue), season home and away records, head-to-head in our data, table position, gaps and zones, stakes (first against second, top-3 clash, relegation clash, local derby, what a win means against the leader's current points), schedule load, injuries and lineups; soccer before kickoff also suspended_out and one_booking_from_ban (league card rules, complete cards only). Every statement is also a fact with a sentence (lang=de, es, it, fr; default English). Facts only: no predictions. A fact marked incomplete (a match without a result inside its window) has no sentence. format=md returns Markdown.",
        "operationId": "getHandballMatchesByIdBriefing",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Match briefing (all sports)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/handball/players/{id}": {
      "get": {
        "description": "Cricket and tennis players matched to Wikidata (cricket by the Cricinfo id, tennis by name, country, tour and birth year) also have wikidata: birth date, height, hand (cricket batting hand, tennis playing hand), bowling style and role (cricket), country; the feed's empty birthdate, height and nationality are filled from it (filled_from_wikidata), with the attribution (Wikidata, CC0) in data and meta. Soccer players also have season: the current season in every competition we hold statistics for, summed (total) and per competition (leagues), as /soccer/players/{id}/season, and transfers: the profile's transfers normalised, latest first (fields as /soccer/transfers; moves dated after today only with planned=true, which then lists only those), and bio: the normalised profile (known_as, full_name, short_name, birth_date, age, nationality, position, number, club, market_value_eur; null when not in our data; no contract dates in the feed), as in /soccer/leagues/{id}/players. Tennis players also have rating: the Elo-style rating from our results (docs/ratings.md; list: /tennis/ratings).",
        "operationId": "getHandballPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Soccer: true lists only transfers dated after today",
            "in": "query",
            "name": "planned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayerResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a player",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/handball/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getHandballTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/handball/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getHandballTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/handball/teams/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A team's current state from stored results and tables: last-5 form, streaks (overall, home, away), season home and away record, table place, gaps and zone in its current league, last and next match, injuries for the next match, coach_change (soccer: a head coach appointed in the last 45 days), suspended_out and one_booking_from_ban (soccer: the league's card rules, next league match, complete cards only). Every statement is also a sentence (lang=de, es, it, fr). Facts only. format=md returns Markdown.",
        "operationId": "getHandballTeamsByIdBriefing",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/insights.TeamBriefing"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team briefing (all sports; tennis: player)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/handball/teams/{id}/squad": {
      "get": {
        "description": "The team and its current players, refreshed weekly: soccer from the league squad feeds; NBA, WNBA, NCAA, Euroleague, NHL, MLB, KBO, NPB, NFL and NCAA football from team rosters. Players' details carry the feed's other attributes (soccer season stats; height, weight, college, salary, bats/throws, shot...; group is the roster section such as Pitchers or Offense).",
        "operationId": "getHandballTeamsByIdSquad",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.SquadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team's squad",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/hockey/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Finished matches of the last days with their new facts: the match story (comebacks, late winners, red cards), runs that started, grew or ended, table places and zones. Each fact also as a sentence (lang de, es, it, fr). Newest first; poll with since (the last item's updated_at). Facts only, no predictions.",
        "operationId": "getHockeyFacts",
        "parameters": [
          {
            "description": "League id",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches updated after this time (RFC 3339)",
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only facts with at least this importance (0-100, default 50)",
            "in": "query",
            "name": "min_importance",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Matches (default 50, max 200)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/handlers.MatchFactsItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Facts feed: what finished matches changed",
        "tags": [
          "insights"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/hockey/h2h/{a}/{b}": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Every meeting of two teams in our data (friendlies left out), any team sport with results: won, drawn and lost from team a's side (home_team_* = team a, away_team_* = team b), goals (the sport's score: points, runs, sets won in volleyball, maps in esports), each side's biggest win (largest margin), the last 5 meetings, and history_from (our data starts there: nothing is claimed before). Meetings without a result are counted apart. With sentences (lang de, es, it, fr). Facts only. Tennis: /tennis/h2h/{a}/{b} (players).",
        "operationId": "getHockeyH2hByAByB",
        "parameters": [
          {
            "description": "Team A ID",
            "in": "path",
            "name": "a",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Team B ID",
            "in": "path",
            "name": "b",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HeadToHeadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Head-to-head of two teams (all competitions)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/hockey/leagues": {
      "get": {
        "description": "Returns a list of all available hockey leagues",
        "operationId": "getHockeyLeagues",
        "parameters": [
          {
            "description": "Filter to leagues with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get hockey leagues",
        "tags": [
          "hockey"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/hockey/leagues/{id}/standings": {
      "get": {
        "description": "Returns a league's table as the data provider sends it for that sport: soccer with position, form and overall/home/away records; NBA, NHL, MLB, NFL and NCAA by conference and division; other leagues as one table; cricket: computed from the results (IPL, BBL, The Hundred, PSL, CPL, SA20, T20 Blast, County Championship, Sheffield Shield, Ranji Trophy...), with the points rules in rules and groups per group or division. Where the data provider has no usable table, the current table of the Wikipedia season article is served as it stands (rugby union: Premiership, Top 14, URC, Super Rugby, Six Nations; cricket with bonus points and deductions: County Championship, Sheffield Shield, World Test Championship), with source wikipedia, as_of (the time of the page revision) and the attribution in data and meta. Read again a few minutes after each of the league's matches finishes, and weekly. 404 for leagues without a table (cups, uncovered leagues).",
        "operationId": "getHockeyLeaguesByIdStandings",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.StandingsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league standings",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/hockey/matches": {
      "get": {
        "description": "Returns a paginated list of hockey matches with optional filtering",
        "operationId": "getHockeyMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (Not Started, Finished, 1st Period, 2nd Period, 3rd Period, Over Time)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.HockeyMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List hockey matches",
        "tags": [
          "hockey"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/hockey/matches/live": {
      "get": {
        "description": "Returns all currently live hockey matches",
        "operationId": "getHockeyMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.HockeyMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live hockey matches",
        "tags": [
          "hockey"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/hockey/matches/{id}": {
      "get": {
        "description": "Returns a single hockey match by its match ID",
        "operationId": "getHockeyMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.HockeyMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get hockey match by ID",
        "tags": [
          "hockey"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/hockey/matches/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Ready context for one match, computed from stored results and tables: last-5 form, current streaks (overall and at the venue), season home and away records, head-to-head in our data, table position, gaps and zones, stakes (first against second, top-3 clash, relegation clash, local derby, what a win means against the leader's current points), schedule load, injuries and lineups; soccer before kickoff also suspended_out and one_booking_from_ban (league card rules, complete cards only). Every statement is also a fact with a sentence (lang=de, es, it, fr; default English). Facts only: no predictions. A fact marked incomplete (a match without a result inside its window) has no sentence. format=md returns Markdown.",
        "operationId": "getHockeyMatchesByIdBriefing",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Match briefing (all sports)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/hockey/matches/{id}/play-by-play": {
      "get": {
        "description": "Play-by-play of a match from the provider's play-by-play feeds, as sent for that sport: NFL and NCAA football (drives with every play: clock, down and distance, yards, description), NBA, NCAA basketball, NHL, MLB, and tennis point by point (top matches). Read every 2 minutes while the league has a game on; 404 for matches without play-by-play.",
        "operationId": "getHockeyMatchesByIdPlayByPlay",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayByPlayResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get match play-by-play",
        "tags": [
          "stats"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/hockey/matches/{id}/stats": {
      "get": {
        "description": "Returns the box score of a match from the provider's per-league stats feeds, as the data provider sends it for that sport.\nBasketball (NBA, NCAA, WNBA, Euroleague, ACB, Eurocup, KBL and every other league the data provider has box scores for): team_stats, player_stats (starters and bench).\nHockey (NHL, KHL, Liiga, SHL, DEL, Czech Extraliga and every other league the data provider has box scores for): scoring and penalties by period, team and player stats.\nBaseball (MLB; the data provider sends none for KBO and NPB): starting_pitchers, stats (hitters, pitchers), events, umpires.\nTennis (top matches): player, with service/return/points stats for the match and each set.\nAmerican football (NFL, NCAA FBS): team_stats, passing, rushing, receiving, defensive, kicking, punting, returns, fumbles, interceptions, events.\nStats are fetched from kickoff until shortly after the end (leagues without a live box-score feed: from the league season file, which gets a game after it ends and can miss games); 404 for matches without a box score.",
        "operationId": "getHockeyMatchesByIdStats",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.MatchStatsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get match statistics (box score)",
        "tags": [
          "stats"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/hockey/players/{id}": {
      "get": {
        "description": "Cricket and tennis players matched to Wikidata (cricket by the Cricinfo id, tennis by name, country, tour and birth year) also have wikidata: birth date, height, hand (cricket batting hand, tennis playing hand), bowling style and role (cricket), country; the feed's empty birthdate, height and nationality are filled from it (filled_from_wikidata), with the attribution (Wikidata, CC0) in data and meta. Soccer players also have season: the current season in every competition we hold statistics for, summed (total) and per competition (leagues), as /soccer/players/{id}/season, and transfers: the profile's transfers normalised, latest first (fields as /soccer/transfers; moves dated after today only with planned=true, which then lists only those), and bio: the normalised profile (known_as, full_name, short_name, birth_date, age, nationality, position, number, club, market_value_eur; null when not in our data; no contract dates in the feed), as in /soccer/leagues/{id}/players. Tennis players also have rating: the Elo-style rating from our results (docs/ratings.md; list: /tennis/ratings).",
        "operationId": "getHockeyPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Soccer: true lists only transfers dated after today",
            "in": "query",
            "name": "planned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayerResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a player",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/hockey/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getHockeyTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/hockey/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getHockeyTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/hockey/teams/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A team's current state from stored results and tables: last-5 form, streaks (overall, home, away), season home and away record, table place, gaps and zone in its current league, last and next match, injuries for the next match, coach_change (soccer: a head coach appointed in the last 45 days), suspended_out and one_booking_from_ban (soccer: the league's card rules, next league match, complete cards only). Every statement is also a sentence (lang=de, es, it, fr). Facts only. format=md returns Markdown.",
        "operationId": "getHockeyTeamsByIdBriefing",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/insights.TeamBriefing"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team briefing (all sports; tennis: player)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/hockey/teams/{id}/squad": {
      "get": {
        "description": "The team and its current players, refreshed weekly: soccer from the league squad feeds; NBA, WNBA, NCAA, Euroleague, NHL, MLB, KBO, NPB, NFL and NCAA football from team rosters. Players' details carry the feed's other attributes (soccer season stats; height, weight, college, salary, bats/throws, shot...; group is the roster section such as Pitchers or Offense).",
        "operationId": "getHockeyTeamsByIdSquad",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.SquadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team's squad",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/horse-racing/bookmakers": {
      "get": {
        "description": "Returns every bookmaker that appears in runner odds, keyed by our stable bookmaker_id. url and logo_url are null until supplied.",
        "operationId": "getHorseRacingBookmakers",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.HorseRacingBookmakerResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List horse racing bookmakers",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/horse-racing/horses/{id}/form": {
      "get": {
        "description": "The last runs in settled races in our data (latest first) with course, distance, going, position and field size, starting price; and wins, top-three finishes and strike rate over these runs.",
        "operationId": "getHorseRacingHorsesByIdForm",
        "parameters": [
          {
            "description": "Horse, jockey or trainer ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Runs (1-50)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 10,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HorseRacingFormResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Recent runs of a horse, jockey or trainer",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/horse-racing/jockeys/{id}/form": {
      "get": {
        "description": "The last runs in settled races in our data (latest first) with course, distance, going, position and field size, starting price; and wins, top-three finishes and strike rate over these runs.",
        "operationId": "getHorseRacingJockeysByIdForm",
        "parameters": [
          {
            "description": "Horse, jockey or trainer ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Runs (1-50)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 10,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HorseRacingFormResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Recent runs of a horse, jockey or trainer",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/horse-racing/meetings": {
      "get": {
        "description": "Returns a list of horse racing meetings with optional filtering. meeting_id is the racecourse ID and repeats every day the course races; a meeting is (meeting_id, meeting_date).",
        "operationId": "getHorseRacingMeetings",
        "parameters": [
          {
            "description": "Filter by region (usa, uk, australia, hk, singapore, dubai, sa, france)",
            "in": "query",
            "name": "region",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by local meeting date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter to meetings scheduled today or later (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.MeetingResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get horse racing meetings",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/horse-racing/races": {
      "get": {
        "description": "Returns a paginated list of horse racing races with optional filtering. race_date and start_time are UTC.",
        "operationId": "getHorseRacingRaces",
        "parameters": [
          {
            "description": "Filter by meeting (racecourse) ID",
            "in": "query",
            "name": "meeting_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Comma-separated race IDs (max 100)",
            "in": "query",
            "name": "race_id",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by UTC race date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status",
            "in": "query",
            "name": "status",
            "schema": {
              "enum": [
                "NS",
                "live",
                "result_pending",
                "FT"
              ],
              "type": "string"
            }
          },
          {
            "description": "Filter by region (usa, uk, australia, hk, singapore, dubai, sa, france)",
            "in": "query",
            "name": "region",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter to races dated today (UTC) or later, including today's finished races (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only races that changed (race or any runner) after this RFC 3339 timestamp",
            "in": "query",
            "name": "updated_since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.HorseRacingRaceResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List horse racing races",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/horse-racing/races/live": {
      "get": {
        "description": "Returns every unsettled race whose off-time was within the last 30 minutes (status live)",
        "operationId": "getHorseRacingRacesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.HorseRacingRaceResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live horse racing races",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/horse-racing/races/{id}": {
      "get": {
        "description": "Returns a single race by its race ID, including the full runner card with every bookmaker's odds",
        "operationId": "getHorseRacingRacesById",
        "parameters": [
          {
            "description": "Race ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Include odds (default true; false omits them)",
            "in": "query",
            "name": "odds",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Include recent_form (default true; false omits it)",
            "in": "query",
            "name": "form",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated bookmaker IDs to keep in odds (max 100)",
            "in": "query",
            "name": "bookmaker_id",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.HorseRacingRaceResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get horse racing race by ID",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/horse-racing/races/{id}/briefing": {
      "get": {
        "description": "Ready context for one race from our stored results: field size, distance, going, class; the favourite (shortest starting price after the race, else best current price, else morning line); each runner's form figures and last run; jockey and trainer wins, rides and strike rate over the 30 days before race day (a sentence from 5 rides). After the race: winner, starting price, whether the favourite won. Every statement also as a sentence (lang=de, es, it, fr). Facts only; prices are data fields, never sentences. format=md returns Markdown.",
        "operationId": "getHorseRacingRacesByIdBriefing",
        "parameters": [
          {
            "description": "Race ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HorseRacingBriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Race briefing",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/horse-racing/races/{id}/results": {
      "get": {
        "description": "Returns a race with its wagers and each runner's status and finishing detail. Check results_final before settling.",
        "operationId": "getHorseRacingRacesByIdResults",
        "parameters": [
          {
            "description": "Race ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Include odds (default true; false omits them)",
            "in": "query",
            "name": "odds",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Include recent_form (default true; false omits it)",
            "in": "query",
            "name": "form",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated bookmaker IDs to keep in odds (max 100)",
            "in": "query",
            "name": "bookmaker_id",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.HorseRacingRaceResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get horse racing race results",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/horse-racing/races/{id}/runners": {
      "get": {
        "description": "Returns the full runner card declared for a single race, finishers first",
        "operationId": "getHorseRacingRacesByIdRunners",
        "parameters": [
          {
            "description": "Race ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Include odds (default true; false omits them)",
            "in": "query",
            "name": "odds",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Include recent_form (default true; false omits it)",
            "in": "query",
            "name": "form",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated bookmaker IDs to keep in odds (max 100)",
            "in": "query",
            "name": "bookmaker_id",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.HorseRacingRunnerResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get runners for a horse racing race",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/horse-racing/runners": {
      "get": {
        "description": "Returns a paginated list of runners across races, ordered by (race_id, id) so pages stay stable. Odds are only included with odds=true.",
        "operationId": "getHorseRacingRunners",
        "parameters": [
          {
            "description": "Comma-separated race IDs (max 100)",
            "in": "query",
            "name": "race_id",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by horse ID",
            "in": "query",
            "name": "horse_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Filter by jockey name (substring)",
            "in": "query",
            "name": "jockey",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by trainer name (substring)",
            "in": "query",
            "name": "trainer",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by meeting (racecourse) ID",
            "in": "query",
            "name": "meeting_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Filter by UTC race date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by region (usa, uk, australia, hk, singapore, dubai, sa, france)",
            "in": "query",
            "name": "region",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only runners in races dated today (UTC) or later, including today's finished races (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only runners whose odds, status or result changed after this RFC 3339 timestamp. Removed runners are signalled by their race's updated_at.",
            "in": "query",
            "name": "updated_since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Include every bookmaker's odds (true)",
            "in": "query",
            "name": "odds",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Include recent_form (default true; false omits it)",
            "in": "query",
            "name": "form",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Comma-separated bookmaker IDs to keep in odds (max 100)",
            "in": "query",
            "name": "bookmaker_id",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-1000)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.HorseRacingRunnerResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List horse racing runners",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/horse-racing/search": {
      "get": {
        "description": "Horses, jockeys and trainers whose name contains q (2-64 characters), most recently declared first, with their ids for the form endpoints.",
        "operationId": "getHorseRacingSearch",
        "parameters": [
          {
            "description": "Part of the name",
            "in": "query",
            "name": "q",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Results per kind (1-50)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 20,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "additionalProperties": {
                            "items": {
                              "$ref": "#/components/schemas/database.HorseRacingName"
                            },
                            "type": "array"
                          },
                          "type": "object"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Find horses, jockeys and trainers by name",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/horse-racing/trainers/{id}/form": {
      "get": {
        "description": "The last runs in settled races in our data (latest first) with course, distance, going, position and field size, starting price; and wins, top-three finishes and strike rate over these runs.",
        "operationId": "getHorseRacingTrainersByIdForm",
        "parameters": [
          {
            "description": "Horse, jockey or trainer ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Runs (1-50)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 10,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HorseRacingFormResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Recent runs of a horse, jockey or trainer",
        "tags": [
          "horse-racing"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/mma/events": {
      "get": {
        "description": "Fight cards (UFC) by date, with the main event and its result once known",
        "operationId": "getMmaEvents",
        "parameters": [
          {
            "description": "scheduled, live, finished or cancelled",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Events on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Events on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.MMAEventResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List MMA events",
        "tags": [
          "mma"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/mma/events/{id}": {
      "get": {
        "description": "A fight card with every bout from the main event down: weight class, fighters, winner, method, round, time, judges' scores and fight stats",
        "operationId": "getMmaEventsById",
        "parameters": [
          {
            "description": "Event ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.MMAEventResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get an MMA event",
        "tags": [
          "mma"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/mma/live": {
      "get": {
        "description": "Events on now (a bout decided, not all), each with its full card",
        "operationId": "getMmaLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.MMAEventResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get MMA cards in progress",
        "tags": [
          "mma"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/rugby-league/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Finished matches of the last days with their new facts: the match story (comebacks, late winners, red cards), runs that started, grew or ended, table places and zones. Each fact also as a sentence (lang de, es, it, fr). Newest first; poll with since (the last item's updated_at). Facts only, no predictions.",
        "operationId": "getRugbyLeagueFacts",
        "parameters": [
          {
            "description": "League id",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches updated after this time (RFC 3339)",
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only facts with at least this importance (0-100, default 50)",
            "in": "query",
            "name": "min_importance",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Matches (default 50, max 200)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/handlers.MatchFactsItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Facts feed: what finished matches changed",
        "tags": [
          "insights"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/rugby-league/h2h/{a}/{b}": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Every meeting of two teams in our data (friendlies left out), any team sport with results: won, drawn and lost from team a's side (home_team_* = team a, away_team_* = team b), goals (the sport's score: points, runs, sets won in volleyball, maps in esports), each side's biggest win (largest margin), the last 5 meetings, and history_from (our data starts there: nothing is claimed before). Meetings without a result are counted apart. With sentences (lang de, es, it, fr). Facts only. Tennis: /tennis/h2h/{a}/{b} (players).",
        "operationId": "getRugbyLeagueH2hByAByB",
        "parameters": [
          {
            "description": "Team A ID",
            "in": "path",
            "name": "a",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Team B ID",
            "in": "path",
            "name": "b",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HeadToHeadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Head-to-head of two teams (all competitions)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/rugby-league/leagues": {
      "get": {
        "description": "Rugby union or rugby league competitions",
        "operationId": "getRugbyLeagueLeagues",
        "parameters": [
          {
            "description": "Filter to leagues with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get rugby leagues",
        "tags": [
          "rugby"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/rugby-league/leagues/{id}/standings": {
      "get": {
        "description": "Returns a league's table as the data provider sends it for that sport: soccer with position, form and overall/home/away records; NBA, NHL, MLB, NFL and NCAA by conference and division; other leagues as one table; cricket: computed from the results (IPL, BBL, The Hundred, PSL, CPL, SA20, T20 Blast, County Championship, Sheffield Shield, Ranji Trophy...), with the points rules in rules and groups per group or division. Where the data provider has no usable table, the current table of the Wikipedia season article is served as it stands (rugby union: Premiership, Top 14, URC, Super Rugby, Six Nations; cricket with bonus points and deductions: County Championship, Sheffield Shield, World Test Championship), with source wikipedia, as_of (the time of the page revision) and the attribution in data and meta. Read again a few minutes after each of the league's matches finishes, and weekly. 404 for leagues without a table (cups, uncovered leagues).",
        "operationId": "getRugbyLeagueLeaguesByIdStandings",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.StandingsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league standings",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/rugby-league/matches": {
      "get": {
        "description": "Rugby union (/rugby) or rugby league (/rugby-league) matches with half-time and extra-time points, paginated and filtered",
        "operationId": "getRugbyLeagueMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (NS, 1st Half, Half Time, 2nd Half, Finished, After Extra Time)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Filter to matches scheduled today or later (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.RugbyMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List rugby matches",
        "tags": [
          "rugby"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/rugby-league/matches/live": {
      "get": {
        "description": "The rugby union or rugby league matches in play, with the minute",
        "operationId": "getRugbyLeagueMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.RugbyMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live rugby matches",
        "tags": [
          "rugby"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/rugby-league/matches/{id}": {
      "get": {
        "description": "One rugby union or rugby league match",
        "operationId": "getRugbyLeagueMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.RugbyMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get rugby match by ID",
        "tags": [
          "rugby"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/rugby-league/matches/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Ready context for one match, computed from stored results and tables: last-5 form, current streaks (overall and at the venue), season home and away records, head-to-head in our data, table position, gaps and zones, stakes (first against second, top-3 clash, relegation clash, local derby, what a win means against the leader's current points), schedule load, injuries and lineups; soccer before kickoff also suspended_out and one_booking_from_ban (league card rules, complete cards only). Every statement is also a fact with a sentence (lang=de, es, it, fr; default English). Facts only: no predictions. A fact marked incomplete (a match without a result inside its window) has no sentence. format=md returns Markdown.",
        "operationId": "getRugbyLeagueMatchesByIdBriefing",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Match briefing (all sports)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/rugby-league/matches/{id}/events": {
      "get": {
        "description": "Tries, conversions, penalty goals, drop (field) goals and cards in minute order: [{minute, team (home/away), type, player, player_id}]. Rugby league: NRL matches; rugby union: where the provider's livescore lists them.",
        "operationId": "getRugbyLeagueMatchesByIdEvents",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "type": "object"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a rugby match's scoring events",
        "tags": [
          "rugby"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/rugby-league/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getRugbyLeagueTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/rugby-league/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getRugbyLeagueTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/rugby-league/teams/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A team's current state from stored results and tables: last-5 form, streaks (overall, home, away), season home and away record, table place, gaps and zone in its current league, last and next match, injuries for the next match, coach_change (soccer: a head coach appointed in the last 45 days), suspended_out and one_booking_from_ban (soccer: the league's card rules, next league match, complete cards only). Every statement is also a sentence (lang=de, es, it, fr). Facts only. format=md returns Markdown.",
        "operationId": "getRugbyLeagueTeamsByIdBriefing",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/insights.TeamBriefing"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team briefing (all sports; tennis: player)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/rugby/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Finished matches of the last days with their new facts: the match story (comebacks, late winners, red cards), runs that started, grew or ended, table places and zones. Each fact also as a sentence (lang de, es, it, fr). Newest first; poll with since (the last item's updated_at). Facts only, no predictions.",
        "operationId": "getRugbyFacts",
        "parameters": [
          {
            "description": "League id",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches updated after this time (RFC 3339)",
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only facts with at least this importance (0-100, default 50)",
            "in": "query",
            "name": "min_importance",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Matches (default 50, max 200)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/handlers.MatchFactsItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Facts feed: what finished matches changed",
        "tags": [
          "insights"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/rugby/h2h/{a}/{b}": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Every meeting of two teams in our data (friendlies left out), any team sport with results: won, drawn and lost from team a's side (home_team_* = team a, away_team_* = team b), goals (the sport's score: points, runs, sets won in volleyball, maps in esports), each side's biggest win (largest margin), the last 5 meetings, and history_from (our data starts there: nothing is claimed before). Meetings without a result are counted apart. With sentences (lang de, es, it, fr). Facts only. Tennis: /tennis/h2h/{a}/{b} (players).",
        "operationId": "getRugbyH2hByAByB",
        "parameters": [
          {
            "description": "Team A ID",
            "in": "path",
            "name": "a",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Team B ID",
            "in": "path",
            "name": "b",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HeadToHeadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Head-to-head of two teams (all competitions)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/rugby/leagues": {
      "get": {
        "description": "Rugby union or rugby league competitions",
        "operationId": "getRugbyLeagues",
        "parameters": [
          {
            "description": "Filter to leagues with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get rugby leagues",
        "tags": [
          "rugby"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/rugby/leagues/{id}/standings": {
      "get": {
        "description": "Returns a league's table as the data provider sends it for that sport: soccer with position, form and overall/home/away records; NBA, NHL, MLB, NFL and NCAA by conference and division; other leagues as one table; cricket: computed from the results (IPL, BBL, The Hundred, PSL, CPL, SA20, T20 Blast, County Championship, Sheffield Shield, Ranji Trophy...), with the points rules in rules and groups per group or division. Where the data provider has no usable table, the current table of the Wikipedia season article is served as it stands (rugby union: Premiership, Top 14, URC, Super Rugby, Six Nations; cricket with bonus points and deductions: County Championship, Sheffield Shield, World Test Championship), with source wikipedia, as_of (the time of the page revision) and the attribution in data and meta. Read again a few minutes after each of the league's matches finishes, and weekly. 404 for leagues without a table (cups, uncovered leagues).",
        "operationId": "getRugbyLeaguesByIdStandings",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.StandingsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league standings",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/rugby/matches": {
      "get": {
        "description": "Rugby union (/rugby) or rugby league (/rugby-league) matches with half-time and extra-time points, paginated and filtered",
        "operationId": "getRugbyMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (NS, 1st Half, Half Time, 2nd Half, Finished, After Extra Time)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Filter to matches scheduled today or later (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.RugbyMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List rugby matches",
        "tags": [
          "rugby"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/rugby/matches/live": {
      "get": {
        "description": "The rugby union or rugby league matches in play, with the minute",
        "operationId": "getRugbyMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.RugbyMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live rugby matches",
        "tags": [
          "rugby"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/rugby/matches/{id}": {
      "get": {
        "description": "One rugby union or rugby league match",
        "operationId": "getRugbyMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.RugbyMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get rugby match by ID",
        "tags": [
          "rugby"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/rugby/matches/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Ready context for one match, computed from stored results and tables: last-5 form, current streaks (overall and at the venue), season home and away records, head-to-head in our data, table position, gaps and zones, stakes (first against second, top-3 clash, relegation clash, local derby, what a win means against the leader's current points), schedule load, injuries and lineups; soccer before kickoff also suspended_out and one_booking_from_ban (league card rules, complete cards only). Every statement is also a fact with a sentence (lang=de, es, it, fr; default English). Facts only: no predictions. A fact marked incomplete (a match without a result inside its window) has no sentence. format=md returns Markdown.",
        "operationId": "getRugbyMatchesByIdBriefing",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Match briefing (all sports)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/rugby/matches/{id}/events": {
      "get": {
        "description": "Tries, conversions, penalty goals, drop (field) goals and cards in minute order: [{minute, team (home/away), type, player, player_id}]. Rugby league: NRL matches; rugby union: where the provider's livescore lists them.",
        "operationId": "getRugbyMatchesByIdEvents",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "type": "object"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a rugby match's scoring events",
        "tags": [
          "rugby"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/rugby/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getRugbyTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/rugby/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getRugbyTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/rugby/teams/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A team's current state from stored results and tables: last-5 form, streaks (overall, home, away), season home and away record, table place, gaps and zone in its current league, last and next match, injuries for the next match, coach_change (soccer: a head coach appointed in the last 45 days), suspended_out and one_booking_from_ban (soccer: the league's card rules, next league match, complete cards only). Every statement is also a sentence (lang=de, es, it, fr). Facts only. format=md returns Markdown.",
        "operationId": "getRugbyTeamsByIdBriefing",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/insights.TeamBriefing"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team briefing (all sports; tennis: player)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/snooker/players/{id}": {
      "get": {
        "description": "Country, ranking, Wikidata profile (birth date, country), ids on snooker.org, CueTracker, WPBSA SnookerScores, Darts Database, WDF or darts1.de as references, titles and finals in the stored seasons and the latest 20 matches",
        "operationId": "getSnookerPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.WikiPlayerResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a snooker or darts player",
        "tags": [
          "snooker-darts"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/snooker/rankings": {
      "get": {
        "description": "Snooker: the WPBSA world ranking at the latest revision Wikipedia lists (points for the players of the end-of-season list); darts: the PDC Order of Merit with two-year prize money (GBP).",
        "operationId": "getSnookerRankings",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.WikiRankingResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get the snooker or darts world ranking",
        "tags": [
          "snooker-darts"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/soccer/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Finished matches of the last days with their new facts: the match story (comebacks, late winners, red cards), runs that started, grew or ended, table places and zones. Each fact also as a sentence (lang de, es, it, fr). Newest first; poll with since (the last item's updated_at). Facts only, no predictions.",
        "operationId": "getSoccerFacts",
        "parameters": [
          {
            "description": "League id",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches updated after this time (RFC 3339)",
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only facts with at least this importance (0-100, default 50)",
            "in": "query",
            "name": "min_importance",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Matches (default 50, max 200)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/handlers.MatchFactsItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Facts feed: what finished matches changed",
        "tags": [
          "insights"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/soccer/h2h/{a}/{b}": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Every meeting of two teams in our data (friendlies left out), any team sport with results: won, drawn and lost from team a's side (home_team_* = team a, away_team_* = team b), goals (the sport's score: points, runs, sets won in volleyball, maps in esports), each side's biggest win (largest margin), the last 5 meetings, and history_from (our data starts there: nothing is claimed before). Meetings without a result are counted apart. With sentences (lang de, es, it, fr). Facts only. Tennis: /tennis/h2h/{a}/{b} (players).",
        "operationId": "getSoccerH2hByAByB",
        "parameters": [
          {
            "description": "Team A ID",
            "in": "path",
            "name": "a",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Team B ID",
            "in": "path",
            "name": "b",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HeadToHeadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Head-to-head of two teams (all competitions)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/soccer/injuries": {
      "get": {
        "description": "Returns a paginated list of sidelined soccer players (one row per player and match) with optional filtering. Each row has type (from the status text: injury, suspension, illness, international_duty, personal, other, unknown), since and expected_return (YYYY-MM-DD from the player profile's sidelined list when a spell of the same type covers the match, else null; the provider's lists end in September 2025, so nearly always null), and matches_missed: the team's played matches before this one in which the player was listed, counted back without a gap, with matches_missed_complete false when the count reached a match our injury feed did not cover (a lower bound). Never guessed: unknown is null.",
        "operationId": "getSoccerInjuries",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Filter by team ID",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Filter by match date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Match date on or after (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Match date on or before (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by injury status substring (e.g. Knee Injury, Red Card)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by availability (to_miss, questionable)",
            "in": "query",
            "name": "availability",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.SoccerInjuryResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List soccer injuries",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/soccer/leagues": {
      "get": {
        "description": "Returns a list of all available soccer leagues",
        "operationId": "getSoccerLeagues",
        "parameters": [
          {
            "description": "Filter to leagues with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get soccer leagues",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/soccer/leagues/{id}/standings": {
      "get": {
        "description": "Returns a league's table as the data provider sends it for that sport: soccer with position, form and overall/home/away records; NBA, NHL, MLB, NFL and NCAA by conference and division; other leagues as one table; cricket: computed from the results (IPL, BBL, The Hundred, PSL, CPL, SA20, T20 Blast, County Championship, Sheffield Shield, Ranji Trophy...), with the points rules in rules and groups per group or division. Where the data provider has no usable table, the current table of the Wikipedia season article is served as it stands (rugby union: Premiership, Top 14, URC, Super Rugby, Six Nations; cricket with bonus points and deductions: County Championship, Sheffield Shield, World Test Championship), with source wikipedia, as_of (the time of the page revision) and the attribution in data and meta. Read again a few minutes after each of the league's matches finishes, and weekly. 404 for leagues without a table (cups, uncovered leagues).",
        "operationId": "getSoccerLeaguesByIdStandings",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.StandingsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league standings",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/soccer/leagues/{id}/top-scorers": {
      "get": {
        "description": "Returns a soccer league's top scorers (kind=goals, with penalty goals), most assists (assists) or most cards (cards, yellow and red), best first, up to 50 players. Read about 3 hours after each matchday, at most daily, and weekly. 404 for leagues without a list.",
        "operationId": "getSoccerLeaguesByIdTopScorers",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "goals (default), assists or cards",
            "in": "query",
            "name": "kind",
            "schema": {
              "enum": [
                "goals",
                "assists",
                "cards"
              ],
              "type": "string"
            }
          },
          {
            "description": "Players (1-50, default 50)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TopScorersResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league top scorers",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/soccer/matches": {
      "get": {
        "description": "Returns a paginated list of soccer matches with optional filtering",
        "operationId": "getSoccerMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (FT, 1H, HT, 2H, NS, Unknown)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Filter by exact league name: one division of a league the data provider files under one id (see divisions in /soccer/leagues)",
            "in": "query",
            "name": "league_name",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.SoccerMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List soccer matches",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/soccer/matches/live": {
      "get": {
        "description": "Returns all currently live soccer matches",
        "operationId": "getSoccerMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.SoccerMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live soccer matches",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/soccer/matches/{id}": {
      "get": {
        "description": "Returns a single soccer match by its match ID, or by its static_id. The detail adds timeline: the events normalised (minute, extra_minute, team home/away, team_id, kind goal, penalty, own_goal, missed_penalty, yellow, second_yellow, red, substitution or var, player, assist, player_in/player_out, detail: card reason, \"injury\" or the VAR outcome, on_field_decision) from the commentary summary (top leagues) or else the livescore events (minute null when the feed gave none; no header, body part or per-shot xG: not in the feeds); and referee_stats: the referee's season in this league (see /soccer/referees).",
        "operationId": "getSoccerMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.SoccerMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get soccer match by ID",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/soccer/matches/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Ready context for one match, computed from stored results and tables: last-5 form, current streaks (overall and at the venue), season home and away records, head-to-head in our data, table position, gaps and zones, stakes (first against second, top-3 clash, relegation clash, local derby, what a win means against the leader's current points), schedule load, injuries and lineups; soccer before kickoff also suspended_out and one_booking_from_ban (league card rules, complete cards only). Every statement is also a fact with a sentence (lang=de, es, it, fr; default English). Facts only: no predictions. A fact marked incomplete (a match without a result inside its window) has no sentence. format=md returns Markdown.",
        "operationId": "getSoccerMatchesByIdBriefing",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Match briefing (all sports)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/soccer/matches/{id}/injuries": {
      "get": {
        "description": "Returns all sidelined players reported for a single soccer match, with type, since, expected_return and matches_missed as on /soccer/injuries",
        "operationId": "getSoccerMatchesByIdInjuries",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.SoccerInjuryResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get soccer injuries for a match",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/soccer/matches/{id}/lineups": {
      "get": {
        "description": "Returns the lineups for a single soccer match, including formations, substitutes, coaches and team colors. lineup_type \"confirmed\": published by the clubs, about an hour before kickoff (official sources win). Before that, for a match not started, lineup_type \"expected\": each team's last confirmed lineup (at most 45 days old) without the players listed as missing for this match; expected names the match each side is based on and who was removed (replacements are not guessed).",
        "operationId": "getSoccerMatchesByIdLineups",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.SoccerLineupsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get soccer match lineups",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/soccer/matches/{id}/stats": {
      "get": {
        "description": "Returns detailed statistics for a single soccer match, including team stats, per-player stats, the match summary and substitutions",
        "operationId": "getSoccerMatchesByIdStats",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.SoccerMatchStatsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get soccer match statistics",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/soccer/players/{id}": {
      "get": {
        "description": "Cricket and tennis players matched to Wikidata (cricket by the Cricinfo id, tennis by name, country, tour and birth year) also have wikidata: birth date, height, hand (cricket batting hand, tennis playing hand), bowling style and role (cricket), country; the feed's empty birthdate, height and nationality are filled from it (filled_from_wikidata), with the attribution (Wikidata, CC0) in data and meta. Soccer players also have season: the current season in every competition we hold statistics for, summed (total) and per competition (leagues), as /soccer/players/{id}/season, and transfers: the profile's transfers normalised, latest first (fields as /soccer/transfers; moves dated after today only with planned=true, which then lists only those), and bio: the normalised profile (known_as, full_name, short_name, birth_date, age, nationality, position, number, club, market_value_eur; null when not in our data; no contract dates in the feed), as in /soccer/leagues/{id}/players. Tennis players also have rating: the Elo-style rating from our results (docs/ratings.md; list: /tennis/ratings).",
        "operationId": "getSoccerPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Soccer: true lists only transfers dated after today",
            "in": "query",
            "name": "planned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayerResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a player",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/soccer/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getSoccerTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/soccer/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getSoccerTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/soccer/teams/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A team's current state from stored results and tables: last-5 form, streaks (overall, home, away), season home and away record, table place, gaps and zone in its current league, last and next match, injuries for the next match, coach_change (soccer: a head coach appointed in the last 45 days), suspended_out and one_booking_from_ban (soccer: the league's card rules, next league match, complete cards only). Every statement is also a sentence (lang=de, es, it, fr). Facts only. format=md returns Markdown.",
        "operationId": "getSoccerTeamsByIdBriefing",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/insights.TeamBriefing"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team briefing (all sports; tennis: player)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/soccer/teams/{id}/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A soccer team's current facts, each with a sentence (lang de, es, it, fr): current runs (and whether one is the longest of the season), runs its last match ended (\"first defeat after 11 unbeaten\"), what that match ended that our data can date (\"first away win at X since ...\"; since and history_from on each: nothing is claimed before our data starts), home and away record, table place, gaps and zone, the next match's stakes, and players' milestones for the club (debut, first goal; 50/100/150 league appearances, 25/50/75 league goals; milestone_next: one short before the next match). coach_change: a head coach appointed in the last 45 days (Wikidata), with the record since when our matches cover the whole tenure. suspended_out and one_booking_from_ban: players banned for, or one booking from a ban before, the next league match (official card rules; only when every league match of the team has our cards). League milestones only when every league match of the team's season has our statistics and the player's earlier league seasons are complete in his profile; debut and first goal only when every match of the season in every competition has them. Kept for an hour. Facts only, no predictions.",
        "operationId": "getSoccerTeamsByIdFacts",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.TeamFactsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team facts: streaks, records, first since, milestones",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/soccer/teams/{id}/squad": {
      "get": {
        "description": "The team and its current players, refreshed weekly: soccer from the league squad feeds; NBA, WNBA, NCAA, Euroleague, NHL, MLB, KBO, NPB, NFL and NCAA football from team rosters. Players' details carry the feed's other attributes (soccer season stats; height, weight, college, salary, bats/throws, shot...; group is the roster section such as Pitchers or Offense).",
        "operationId": "getSoccerTeamsByIdSquad",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.SquadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team's squad",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/sports": {
      "get": {
        "description": "Returns a list of sports that have future matches, filtered by the API key's permissions",
        "operationId": "getSports",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.SportOption"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List available sports",
        "tags": [
          "sports"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/table-tennis/leagues": {
      "get": {
        "description": "Leagues and seasons (\"Poland: Superliga\", \"Austria: 1. Bundesliga Men - Upper Play-off\")",
        "operationId": "getTableTennisLeagues",
        "parameters": [
          {
            "description": "Filter to leagues with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get table tennis leagues",
        "tags": [
          "table-tennis"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/table-tennis/leagues/{id}/standings": {
      "get": {
        "description": "Returns a league's table as the data provider sends it for that sport: soccer with position, form and overall/home/away records; NBA, NHL, MLB, NFL and NCAA by conference and division; other leagues as one table; cricket: computed from the results (IPL, BBL, The Hundred, PSL, CPL, SA20, T20 Blast, County Championship, Sheffield Shield, Ranji Trophy...), with the points rules in rules and groups per group or division. Where the data provider has no usable table, the current table of the Wikipedia season article is served as it stands (rugby union: Premiership, Top 14, URC, Super Rugby, Six Nations; cricket with bonus points and deductions: County Championship, Sheffield Shield, World Test Championship), with source wikipedia, as_of (the time of the page revision) and the attribution in data and meta. Read again a few minutes after each of the league's matches finishes, and weekly. 404 for leagues without a table (cups, uncovered leagues).",
        "operationId": "getTableTennisLeaguesByIdStandings",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.StandingsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league standings",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/table-tennis/matches": {
      "get": {
        "description": "Team matches of the Polish Superliga and Ekstraklasa (PZTS, live) and the Austrian Bundesliga (ÖTTV, results): score = games won, paginated and filtered. Each match carries the source's attribution.",
        "operationId": "getTableTennisMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (NS, Live, FT, Postp., Cancl.)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Filter to matches scheduled today or later (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TableTennisMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List table tennis matches",
        "tags": [
          "table-tennis"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/table-tennis/matches/live": {
      "get": {
        "description": "The team matches in play (status Live)",
        "operationId": "getTableTennisMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TableTennisMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live table tennis matches",
        "tags": [
          "table-tennis"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/table-tennis/matches/{id}": {
      "get": {
        "description": "One team match",
        "operationId": "getTableTennisMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TableTennisMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get table tennis match by ID",
        "tags": [
          "table-tennis"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/table-tennis/matches/{id}/games": {
      "get": {
        "description": "Each singles and doubles game of a team match in order: number, kind (singles, doubles), home and away players, sets won and the points of each set ([home, away]; the ÖTTV gives sets won only). Live while the match is on (PZTS).",
        "operationId": "getTableTennisMatchesByIdGames",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "type": "object"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a table tennis match's games",
        "tags": [
          "table-tennis"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/table-tennis/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getTableTennisTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/table-tennis/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getTableTennisTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/tennis/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Finished matches of the last days with their new facts: the match story (comebacks, late winners, red cards), runs that started, grew or ended, table places and zones. Each fact also as a sentence (lang de, es, it, fr). Newest first; poll with since (the last item's updated_at). Facts only, no predictions.",
        "operationId": "getTennisFacts",
        "parameters": [
          {
            "description": "League id",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches updated after this time (RFC 3339)",
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only facts with at least this importance (0-100, default 50)",
            "in": "query",
            "name": "min_importance",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Matches (default 50, max 200)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/handlers.MatchFactsItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Facts feed: what finished matches changed",
        "tags": [
          "insights"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/tennis/h2h/{a}/{b}": {
      "get": {
        "description": "Player a's record against player b: wins and earlier meetings (latest first, scores in sets). Totals are the provider's whole history when it was read (before an ATP or WTA singles match between the two), else our stored meetings.",
        "operationId": "getTennisH2hByAByB",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "a",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Other player ID",
            "in": "path",
            "name": "b",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TennisH2HResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Tennis head-to-head",
        "tags": [
          "tennis"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/tennis/leagues": {
      "get": {
        "description": "Returns a list of all available tennis categories with optional filtering",
        "operationId": "getTennisLeagues",
        "parameters": [
          {
            "description": "Filter to categories with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by tour",
            "in": "query",
            "name": "tour",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by discipline",
            "in": "query",
            "name": "discipline",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by stage",
            "in": "query",
            "name": "stage",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by surface",
            "in": "query",
            "name": "surface",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.TennisLeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get tennis categories",
        "tags": [
          "tennis"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/tennis/matches": {
      "get": {
        "description": "Returns a paginated list of tennis matches with optional filtering",
        "operationId": "getTennisMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (NS, Set 1, Set 2, Finished, Retired, Cancelled)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by category ID",
            "in": "query",
            "name": "category_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Filter by tour (atp, wta, challenger men, itf men, itf women, etc.)",
            "in": "query",
            "name": "tour",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by discipline (singles, doubles)",
            "in": "query",
            "name": "discipline",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by stage (main, qualification)",
            "in": "query",
            "name": "stage",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by surface (clay, hard, grass, hard (indoor), etc.)",
            "in": "query",
            "name": "surface",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TennisMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List tennis matches",
        "tags": [
          "tennis"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/tennis/matches/live": {
      "get": {
        "description": "Returns all currently live tennis matches",
        "operationId": "getTennisMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TennisMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live tennis matches",
        "tags": [
          "tennis"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/tennis/matches/{id}": {
      "get": {
        "description": "Returns a single tennis match by its match ID",
        "operationId": "getTennisMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TennisMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get tennis match by ID",
        "tags": [
          "tennis"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/tennis/matches/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Ready context for one match, computed from stored results and tables: last-5 form, current streaks (overall and at the venue), season home and away records, head-to-head in our data, table position, gaps and zones, stakes (first against second, top-3 clash, relegation clash, local derby, what a win means against the leader's current points), schedule load, injuries and lineups; soccer before kickoff also suspended_out and one_booking_from_ban (league card rules, complete cards only). Every statement is also a fact with a sentence (lang=de, es, it, fr; default English). Facts only: no predictions. A fact marked incomplete (a match without a result inside its window) has no sentence. format=md returns Markdown.",
        "operationId": "getTennisMatchesByIdBriefing",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Match briefing (all sports)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/tennis/matches/{id}/play-by-play": {
      "get": {
        "description": "Play-by-play of a match from the provider's play-by-play feeds, as sent for that sport: NFL and NCAA football (drives with every play: clock, down and distance, yards, description), NBA, NCAA basketball, NHL, MLB, and tennis point by point (top matches). Read every 2 minutes while the league has a game on; 404 for matches without play-by-play.",
        "operationId": "getTennisMatchesByIdPlayByPlay",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayByPlayResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get match play-by-play",
        "tags": [
          "stats"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/tennis/matches/{id}/stats": {
      "get": {
        "description": "Returns the box score of a match from the provider's per-league stats feeds, as the data provider sends it for that sport.\nBasketball (NBA, NCAA, WNBA, Euroleague, ACB, Eurocup, KBL and every other league the data provider has box scores for): team_stats, player_stats (starters and bench).\nHockey (NHL, KHL, Liiga, SHL, DEL, Czech Extraliga and every other league the data provider has box scores for): scoring and penalties by period, team and player stats.\nBaseball (MLB; the data provider sends none for KBO and NPB): starting_pitchers, stats (hitters, pitchers), events, umpires.\nTennis (top matches): player, with service/return/points stats for the match and each set.\nAmerican football (NFL, NCAA FBS): team_stats, passing, rushing, receiving, defensive, kicking, punting, returns, fumbles, interceptions, events.\nStats are fetched from kickoff until shortly after the end (leagues without a live box-score feed: from the league season file, which gets a game after it ends and can miss games); 404 for matches without a box score.",
        "operationId": "getTennisMatchesByIdStats",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.MatchStatsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get match statistics (box score)",
        "tags": [
          "stats"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/tennis/players/{id}": {
      "get": {
        "description": "Cricket and tennis players matched to Wikidata (cricket by the Cricinfo id, tennis by name, country, tour and birth year) also have wikidata: birth date, height, hand (cricket batting hand, tennis playing hand), bowling style and role (cricket), country; the feed's empty birthdate, height and nationality are filled from it (filled_from_wikidata), with the attribution (Wikidata, CC0) in data and meta. Soccer players also have season: the current season in every competition we hold statistics for, summed (total) and per competition (leagues), as /soccer/players/{id}/season, and transfers: the profile's transfers normalised, latest first (fields as /soccer/transfers; moves dated after today only with planned=true, which then lists only those), and bio: the normalised profile (known_as, full_name, short_name, birth_date, age, nationality, position, number, club, market_value_eur; null when not in our data; no contract dates in the feed), as in /soccer/leagues/{id}/players. Tennis players also have rating: the Elo-style rating from our results (docs/ratings.md; list: /tennis/ratings).",
        "operationId": "getTennisPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Soccer: true lists only transfers dated after today",
            "in": "query",
            "name": "planned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayerResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a player",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/tennis/players/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A team's current state from stored results and tables: last-5 form, streaks (overall, home, away), season home and away record, table place, gaps and zone in its current league, last and next match, injuries for the next match, coach_change (soccer: a head coach appointed in the last 45 days), suspended_out and one_booking_from_ban (soccer: the league's card rules, next league match, complete cards only). Every statement is also a sentence (lang=de, es, it, fr). Facts only. format=md returns Markdown.",
        "operationId": "getTennisPlayersByIdBriefing",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/insights.TeamBriefing"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team briefing (all sports; tennis: player)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/tennis/rankings": {
      "get": {
        "description": "The ATP or WTA singles ranking, read daily, by rank; optionally the players of one country (nationality as in the ranking, \"Italy\").",
        "operationId": "getTennisRankings",
        "parameters": [
          {
            "description": "atp or wta",
            "in": "query",
            "name": "tour",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-500)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 100,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Only players of this country",
            "in": "query",
            "name": "country",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TennisRankingResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Tennis singles ranking",
        "tags": [
          "tennis"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/volleyball/facts": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Finished matches of the last days with their new facts: the match story (comebacks, late winners, red cards), runs that started, grew or ended, table places and zones. Each fact also as a sentence (lang de, es, it, fr). Newest first; poll with since (the last item's updated_at). Facts only, no predictions.",
        "operationId": "getVolleyballFacts",
        "parameters": [
          {
            "description": "League id",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches updated after this time (RFC 3339)",
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Only facts with at least this importance (0-100, default 50)",
            "in": "query",
            "name": "min_importance",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Matches (default 50, max 200)",
            "in": "query",
            "name": "limit",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/handlers.MatchFactsItem"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Facts feed: what finished matches changed",
        "tags": [
          "insights"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/volleyball/h2h/{a}/{b}": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Every meeting of two teams in our data (friendlies left out), any team sport with results: won, drawn and lost from team a's side (home_team_* = team a, away_team_* = team b), goals (the sport's score: points, runs, sets won in volleyball, maps in esports), each side's biggest win (largest margin), the last 5 meetings, and history_from (our data starts there: nothing is claimed before). Meetings without a result are counted apart. With sentences (lang de, es, it, fr). Facts only. Tennis: /tennis/h2h/{a}/{b} (players).",
        "operationId": "getVolleyballH2hByAByB",
        "parameters": [
          {
            "description": "Team A ID",
            "in": "path",
            "name": "a",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Team B ID",
            "in": "path",
            "name": "b",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/handlers.HeadToHeadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Head-to-head of two teams (all competitions)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/volleyball/leagues": {
      "get": {
        "description": "Returns a list of all available volleyball leagues",
        "operationId": "getVolleyballLeagues",
        "parameters": [
          {
            "description": "Filter to leagues with future matches (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/database.LeagueInfo"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get volleyball leagues",
        "tags": [
          "volleyball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0"
        }
      }
    },
    "/volleyball/leagues/{id}/standings": {
      "get": {
        "description": "Returns a league's table as the data provider sends it for that sport: soccer with position, form and overall/home/away records; NBA, NHL, MLB, NFL and NCAA by conference and division; other leagues as one table; cricket: computed from the results (IPL, BBL, The Hundred, PSL, CPL, SA20, T20 Blast, County Championship, Sheffield Shield, Ranji Trophy...), with the points rules in rules and groups per group or division. Where the data provider has no usable table, the current table of the Wikipedia season article is served as it stands (rugby union: Premiership, Top 14, URC, Super Rugby, Six Nations; cricket with bonus points and deductions: County Championship, Sheffield Shield, World Test Championship), with source wikipedia, as_of (the time of the page revision) and the attribution in data and meta. Read again a few minutes after each of the league's matches finishes, and weekly. 404 for leagues without a table (cups, uncovered leagues).",
        "operationId": "getVolleyballLeaguesByIdStandings",
        "parameters": [
          {
            "description": "League ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.StandingsResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get league standings",
        "tags": [
          "standings"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/volleyball/matches": {
      "get": {
        "description": "Returns a paginated list of volleyball matches with optional filtering",
        "operationId": "getVolleyballMatches",
        "parameters": [
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          },
          {
            "description": "Filter by date (YYYY-MM-DD)",
            "in": "query",
            "name": "date",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or after this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_from",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Matches on or before this date (YYYY-MM-DD)",
            "in": "query",
            "name": "date_to",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by status (Not Started, Finished, Set 1, Set 2, Set 3, Set 4, Set 5)",
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Filter by league ID",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Only matches of this team (home or away, every competition)",
            "in": "query",
            "name": "team_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "desc for latest first (default: by start time ascending)",
            "in": "query",
            "name": "order",
            "schema": {
              "enum": [
                "asc",
                "desc"
              ],
              "type": "string"
            }
          },
          {
            "description": "Filter to matches scheduled today or later (true)",
            "in": "query",
            "name": "future",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.VolleyballMatchResponse"
                          },
                          "type": "array"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "429": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Too Many Requests"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List volleyball matches",
        "tags": [
          "volleyball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/volleyball/matches/live": {
      "get": {
        "description": "Returns all currently live volleyball matches",
        "operationId": "getVolleyballMatchesLive",
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.VolleyballMatchResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Internal Server Error"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get live volleyball matches",
        "tags": [
          "volleyball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/volleyball/matches/{id}": {
      "get": {
        "description": "Returns a single volleyball match by its match ID",
        "operationId": "getVolleyballMatchesById",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.VolleyballMatchResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Bad Request"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get volleyball match by ID",
        "tags": [
          "volleyball"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/volleyball/matches/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). Ready context for one match, computed from stored results and tables: last-5 form, current streaks (overall and at the venue), season home and away records, head-to-head in our data, table position, gaps and zones, stakes (first against second, top-3 clash, relegation clash, local derby, what a win means against the leader's current points), schedule load, injuries and lineups; soccer before kickoff also suspended_out and one_booking_from_ban (league card rules, complete cards only). Every statement is also a fact with a sentence (lang=de, es, it, fr; default English). Facts only: no predictions. A fact marked incomplete (a match without a result inside its window) has no sentence. format=md returns Markdown.",
        "operationId": "getVolleyballMatchesByIdBriefing",
        "parameters": [
          {
            "description": "Match ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.BriefingResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Match briefing (all sports)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/volleyball/players/{id}": {
      "get": {
        "description": "Cricket and tennis players matched to Wikidata (cricket by the Cricinfo id, tennis by name, country, tour and birth year) also have wikidata: birth date, height, hand (cricket batting hand, tennis playing hand), bowling style and role (cricket), country; the feed's empty birthdate, height and nationality are filled from it (filled_from_wikidata), with the attribution (Wikidata, CC0) in data and meta. Soccer players also have season: the current season in every competition we hold statistics for, summed (total) and per competition (leagues), as /soccer/players/{id}/season, and transfers: the profile's transfers normalised, latest first (fields as /soccer/transfers; moves dated after today only with planned=true, which then lists only those), and bio: the normalised profile (known_as, full_name, short_name, birth_date, age, nationality, position, number, club, market_value_eur; null when not in our data; no contract dates in the feed), as in /soccer/leagues/{id}/players. Tennis players also have rating: the Elo-style rating from our results (docs/ratings.md; list: /tennis/ratings).",
        "operationId": "getVolleyballPlayersById",
        "parameters": [
          {
            "description": "Player ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Soccer: true lists only transfers dated after today",
            "in": "query",
            "name": "planned",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.PlayerResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a player",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/volleyball/teams": {
      "get": {
        "description": "Teams of a sport that played in the last 120 days, with the leagues they played in. Filter by league_id or by name (q). Soccer teams also carry country, venue and coach from the league squad feeds.",
        "operationId": "getVolleyballTeams",
        "parameters": [
          {
            "description": "Only teams of this league",
            "in": "query",
            "name": "league_id",
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Name contains",
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "Maximum results (1-100)",
            "in": "query",
            "name": "limit",
            "schema": {
              "default": 50,
              "type": "integer"
            }
          },
          {
            "description": "Results to skip",
            "in": "query",
            "name": "offset",
            "schema": {
              "default": 0,
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "items": {
                            "$ref": "#/components/schemas/dto.TeamResponse"
                          },
                          "type": "array"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "401": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Unauthorized"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "List teams",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.002"
        }
      }
    },
    "/volleyball/teams/{id}": {
      "get": {
        "description": "Soccer teams matched to a Wikidata club also have coach: the current head coach (Wikidata P286: the statement with a start date and no end), the appointment date and the won, drawn and lost count of the team's matches we hold since then (friendlies left out), record_from (the first of those matches) and record_complete (false when our match history of the team starts after the appointment, so the record covers only part of the tenure), with the attribution (Wikidata, CC0) in data and meta. coach_name stays the provider's. Soccer teams also have squad_value_eur: the current squad's summed market value (the data provider player profiles), over players_with_value of squad_players; league-wide in /soccer/leagues/{id}/market-values. The coach with the previous coach and previous club: /soccer/teams/{id}/coach. Every team with a rated result also has rating: its Elo-style rating from our stored results (docs/ratings.md) with rank of of among the active teams of its league, peak, matches_rated, rated_from (provisional below 10 matches) and history, its last 10 rated matches; the lists are /{sport}/ratings.",
        "operationId": "getVolleyballTeamsById",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.TeamResponse"
                        },
                        "meta": {
                          "$ref": "#/components/schemas/middleware.MetaInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    },
    "/volleyball/teams/{id}/briefing": {
      "get": {
        "description": "Insights plan feature (403 FEATURE_NOT_IN_PLAN without it). A team's current state from stored results and tables: last-5 form, streaks (overall, home, away), season home and away record, table place, gaps and zone in its current league, last and next match, injuries for the next match, coach_change (soccer: a head coach appointed in the last 45 days), suspended_out and one_booking_from_ban (soccer: the league's card rules, next league match, complete cards only). Every statement is also a sentence (lang=de, es, it, fr). Facts only. format=md returns Markdown.",
        "operationId": "getVolleyballTeamsByIdBriefing",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          },
          {
            "description": "Language of sentences and names: de, es, it, fr",
            "in": "query",
            "name": "lang",
            "schema": {
              "type": "string"
            }
          },
          {
            "description": "md for Markdown",
            "in": "query",
            "name": "format",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/insights.TeamBriefing"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "403": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Forbidden"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Team briefing (all sports; tennis: player)",
        "tags": [
          "soccer"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.02"
        }
      }
    },
    "/volleyball/teams/{id}/squad": {
      "get": {
        "description": "The team and its current players, refreshed weekly: soccer from the league squad feeds; NBA, WNBA, NCAA, Euroleague, NHL, MLB, KBO, NPB, NFL and NCAA football from team rosters. Players' details carry the feed's other attributes (soccer season stats; height, weight, college, salary, bats/throws, shot...; group is the roster section such as Pitchers or Offense).",
        "operationId": "getVolleyballTeamsByIdSquad",
        "parameters": [
          {
            "description": "Team ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "data": {
                          "$ref": "#/components/schemas/dto.SquadResponse"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "OK"
          },
          "402": {
            "$ref": "#/components/responses/PaymentRequired"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/middleware.Response"
                    },
                    {
                      "properties": {
                        "error": {
                          "$ref": "#/components/schemas/middleware.ErrorInfo"
                        }
                      },
                      "type": "object"
                    }
                  ]
                }
              }
            },
            "description": "Not Found"
          }
        },
        "security": [
          {
            "ApiKeyAuth": []
          },
          {
            "BearerAuth": []
          },
          {
            "x402": []
          }
        ],
        "summary": "Get a team's squad",
        "tags": [
          "teams"
        ],
        "x-x402": {
          "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
          "currency": "USDC",
          "discovery": "https://api.sportstatsapi.com/.well-known/x402",
          "minSinglePayment": "0.01",
          "network": "eip155:8453",
          "price": "0.005"
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://api.sportstatsapi.com/api/v1"
    }
  ]
}
