{
  "openapi": "3.1.0",
  "info": {
    "title": "API-SPORT.ru — Sport Events API",
    "description": "API для получения информации о спортивных событиях, командах, игроках и турнирах. Поддерживаются различные виды спорта (футбол, хоккей, баскетбол, теннис и другие) с детальной информацией о матчах, событиях, составах и статистике.\n\n**История изменений (changelog):** [docs.api-sport.ru/changelog](https://docs.api-sport.ru/changelog)",
    "version": "2.0.22",
    "contact": {
      "name": "API-SPORT.ru - Support",
      "url": "https://t.me/apisportbot"
    }
  },
  "servers": [
    {
      "url": "https://api.api-sport.ru",
      "description": "Сервер API"
    }
  ],
  "security": [
    {
      "ApiKeyAuth": []
    }
  ],
  "tags": [
    {
      "name": "Справочники",
      "description": "Справочные словари API (например, словарь статистики матча и игроков)."
    },
    {
      "name": "Общее",
      "description": "Общие endpoints API"
    },
    {
      "name": "Категории",
      "description": "Работа с категориями турниров (страны/регионы)"
    },
    {
      "name": "Матчи",
      "description": "Получение информации о матчах и их событиях"
    },
    {
      "name": "Поиск",
      "description": "Полнотекстовый мультиязычный поиск по игрокам, командам и турнирам"
    },
    {
      "name": "Игроки",
      "description": "Информация об игроках"
    },
    {
      "name": "Команды",
      "description": "Информация о командах и их составах"
    },
    {
      "name": "Турниры",
      "description": "Информация о турнирах и сезонах"
    }
  ],
  "paths": {
    "/v2/StatisticsDict.json": {
      "get": {
        "summary": "Словарь статистики (ключи и переводы)",
        "description": "Статический словарь ключей статистики матча и игроков для всех видов спорта с переводами на русский и испанский. Не требует авторизации. По ключам словаря можно сопоставлять значения из `Match.matchStatistics` и `homeTeam/awayTeam.lineup.players[].statistics` с их названиями и переводами. См. также страницу [Словарь статистики](https://docs.api-sport.ru/concepts/statistics-dictionary).",
        "tags": [
          "Справочники"
        ],
        "operationId": "getStatisticsDict",
        "responses": {
          "200": {
            "description": "Словарь статистики",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatisticsDictionary"
                }
              }
            }
          }
        }
      }
    },
    "/v2/SeasonStatisticsDict.json": {
      "get": {
        "summary": "Словарь сезонной статистики (ключи и переводы)",
        "description": "Статический словарь ключей сезонной статистики игроков и команд для всех видов спорта с переводами на русский и испанский. Не требует авторизации. По ключам словаря можно сопоставлять значения из ответов /players/{playerId}/statistics и /teams/{teamId}/statistics с их названиями, переводами и группами. См. также страницу [Сезонная статистика](https://docs.api-sport.ru/concepts/season-statistics).",
        "tags": [
          "Справочники"
        ],
        "operationId": "getSeasonStatisticsDict",
        "responses": {
          "200": {
            "description": "Словарь сезонной статистики",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SeasonStatisticsDictionary"
                }
              }
            }
          }
        }
      }
    },
    "/v2/sport": {
      "get": {
        "summary": "Получить список видов спорта",
        "description": "Возвращает список всех доступных видов спорта с их базовыми путями API",
        "tags": [
          "Общее"
        ],
        "operationId": "getSports",
        "responses": {
          "200": {
            "description": "Список видов спорта",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Sport"
                  }
                },
                "example": [
                  {
                    "id": 1,
                    "name": "Football",
                    "slug": "football",
                    "apiBasePath": "/v2/football/",
                    "translations": {
                      "ru": "Футбол"
                    }
                  },
                  {
                    "id": 4,
                    "name": "Ice hockey",
                    "slug": "ice-hockey",
                    "apiBasePath": "/v2/ice-hockey/",
                    "translations": {
                      "ru": "Хоккей"
                    }
                  },
                  {
                    "id": 2,
                    "name": "Basketball",
                    "slug": "basketball",
                    "apiBasePath": "/v2/basketball/",
                    "translations": {
                      "ru": "Баскетбол"
                    }
                  },
                  {
                    "id": 5,
                    "name": "Tennis",
                    "slug": "tennis",
                    "apiBasePath": "/v2/tennis/",
                    "translations": {
                      "ru": "Теннис"
                    }
                  },
                  {
                    "id": 20,
                    "name": "Table tennis",
                    "slug": "table-tennis",
                    "apiBasePath": "/v2/table-tennis/",
                    "translations": {
                      "ru": "Настольный теннис"
                    }
                  },
                  {
                    "id": 23,
                    "name": "Volleyball",
                    "slug": "volleyball",
                    "apiBasePath": "/v2/volleyball/",
                    "translations": {
                      "ru": "Волейбол"
                    }
                  },
                  {
                    "id": 72,
                    "name": "E-sports",
                    "slug": "esports",
                    "apiBasePath": "/v2/esports/",
                    "translations": {
                      "ru": "Киберспорт"
                    }
                  }
                ]
              }
            }
          },
          "401": {
            "description": "Неавторизован",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/categories": {
      "get": {
        "summary": "Получить список категорий турниров",
        "description": "Возвращает список всех категорий (стран/регионов) с количеством турниров в каждой для указанного вида спорта",
        "tags": [
          "Категории"
        ],
        "operationId": "getCategories",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          }
        ],
        "responses": {
          "200": {
            "description": "Список категорий",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "categories": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Category"
                      }
                    },
                    "defaultTournaments": {
                      "$ref": "#/components/schemas/DefaultTournaments"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          }
        }
      }
    },
    "/v2/{sportSlug}/categories/{categoryId}": {
      "get": {
        "summary": "Получить турниры в категории",
        "description": "Возвращает список всех турниров в указанной категории с их сезонами для указанного вида спорта",
        "tags": [
          "Категории"
        ],
        "operationId": "getTournamentsByCategory",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "categoryId",
            "in": "path",
            "required": true,
            "description": "ID категории",
            "schema": {
              "type": "integer",
              "example": 57
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Список турниров в категории",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "tournaments": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Tournament"
                      }
                    },
                    "defaultTournaments": {
                      "$ref": "#/components/schemas/DefaultTournaments"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID категории"
          },
          "401": {
            "description": "Неавторизован"
          }
        }
      }
    },
    "/v2/{sportSlug}/matches": {
      "get": {
        "summary": "Получить список матчей",
        "description": "Возвращает список матчей с возможностью фильтрации по различным параметрам для указанного вида спорта. По умолчанию возвращает матчи на сегодня.\n\n**Киберспорт (sportSlug=esports):** для киберспортивных матчей (CS2, Dota 2, League of Legends) в каждом матче присутствует дополнительное поле `esports`, содержащее:\n- Формат серии (Best of N) и список отдельных игр (карт)\n- Индивидуальную статистику каждого игрока за каждую игру (KDA, ADR, gold и др.)\n- Выбранных героев/чемпионов и их баны (Dota 2, LoL)\n- Раунды с исходами и сторонами (CS2)\n- Командную статистику: башни, бараки и др. (Dota 2), драконы, ингибиторы и др. (LoL)\n\n**Теннис (sportSlug=tennis):** для теннисных матчей в каждом матче присутствует дополнительное поле `tennis`, содержащее:\n- Формат серии (Best of 3/5), тип покрытия, посев игроков\n- Кто подаёт первым\n- Детализация по сетам: геймы, победитель, длительность, тайбрейк\n- Momentum-график по геймам (значение импульса, брейки подачи)\n- Point-by-point (только при запросе одного матча по matchId) — каждое очко с типом (эйс, двойная ошибка, виннер, ошибка)\n\n**Словарь всех возможных типов букмекерских коэффициентов:**\n\n<a target=\"_blank\" href=\"/v2/BkOddsDict.json\">Скачать BkOddsDict.json</a>\n\n**Текстовый поиск (`q=`):** параметр `q` переводит список в режим поиска по названиям команд и турниров (RU/EN, устойчив к опечаткам). Возвращаются до `limit` (по умолчанию 20, максимум 50) наиболее релевантных матчей; при равной релевантности приоритет у матчей, ближайших к текущему моменту. Остальные фильтры списка продолжают действовать, `page`/`page_size` в режиме поиска игнорируются.\n\n**Курсорная пагинация:** для полного обхода больших выборок (диапазон дат, все матчи команды за месяц) передайте `cursor=` (пустое значение — первый батч), далее — значение `nextCursor` из каждого ответа. Классическая пагинация `page`/`page_size` ограничена 100 страницами; курсорная — нет. Подробности — в описании параметра `cursor`.",
        "tags": [
          "Матчи"
        ],
        "operationId": "getMatches",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "date",
            "in": "query",
            "description": "Дата матчей в формате YYYY-MM-DD",
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2025-09-03"
            }
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Список ID матчей через запятую (максимум 100)",
            "schema": {
              "type": "string",
              "example": "14570728,14586240"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Текстовый поиск матчей по названиям команд и турнира — на русском или английском, включая участников пар в теннисе/настольном теннисе. Устойчив к опечаткам и частичному вводу (`реаль мадрид`, `real madr`). Результаты отсортированы по релевантности; при равной релевантности выше матчи, ближайшие к текущему моменту (ближайшая и недавние встречи — раньше матчей далёкого прошлого). Явный `sort` переключает на сортировку по времени начала. Сочетается с остальными фильтрами списка (`status`, `tournament_id`, `team_id`, `date_from`/`date_to` — в режиме поиска диапазон дат не ограничен 31 днём и т.д.). Размер ответа задаёт `limit` (максимум 25); `page`/`page_size` игнорируются; при одновременной передаче с `ids` приоритет у `ids`. Ответ поиска всегда в облегчённой форме: компактные карточки матчей без составов, статистики, событий и базовых коэффициентов (параметры `fields`, `view` и `with_pregame` в режиме поиска игнорируются; `with_bk_odds` поддерживается).",
            "schema": {
              "type": "string",
              "maxLength": 200,
              "example": "реал мадрид"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Максимум результатов текстового поиска: 1–25, по умолчанию 20. Действует только вместе с `q`.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 20,
              "example": 10
            }
          },
          {
            "name": "tournament_id",
            "in": "query",
            "description": "ID турнира для фильтрации (можно список через запятую)",
            "schema": {
              "type": "string",
              "example": "25182,77142"
            }
          },
          {
            "name": "season_id",
            "in": "query",
            "description": "ID сезона для фильтрации",
            "schema": {
              "type": "integer",
              "example": 72514
            }
          },
          {
            "name": "team_id",
            "in": "query",
            "description": "ID команды (матчи с участием команды)",
            "schema": {
              "type": "integer",
              "example": 195801
            }
          },
          {
            "name": "category_ids",
            "in": "query",
            "description": "Список ID категорий через запятую",
            "schema": {
              "type": "string",
              "example": "57,254"
            }
          },
          {
            "name": "status",
            "in": "query",
            "description": "Статус матча: одно значение или несколько через запятую (например, `inprogress,finished`). Возможные значения: notstarted, inprogress, finished, canceled, postponed, interrupted, suspended, delayed, willcontinue",
            "schema": {
              "type": "string",
              "example": "inprogress"
            }
          },
          {
            "name": "exclude_amateur",
            "in": "query",
            "description": "Исключить любительские матчи и низшие лиги. Передайте true для активации (РЕКОМЕНДУЕТСЯ использовать в каждом запросе, в будущем будет включен по умолчанию)",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Номер страницы (от 1 до 100). Если не указан, возвращаются все результаты без пагинации (максимум 6000 матчей) Значения больше 100 приводятся к 100. Для полного обхода больших выборок используйте курсорную пагинацию (`cursor=`) — она не ограничена глубиной.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 1,
              "example": 1
            }
          },
          {
            "name": "page_size",
            "in": "query",
            "description": "Количество матчей на странице (от 1 до 500). Если не указан, возвращаются 500 матчей",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 500,
              "default": 500,
              "example": 50
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Курсорная пагинация — полный обход больших выборок (например, диапазона дат) без ограничения в 100 страниц и без замедления на глубине. В первом запросе передайте параметр пустым (`cursor=`), в следующих — значение `nextCursor` из предыдущего ответа, повторяя остальные параметры фильтра без изменений. Ответ в этом режиме — `{matches, nextCursor}` без `totalMatches`; `nextCursor: null` означает конец выборки. Размер батча задаёт `page_size` (1–500, по умолчанию 500), порядок — `sort=asc|desc` (по умолчанию новые сначала). Несовместим с `page`, `ids` и `q` (вернётся 400).",
            "schema": {
              "type": "string"
            },
            "example": ""
          },
          {
            "name": "has_bk_odds",
            "in": "query",
            "description": "Фильтр: только матчи с букмекерскими коэффициентами. Передайте true для активации. Можно комбинировать с bookmaker_ids для фильтрации по конкретным букмекерам",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "with_bk_odds",
            "in": "query",
            "description": "Добавить букмекерские коэффициенты в ответ. Передайте true для активации. При включении каждый матч будет содержать поле oddsBk с детальными коэффициентами по рынкам. Можно комбинировать с bookmaker_ids",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "bookmaker_ids",
            "in": "query",
            "description": "Список ID букмекеров через запятую. Используется совместно с has_bk_odds и/или with_bk_odds для ограничения данных конкретными букмекерами. Возвращает ошибку 400 при указании невалидных ID. Доступные значения: melbet, pari, marathon, betboom",
            "schema": {
              "type": "string",
              "example": "melbet,pari,marathon,betboom"
            }
          },
          {
            "name": "date_from",
            "in": "query",
            "description": "Начало диапазона дат (включительно) в формате YYYY-MM-DD. Используется в паре с `date_to`; максимальный диапазон — 31 день. Если передан `date`, диапазон игнорируется",
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2026-07-01"
            }
          },
          {
            "name": "date_to",
            "in": "query",
            "description": "Конец диапазона дат (включительно) в формате YYYY-MM-DD. Используется в паре с `date_from`",
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2026-07-07"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "description": "Таймзона IANA (например, `Europe/London`, `Asia/Tokyo`) для расчёта границ дня в фильтрах `date`, `date_from`/`date_to` и в дефолтной выборке «матчи на сегодня». По умолчанию — `Europe/Moscow` (прежнее поведение без параметра сохраняется полностью). Влияет только на границы выборки — поля выдачи (например, `dateEvent`) не меняются. Невалидная таймзона — ошибка 400.",
            "schema": {
              "type": "string",
              "example": "Europe/London"
            }
          },
          {
            "name": "team_id_1",
            "in": "query",
            "description": "ID первой команды пары для выборки очных встреч (H2H). Работает только вместе с `team_id_2`; порядок хозяев/гостей не важен. Готовая сводка очных встреч со счётом побед — `GET /v2/{sportSlug}/h2h`",
            "schema": {
              "type": "integer",
              "example": 2829
            }
          },
          {
            "name": "team_id_2",
            "in": "query",
            "description": "ID второй команды пары для выборки очных встреч (H2H). Работает только вместе с `team_id_1`",
            "schema": {
              "type": "integer",
              "example": 2836
            }
          },
          {
            "name": "round",
            "in": "query",
            "description": "Номер тура/раунда. Рекомендуется использовать вместе с `tournament_id` и `season_id` («матчи тура»)",
            "schema": {
              "type": "integer",
              "example": 5
            }
          },
          {
            "name": "sort",
            "in": "query",
            "description": "Порядок сортировки по времени начала матча: `desc` — новые сначала (по умолчанию), `asc` — ранние сначала (удобно для «ближайших матчей»)",
            "schema": {
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ],
              "example": "asc"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Список верхнеуровневых полей ответа матча через запятую — облегчённый ответ (меньше трафика и быстрее). Поле `id` включается всегда. Допустимые значения: id, status, statusDescription, dateEvent, startTimestamp, currentMatchMinute, currentMatchSecond, overtimeLength, tournament, category, roundInfo, season, venue, referee, homeTeam, awayTeam, homeScore, awayScore, esports, tennis, liveEvents, matchStatistics, oddsBase, highlights, hasBkOdds, attendance, winner, winnerCode, pregame, bestPlayers",
            "schema": {
              "type": "string",
              "example": "id,status,startTimestamp,homeTeam,awayTeam,homeScore,awayScore,tournament"
            }
          },
          {
            "name": "view",
            "in": "query",
            "description": "Пресет состава ответа: `lite` — компактный матч (без составов, статистики, событий и коэффициентов); `odds` — lite + коэффициенты `oddsBase` (и `oddsBk` при `with_bk_odds=true`) — удобно для массовой выгрузки коэффициентов. Если передан `fields`, `view` игнорируется",
            "schema": {
              "type": "string",
              "enum": [
                "lite",
                "odds"
              ],
              "example": "lite"
            }
          },
          {
            "name": "with_pregame",
            "in": "query",
            "description": "Добавить каждому матчу списка блок `pregame` (очные встречи, серии, форма команд). Передайте true для активации. Удобно для аналитики: контекст всех матчей дня одним запросом",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Список матчей",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "totalMatches": {
                      "type": "integer",
                      "description": "Общее количество матчей (отсутствует в режиме курсорной пагинации)"
                    },
                    "page": {
                      "type": "integer",
                      "description": "Текущая страница (присутствует только при использовании пагинации)"
                    },
                    "pageSize": {
                      "type": "integer",
                      "description": "Размер страницы (присутствует только при использовании пагинации)"
                    },
                    "totalPages": {
                      "type": "integer",
                      "description": "Общее количество страниц (присутствует только при использовании пагинации)"
                    },
                    "matches": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Match"
                      }
                    },
                    "nextCursor": {
                      "type": "string",
                      "nullable": true,
                      "description": "Курсор следующего батча — присутствует только в режиме курсорной пагинации. `null` — выборка исчерпана. Передайте значение в параметре `cursor` следующего запроса, повторив остальные параметры фильтра."
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры запроса"
          },
          "401": {
            "description": "Неавторизован"
          },
          "500": {
            "description": "Внутренняя ошибка сервера"
          }
        }
      }
    },
    "/v2/{sportSlug}/matches/{matchId}": {
      "get": {
        "summary": "Получить детали матча",
        "description": "Возвращает полную информацию о конкретном матче включая составы команд для указанного вида спорта.\n\n**Киберспорт (sportSlug=esports):** для киберспортивных матчей (CS2, Dota 2, League of Legends) в ответе присутствует дополнительное поле `esports` с детальной информацией по каждой игре серии, статистикой игроков, раундами (CS2) и банами героев/чемпионов (Dota 2, LoL).\n\n**Теннис (sportSlug=tennis):** для теннисных матчей в ответе присутствует дополнительное поле `tennis` с детальной информацией по сетам (геймы, тайбрейки, длительность), посевом игроков, подачей, momentum-графиком и point-by-point данными (каждое очко с типом розыгрыша: эйс, двойная ошибка, виннер).",
        "tags": [
          "Матчи"
        ],
        "operationId": "getMatchById",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "matchId",
            "in": "path",
            "required": true,
            "description": "ID матча",
            "schema": {
              "type": "integer",
              "example": 14570728
            }
          },
          {
            "name": "with_bk_odds",
            "in": "query",
            "description": "Добавить букмекерские коэффициенты в ответ. Передайте true для активации. При включении матч будет содержать поле oddsBk с детальными коэффициентами по рынкам. Можно комбинировать с bookmaker_ids",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "bookmaker_ids",
            "in": "query",
            "description": "Список ID букмекеров через запятую. Используется совместно с with_bk_odds для ограничения данных конкретными букмекерами. Возвращает ошибку 400 при указании невалидных ID. Доступные значения: melbet, pari, marathon",
            "schema": {
              "type": "string",
              "example": "melbet,pari,marathon,betboom"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Детали матча",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Match"
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID матча"
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Матч не найден"
          }
        }
      }
    },
    "/v2/{sportSlug}/matches/{matchId}/events": {
      "get": {
        "summary": "Получить события матча",
        "description": "Возвращает хронологический список всех событий произошедших в матче (голы, карточки, замены и т.д.) для указанного вида спорта",
        "tags": [
          "Матчи"
        ],
        "operationId": "getMatchEvents",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "matchId",
            "in": "path",
            "required": true,
            "description": "ID матча",
            "schema": {
              "type": "integer",
              "example": 14570728
            }
          }
        ],
        "responses": {
          "200": {
            "description": "События матча",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "matchId": {
                      "type": "integer",
                      "description": "ID матча"
                    },
                    "totalEvents": {
                      "type": "integer",
                      "description": "Общее количество событий"
                    },
                    "events": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/LiveEvent"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID матча"
          },
          "401": {
            "description": "Неавторизован"
          }
        }
      }
    },
    "/v2/{sportSlug}/matches/{date}/tournaments": {
      "get": {
        "summary": "Получить турниры по дате",
        "description": "Возвращает список уникальных турниров для заданной даты с количеством матчей и статистикой по статусам. Поддерживает фильтрацию по турнирам, сезонам, категориям и командам.",
        "tags": [
          "Матчи"
        ],
        "operationId": "getTournamentsByDate",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "date",
            "in": "path",
            "required": true,
            "description": "Дата в формате YYYY-MM-DD",
            "schema": {
              "type": "string",
              "format": "date",
              "example": "2026-03-10"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "description": "Таймзона IANA (например, `Europe/London`, `Asia/Tokyo`) для расчёта границ дня агрегации. По умолчанию — `Europe/Moscow` (прежнее поведение без параметра сохраняется полностью). Влияет только на границы выборки — поля выдачи (например, `dateEvent`) не меняются. Невалидная таймзона — ошибка 400.",
            "schema": {
              "type": "string",
              "example": "Europe/London"
            }
          },
          {
            "name": "exclude_amateur",
            "in": "query",
            "description": "Исключить любительские и низшие лиги - true",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "tournament_id",
            "in": "query",
            "description": "ID турнира или несколько ID через запятую для фильтрации",
            "schema": {
              "type": "string",
              "example": "17,35"
            }
          },
          {
            "name": "season_id",
            "in": "query",
            "description": "ID сезона для фильтрации",
            "schema": {
              "type": "integer",
              "example": 61627
            }
          },
          {
            "name": "category_ids",
            "in": "query",
            "description": "ID категорий через запятую для фильтрации",
            "schema": {
              "type": "string",
              "example": "1,7,30"
            }
          },
          {
            "name": "team_id",
            "in": "query",
            "description": "ID команды — фильтрует матчи с участием этой команды (домашние и выездные)",
            "schema": {
              "type": "integer",
              "example": 2697
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Список турниров с количеством матчей и статистикой по статусам",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "date": {
                      "type": "string",
                      "format": "date",
                      "description": "Дата запроса",
                      "example": "2026-03-10"
                    },
                    "totalTournaments": {
                      "type": "integer",
                      "description": "Общее количество турниров",
                      "example": 45
                    },
                    "totalMatches": {
                      "type": "integer",
                      "description": "Общее количество матчей за эту дату",
                      "example": 230
                    },
                    "tournaments": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "properties": {
                          "id": {
                            "type": "integer",
                            "description": "ID турнира",
                            "example": 853
                          },
                          "name": {
                            "type": "string",
                            "description": "Название турнира",
                            "example": "Club Friendly Games"
                          },
                          "translations": {
                            "type": "object",
                            "properties": {
                              "ru": {
                                "type": "string",
                                "description": "Название на русском",
                                "example": "Товарищеские матчи"
                              }
                            }
                          },
                          "category": {
                            "type": "object",
                            "properties": {
                              "id": {
                                "type": "integer",
                                "description": "ID категории",
                                "example": 1468
                              },
                              "name": {
                                "type": "string",
                                "description": "Название категории",
                                "example": "World"
                              },
                              "translations": {
                                "type": "object",
                                "description": "Переводы названия категории",
                                "properties": {
                                  "ru": {
                                    "type": "string",
                                    "example": "Мир"
                                  }
                                }
                              },
                              "image": {
                                "type": "string",
                                "nullable": true,
                                "description": "URL изображения категории"
                              }
                            }
                          },
                          "image": {
                            "type": "string",
                            "description": "URL изображения турнира",
                            "example": "https://images.api-sport.ru/unique-tournament-853"
                          },
                          "matchesCount": {
                            "type": "integer",
                            "description": "Количество матчей в турнире за эту дату",
                            "example": 15
                          },
                          "statusBreakdown": {
                            "type": "object",
                            "description": "Статистика матчей по статусам",
                            "properties": {
                              "notstarted": {
                                "type": "integer",
                                "description": "Не начавшиеся матчи",
                                "example": 5
                              },
                              "inprogress": {
                                "type": "integer",
                                "description": "Матчи в процессе",
                                "example": 2
                              },
                              "finished": {
                                "type": "integer",
                                "description": "Завершённые матчи",
                                "example": 6
                              },
                              "canceled": {
                                "type": "integer",
                                "description": "Отменённые матчи",
                                "example": 0
                              },
                              "postponed": {
                                "type": "integer",
                                "description": "Отложенные матчи",
                                "example": 1
                              },
                              "interrupted": {
                                "type": "integer",
                                "description": "Прерванные матчи",
                                "example": 0
                              },
                              "suspended": {
                                "type": "integer",
                                "description": "Приостановленные матчи",
                                "example": 0
                              },
                              "delayed": {
                                "type": "integer",
                                "description": "Задержанные матчи",
                                "example": 1
                              },
                              "willcontinue": {
                                "type": "integer",
                                "description": "Матчи, которые будут продолжены",
                                "example": 0
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Некорректный формат даты"
          },
          "401": {
            "description": "Неавторизован"
          }
        }
      }
    },
    "/v2/{sportSlug}/matches/{yearMonth}/calendar": {
      "get": {
        "summary": "Календарь матчей за месяц",
        "description": "Возвращает сводку по каждому дню указанного месяца: количество матчей и количество уникальных турниров. Включает все дни месяца, даже без матчей (с нулевыми значениями). Поддерживает фильтрацию по турнирам, сезонам, категориям и командам.",
        "tags": [
          "Матчи"
        ],
        "operationId": "getCalendarByMonth",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "yearMonth",
            "in": "path",
            "required": true,
            "description": "Год и месяц в формате YYYY-MM",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}$",
              "example": "2026-03"
            }
          },
          {
            "name": "tz",
            "in": "query",
            "description": "Таймзона IANA (например, `Europe/London`, `Asia/Tokyo`) для расчёта границ месяца и атрибуции матчей дням. По умолчанию — `Europe/Moscow` (прежнее поведение без параметра сохраняется полностью). Влияет только на границы выборки — поля выдачи (например, `dateEvent`) не меняются. Невалидная таймзона — ошибка 400.",
            "schema": {
              "type": "string",
              "example": "Europe/London"
            }
          },
          {
            "name": "exclude_amateur",
            "in": "query",
            "description": "Исключить любительские и низшие лиги - true",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "tournament_id",
            "in": "query",
            "description": "ID турнира или несколько ID через запятую для фильтрации",
            "schema": {
              "type": "string",
              "example": "17,35"
            }
          },
          {
            "name": "season_id",
            "in": "query",
            "description": "ID сезона для фильтрации",
            "schema": {
              "type": "integer",
              "example": 61627
            }
          },
          {
            "name": "category_ids",
            "in": "query",
            "description": "ID категорий через запятую для фильтрации",
            "schema": {
              "type": "string",
              "example": "1,7,30"
            }
          },
          {
            "name": "team_id",
            "in": "query",
            "description": "ID команды — фильтрует матчи с участием этой команды (домашние и выездные)",
            "schema": {
              "type": "integer",
              "example": 2697
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Сводка матчей по дням месяца (календарь событий)",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "month": {
                      "type": "string",
                      "description": "Запрошенный месяц",
                      "example": "2026-03"
                    },
                    "totalDays": {
                      "type": "integer",
                      "description": "Количество дней в месяце",
                      "example": 31
                    },
                    "days": {
                      "type": "array",
                      "description": "Массив дней месяца (включая дни без матчей)",
                      "items": {
                        "type": "object",
                        "properties": {
                          "date": {
                            "type": "string",
                            "format": "date",
                            "description": "Дата дня",
                            "example": "2026-03-01"
                          },
                          "totalTournaments": {
                            "type": "integer",
                            "description": "Количество уникальных турниров в этот день",
                            "example": 45
                          },
                          "totalMatches": {
                            "type": "integer",
                            "description": "Количество матчей в этот день",
                            "example": 230
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Некорректный формат месяца"
          },
          "401": {
            "description": "Неавторизован"
          }
        }
      }
    },
    "/v2/{sportSlug}/players": {
      "get": {
        "summary": "Получить список игроков",
        "description": "Возвращает список игроков по их ID, по ID команды или по текстовому запросу для указанного вида спорта. Обязателен один из параметров: ids, team_id или q",
        "tags": [
          "Игроки"
        ],
        "operationId": "getPlayers",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Список ID игроков через запятую (максимум 100)",
            "schema": {
              "type": "string",
              "example": "123456,789012"
            }
          },
          {
            "name": "team_id",
            "in": "query",
            "description": "ID команды для получения всех её игроков",
            "schema": {
              "type": "integer",
              "example": 195801
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Полнотекстовый поиск по имени игрока (мультиязычный: английский, русский). Минимум 1 символ",
            "schema": {
              "type": "string",
              "example": "Messi"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Максимальное количество результатов поиска (только с параметром q)",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Смещение для пагинации результатов поиска (только с параметром q, максимум 500)",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 500,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Список игроков",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "totalPlayers": {
                      "type": "integer",
                      "description": "Общее количество игроков"
                    },
                    "players": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Player"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры или отсутствуют обязательные параметры"
          },
          "401": {
            "description": "Неавторизован"
          },
          "500": {
            "description": "Внутренняя ошибка сервера"
          }
        }
      }
    },
    "/v2/{sportSlug}/players/{playerId}/statistics/seasons": {
      "get": {
        "summary": "Сезоны со статистикой игрока",
        "description": "Список турниров и сезонов, за которые у игрока доступна сезонная статистика, с доступными типами статистики по каждому сезону. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна. См. также: https://docs.api-sport.ru/concepts/season-statistics.",
        "tags": [
          "Игроки"
        ],
        "operationId": "getPlayerStatisticsSeasons",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "playerId",
            "in": "path",
            "required": true,
            "description": "ID игрока",
            "schema": {
              "type": "integer",
              "example": 861608
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Список турниров и сезонов (может быть пустым)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerStatisticsSeasonsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID игрока"
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Игрок не найден"
          }
        }
      }
    },
    "/v2/{sportSlug}/players/{playerId}/statistics": {
      "get": {
        "summary": "Сезонная статистика игрока",
        "description": "Сезонная статистика игрока в указанном турнире и сезоне по типам статистики (overall, regularSeason, playoffs, home, away, ...). Названия и переводы ключей показателей — в словаре /v2/SeasonStatisticsDict.json. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна. См. также: https://docs.api-sport.ru/concepts/season-statistics.",
        "tags": [
          "Игроки"
        ],
        "operationId": "getPlayerSeasonStatistics",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "playerId",
            "in": "path",
            "required": true,
            "description": "ID игрока",
            "schema": {
              "type": "integer",
              "example": 861608
            }
          },
          {
            "name": "tournament_id",
            "in": "query",
            "required": true,
            "description": "ID турнира (из списка /statistics/seasons)",
            "schema": {
              "type": "integer",
              "example": 132
            }
          },
          {
            "name": "season_id",
            "in": "query",
            "required": true,
            "description": "ID сезона (из списка /statistics/seasons)",
            "schema": {
              "type": "integer",
              "example": 76986
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Тип статистики. Без параметра возвращаются все доступные типы. Множество значений открытое; наблюдаемые: overall, regularSeason, playoffs, home, away, mainDraw, top16.",
            "schema": {
              "type": "string",
              "example": "overall"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Сезонная статистика игрока",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerSeasonStatisticsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры (ID, tournament_id, season_id или type)"
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Игрок не найден, статистика сезона отсутствует или запрошенный тип недоступен (в ответе availableTypes — доступные типы)"
          }
        }
      }
    },
    "/v2/{sportSlug}/players/{playerId}/statistics/latest": {
      "get": {
        "summary": "Последняя статистика игрока (one-shot)",
        "description": "Последняя актуальная сезонная статистика игрока одним запросом — упрощённый вариант без предварительного запроса списка сезонов. Выбор данных: турнир — первый в списке по релевантности (или заданный `tournament_id`); сезон — новейший, за который уже собраны данные (при отсутствии данных в новейшем сезоне возвращается предыдущий, при отсутствии в турнире — следующий турнир списка, если `tournament_id` не задан); тип — `overall`, иначе `regularSeason`, иначе `mainDraw`, иначе первый доступный (или заданный `type` — тогда возвращается последний сезон, где этот тип есть). Фактически выбранные турнир, сезон и тип всегда видны в полях ответа. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна. См. также: https://docs.api-sport.ru/concepts/season-statistics.",
        "tags": [
          "Игроки"
        ],
        "operationId": "getPlayerLatestSeasonStatistics",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "playerId",
            "in": "path",
            "required": true,
            "description": "ID игрока",
            "schema": {
              "type": "integer",
              "example": 861608
            }
          },
          {
            "name": "tournament_id",
            "in": "query",
            "required": false,
            "description": "Ограничить выбор конкретным турниром (из списка /statistics/seasons). Без параметра берётся первый турнир по релевантности.",
            "schema": {
              "type": "integer",
              "example": 132
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Тип статистики: возвращается последний сезон, где этот тип есть. Без параметра тип выбирается автоматически (overall → regularSeason → mainDraw → первый доступный). Множество значений открытое.",
            "schema": {
              "type": "string",
              "example": "regularSeason"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Последняя сезонная статистика игрока",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerLatestSeasonStatisticsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры (ID, tournament_id или type)"
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Игрок не найден, статистики нет (в т.ч. заданный tournament_id вне списка) или запрошенный тип нигде не найден (в ответе availableTypes)"
          }
        }
      }
    },
    "/v2/{sportSlug}/players/{playerId}/profile": {
      "get": {
        "summary": "Профиль игрока",
        "description": "Расширенный профиль игрока: характеристики (сильные/слабые стороны, football), атрибуты по годам (football), статистика за сборную (football), история трансферов (football, basketball), рыночный блок (трансферная стоимость и срок контракта), рабочая нога и детализированные позиции (football). Блоки, недоступные для вида спорта, отдаются как null или пустой массив.",
        "tags": [
          "Игроки"
        ],
        "operationId": "getPlayerProfile",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "playerId",
            "in": "path",
            "required": true,
            "description": "ID игрока",
            "schema": {
              "type": "integer",
              "example": 868275
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Профиль игрока",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerProfileResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID игрока"
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Игрок не найден"
          }
        }
      }
    },
    "/v2/{sportSlug}/players/{playerId}/matches": {
      "get": {
        "summary": "Последние матчи игрока",
        "description": "Последние завершённые матчи игрока, новые сначала. По умолчанию — ВСЕ матчи, в которых игрок выходил в составе, независимо от команды: клубные и за сборную (каждый элемент — `played=true` со строкой статистики). Каждый элемент — компактная карточка матча (турнир, сезон, раунд, команды, счёт, исход) плюс участие игрока: позиция, номер, капитанство, выход на замену и плоский объект показателей `statistics`. Командный режим — `team_id=<id>` (конкретная команда) или `current_team=true` (текущая команда игрока): возвращаются все последние матчи этой команды, включая те, где игрок не выходил (`played=false`, `statistics=null`); фильтр `played_only=true` в командном режиме оставляет только сыгранные. Для видов спорта без составов (теннис, настольный теннис, волейбол, киберспорт) используйте командный режим — он работает как история матчей команды/пары игрока с `played=false`.",
        "tags": [
          "Игроки"
        ],
        "operationId": "getPlayerMatches",
        "x-sports": [
          "football",
          "ice-hockey",
          "basketball",
          "tennis",
          "table-tennis",
          "esports",
          "volleyball"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "playerId",
            "in": "path",
            "required": true,
            "description": "ID игрока",
            "schema": {
              "type": "integer",
              "example": 868275
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Сколько матчей со статистикой игрока вернуть (1–20, новые сначала). По умолчанию 10",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10,
              "example": 10
            }
          },
          {
            "name": "team_id",
            "in": "query",
            "description": "Командный режим: история матчей указанной команды (включая матчи, где игрок не выходил, — `played=false`). Без team-параметров возвращаются все матчи игрока по составам. При одновременной передаче с `current_team` приоритет у `team_id`.",
            "schema": {
              "type": "integer",
              "example": 5257
            }
          },
          {
            "name": "current_team",
            "in": "query",
            "required": false,
            "description": "Командный режим по текущей команде игрока (клубу из его профиля). Передайте true для активации; эквивалент `team_id` с ID текущей команды.",
            "schema": {
              "type": "boolean"
            },
            "example": true
          },
          {
            "name": "tournament_id",
            "in": "query",
            "description": "Оставить только матчи указанного турнира",
            "schema": {
              "type": "integer",
              "example": 17
            }
          },
          {
            "name": "season_id",
            "in": "query",
            "description": "Оставить только матчи указанного сезона",
            "schema": {
              "type": "integer",
              "example": 76986
            }
          },
          {
            "name": "played_only",
            "in": "query",
            "required": false,
            "description": "Только матчи, в которых у игрока есть строка статистики (played=true). Действует в командном режиме (`team_id`/`current_team`); в режиме по умолчанию все элементы и так сыгранные. Передайте true для активации.",
            "schema": {
              "type": "boolean"
            },
            "example": true
          }
        ],
        "responses": {
          "200": {
            "description": "История матчей игрока со статистикой",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlayerMatchesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Игрок не найден",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/teams": {
      "get": {
        "summary": "Получить список команд",
        "description": "Возвращает список команд по их ID или по текстовому запросу вместе с составами игроков для указанного вида спорта. Обязателен один из параметров: ids или q",
        "tags": [
          "Команды"
        ],
        "operationId": "getTeams",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Список ID команд через запятую (максимум 100)",
            "schema": {
              "type": "string",
              "example": "195801,195800"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Полнотекстовый поиск по названию команды (мультиязычный: английский, русский). Минимум 1 символ",
            "schema": {
              "type": "string",
              "example": "Barcelona"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Максимальное количество результатов поиска (только с параметром q)",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Смещение для пагинации результатов поиска (только с параметром q, максимум 500)",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 500,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Список команд с игроками",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "totalTeams": {
                      "type": "integer",
                      "description": "Общее количество команд"
                    },
                    "teams": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Team"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Некорректные или отсутствующие параметры"
          },
          "401": {
            "description": "Неавторизован"
          },
          "500": {
            "description": "Внутренняя ошибка сервера"
          }
        }
      }
    },
    "/v2/{sportSlug}/teams/{teamId}/statistics/seasons": {
      "get": {
        "summary": "Сезоны со статистикой команды",
        "description": "Список турниров и сезонов, за которые у команды доступна сезонная статистика, с доступными типами статистики по каждому сезону. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна. См. также: https://docs.api-sport.ru/concepts/season-statistics.",
        "tags": [
          "Команды"
        ],
        "operationId": "getTeamStatisticsSeasons",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "ID команды",
            "schema": {
              "type": "integer",
              "example": 3427
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Список турниров и сезонов (может быть пустым)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamStatisticsSeasonsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID команды"
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Команда не найдена"
          }
        }
      }
    },
    "/v2/{sportSlug}/teams/{teamId}/statistics": {
      "get": {
        "summary": "Сезонная статистика команды",
        "description": "Сезонная статистика команды в указанном турнире и сезоне по типам статистики (overall, regularSeason, playoffs, home, away, ...). Названия и переводы ключей показателей — в словаре /v2/SeasonStatisticsDict.json. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна. См. также: https://docs.api-sport.ru/concepts/season-statistics.",
        "tags": [
          "Команды"
        ],
        "operationId": "getTeamSeasonStatistics",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "ID команды",
            "schema": {
              "type": "integer",
              "example": 3427
            }
          },
          {
            "name": "tournament_id",
            "in": "query",
            "required": true,
            "description": "ID турнира (из списка /statistics/seasons)",
            "schema": {
              "type": "integer",
              "example": 132
            }
          },
          {
            "name": "season_id",
            "in": "query",
            "required": true,
            "description": "ID сезона (из списка /statistics/seasons)",
            "schema": {
              "type": "integer",
              "example": 76986
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Тип статистики. Без параметра возвращаются все доступные типы. Множество значений открытое; наблюдаемые: overall, regularSeason, playoffs, home, away, mainDraw, top16.",
            "schema": {
              "type": "string",
              "example": "overall"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Сезонная статистика команды",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamSeasonStatisticsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры (ID, tournament_id, season_id или type)"
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Команда не найдена, статистика сезона отсутствует или запрошенный тип недоступен (в ответе availableTypes — доступные типы)"
          }
        }
      }
    },
    "/v2/{sportSlug}/teams/{teamId}/statistics/latest": {
      "get": {
        "summary": "Последняя статистика команды (one-shot)",
        "description": "Последняя актуальная сезонная статистика команды одним запросом — упрощённый вариант без предварительного запроса списка сезонов. Выбор данных: турнир — первый в списке по релевантности (или заданный `tournament_id`); сезон — новейший, за который уже собраны данные (при отсутствии данных в новейшем сезоне возвращается предыдущий, при отсутствии в турнире — следующий турнир списка, если `tournament_id` не задан); тип — `overall`, иначе `regularSeason`, иначе `mainDraw`, иначе первый доступный (или заданный `type` — тогда возвращается последний сезон, где этот тип есть). Фактически выбранные турнир, сезон и тип всегда видны в полях ответа. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна. См. также: https://docs.api-sport.ru/concepts/season-statistics.",
        "tags": [
          "Команды"
        ],
        "operationId": "getTeamLatestSeasonStatistics",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "ID команды",
            "schema": {
              "type": "integer",
              "example": 3427
            }
          },
          {
            "name": "tournament_id",
            "in": "query",
            "required": false,
            "description": "Ограничить выбор конкретным турниром (из списка /statistics/seasons). Без параметра берётся первый турнир по релевантности.",
            "schema": {
              "type": "integer",
              "example": 132
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Тип статистики: возвращается последний сезон, где этот тип есть. Без параметра тип выбирается автоматически (overall → regularSeason → mainDraw → первый доступный). Множество значений открытое.",
            "schema": {
              "type": "string",
              "example": "regularSeason"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Последняя сезонная статистика команды",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamLatestSeasonStatisticsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры (ID, tournament_id или type)"
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Команда не найдена, статистики нет (в т.ч. заданный tournament_id вне списка) или запрошенный тип нигде не найден (в ответе availableTypes)"
          }
        }
      }
    },
    "/v2/{sportSlug}/search": {
      "get": {
        "summary": "Полнотекстовый поиск",
        "description": "Мультиязычный поиск по игрокам, командам и турнирам. Поддерживает русский и английский языки. Результаты ранжируются по релевантности и популярности.",
        "tags": [
          "Поиск"
        ],
        "operationId": "search",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Поисковый запрос (мин. 1 символ). Поддерживает русский и английский",
            "schema": {
              "type": "string",
              "example": "Messi"
            }
          },
          {
            "name": "type",
            "in": "query",
            "description": "Типы сущностей для поиска через запятую. По умолчанию ищет по всем типам",
            "schema": {
              "type": "string",
              "enum": [
                "player",
                "team",
                "tournament"
              ],
              "example": "player,team"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Максимальное количество результатов на тип сущности",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Смещение для пагинации (максимум 500)",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 500,
              "default": 0
            }
          },
          {
            "name": "country",
            "in": "query",
            "description": "Фильтр по стране (ISO Alpha-2 код)",
            "schema": {
              "type": "string",
              "example": "ES"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Результаты поиска",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                }
              }
            }
          },
          "400": {
            "description": "Отсутствует обязательный параметр q или некорректный тип"
          },
          "401": {
            "description": "Неавторизован"
          },
          "500": {
            "description": "Внутренняя ошибка сервера"
          }
        }
      }
    },
    "/v2/{sportSlug}/tournaments": {
      "get": {
        "summary": "Получить список турниров",
        "description": "Возвращает список турниров по их ID или по текстовому запросу для указанного вида спорта. Обязателен один из параметров: ids или q",
        "tags": [
          "Турниры"
        ],
        "operationId": "getTournaments",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "ids",
            "in": "query",
            "description": "Список ID турниров через запятую (максимум 100)",
            "schema": {
              "type": "string",
              "example": "7,17,23"
            }
          },
          {
            "name": "q",
            "in": "query",
            "description": "Полнотекстовый поиск по названию турнира (мультиязычный: английский, русский). Минимум 1 символ",
            "schema": {
              "type": "string",
              "example": "Champions League"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Максимальное количество результатов поиска (только с параметром q)",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Смещение для пагинации результатов поиска (только с параметром q, максимум 500)",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 500,
              "default": 0
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Список турниров",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "totalTournaments": {
                      "type": "integer",
                      "description": "Общее количество турниров"
                    },
                    "tournaments": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Tournament"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Отсутствуют обязательные параметры"
          },
          "401": {
            "description": "Неавторизован"
          },
          "500": {
            "description": "Внутренняя ошибка сервера"
          }
        }
      }
    },
    "/v2/{sportSlug}/tournament/{tournamentId}": {
      "get": {
        "summary": "Получить информацию о турнире",
        "description": "Возвращает детальную информацию о турнире включая связанные турниры и дивизионы для указанного вида спорта",
        "tags": [
          "Турниры"
        ],
        "operationId": "getTournamentById",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "tournamentId",
            "in": "path",
            "required": true,
            "description": "ID турнира",
            "schema": {
              "type": "integer",
              "example": 25182
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Информация о турнире",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tournament"
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID турнира"
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Турнир не найден"
          }
        }
      }
    },
    "/v2/{sportSlug}/tournament/{tournamentId}/standings": {
      "get": {
        "summary": "Текущая таблица турнира",
        "description": "Шорткат «актуальная турнирная таблица»: сезоны турнира просматриваются от новейшего к старым, отдаётся таблица первого сезона с непустыми standings (свежий сезон без таблиц пропускается — используется предыдущий). Для кубковых турниров без таблиц вернётся 404. Таблицы конкретного сезона — `GET /v2/{sportSlug}/tournament/{tournamentId}/seasons/{seasonId}`",
        "tags": [
          "Турниры"
        ],
        "operationId": "getTournamentStandings",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "tournamentId",
            "in": "path",
            "required": true,
            "description": "ID турнира",
            "schema": {
              "type": "integer",
              "example": 17
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Актуальная таблица турнира",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TournamentStandingsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID турнира",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Не авторизован"
          },
          "404": {
            "description": "Турнир не найден либо у турнира нет сезонов с таблицами",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/tournament/{tournamentId}/seasons": {
      "get": {
        "summary": "Получить сезоны турнира",
        "description": "Возвращает список всех сезонов для указанного турнира отсортированных по году для указанного вида спорта",
        "tags": [
          "Турниры"
        ],
        "operationId": "getTournamentSeasons",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "tournamentId",
            "in": "path",
            "required": true,
            "description": "ID турнира",
            "schema": {
              "type": "integer",
              "example": 25182
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Список сезонов",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "seasons": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Season"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID турнира"
          },
          "401": {
            "description": "Неавторизован"
          }
        }
      }
    },
    "/v2/{sportSlug}/tournament/{tournamentId}/seasons/{seasonId}": {
      "get": {
        "summary": "Получить детали сезона",
        "description": "Возвращает детальную информацию о конкретном сезоне турнира: туры, группы, плей-офф, турнирные таблицы (standings) и сетки плей-офф (cupTrees).",
        "tags": [
          "Турниры"
        ],
        "operationId": "getSeasonDetails",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "tournamentId",
            "in": "path",
            "required": true,
            "description": "ID турнира",
            "schema": {
              "type": "integer",
              "example": 25182
            }
          },
          {
            "name": "seasonId",
            "in": "path",
            "required": true,
            "description": "ID сезона",
            "schema": {
              "type": "integer",
              "example": 72514
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Детали сезона",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SeasonDetails"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные ID параметры"
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Сезон не найден"
          }
        }
      }
    },
    "/v2/{sportSlug}/tournament/{tournamentId}/seasons/{seasonId}/leaders": {
      "get": {
        "tags": [
          "Турниры"
        ],
        "summary": "Лидеры сезона по показателю",
        "description": "Лидерборд сезона турнира по любому показателю сезонной статистики: бомбардиры (`sort_by=goals`), ассистенты (`assists`), рейтинг (`rating`) и ещё сотни ключей — полный словарь с переводами и группами в `/v2/SeasonStatisticsDict.json` (ключи различаются по видам спорта). Работает для игроков (`entity=players`, по умолчанию) и команд (`entity=teams`).\n\nДоступность данных: игроки — football, basketball, ice-hockey, volleyball; команды — football, basketball, ice-hockey, tennis, volleyball (в теннисе команда = игрок). У esports и table-tennis сезонной статистики нет. Список сезонов турнира — `GET /v2/{sportSlug}/tournament/{tournamentId}/seasons`.",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "tournamentId",
            "in": "path",
            "required": true,
            "description": "ID турнира",
            "schema": {
              "type": "integer",
              "example": 17
            }
          },
          {
            "name": "seasonId",
            "in": "path",
            "required": true,
            "description": "ID сезона",
            "schema": {
              "type": "integer",
              "example": 76986
            }
          },
          {
            "name": "entity",
            "in": "query",
            "required": false,
            "description": "Тип сущностей лидерборда: игроки или команды.",
            "schema": {
              "type": "string",
              "enum": [
                "players",
                "teams"
              ],
              "default": "players"
            }
          },
          {
            "name": "sort_by",
            "in": "query",
            "required": true,
            "description": "Ключ показателя, по которому строится лидерборд (например `goals`, `assists`, `rating`). Допустимые ключи — в словаре `/v2/SeasonStatisticsDict.json` для выбранного вида спорта и типа сущности; неизвестный ключ — ошибка 400.",
            "schema": {
              "type": "string",
              "example": "goals"
            }
          },
          {
            "name": "order",
            "in": "query",
            "required": false,
            "description": "Порядок сортировки значений показателя.",
            "schema": {
              "type": "string",
              "enum": [
                "desc",
                "asc"
              ],
              "default": "desc"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Размер страницы лидерборда.",
            "schema": {
              "type": "integer",
              "default": 20,
              "minimum": 1,
              "maximum": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "description": "Смещение от начала лидерборда.",
            "schema": {
              "type": "integer",
              "default": 0,
              "minimum": 0,
              "maximum": 500
            }
          },
          {
            "name": "stats",
            "in": "query",
            "required": false,
            "description": "Какие показатели вернуть в `items.statistics` (CSV ключей словаря). По умолчанию — все показатели разреза; ключ `sort_by` включается всегда.",
            "schema": {
              "type": "string",
              "example": "goals,assists,rating"
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Разрез статистики (`overall`, `regularSeason`, `playoffs`, `home`, `away`, `mainDraw`, ...). По умолчанию — основной доступный разрез сезона. Доступные разрезы сезона видны в `GET /v2/{sportSlug}/players/{playerId}/statistics/seasons` (поле `types`).",
            "schema": {
              "type": "string",
              "example": "overall"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Лидерборд сезона",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SeasonLeadersResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры (в т.ч. неизвестный ключ sort_by/stats)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Сезонная статистика для этого сезона турнира не найдена",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/matches/live": {
      "get": {
        "summary": "Live-матчи (идущие сейчас)",
        "description": "Все матчи выбранного вида спорта, идущие прямо сейчас (статус `inprogress`), — одним запросом, без параметров дат и пагинации. Удобно для ботов, виджетов и как REST-альтернатива WebSocket. Поддерживает облегчённые ответы (`fields`/`view`), блок `pregame` и букмекерские коэффициенты",
        "tags": [
          "Матчи"
        ],
        "operationId": "getLiveMatches",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "exclude_amateur",
            "in": "query",
            "description": "Исключить любительские матчи и низшие лиги. Передайте true для активации (РЕКОМЕНДУЕТСЯ использовать в каждом запросе, в будущем будет включен по умолчанию)",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Список верхнеуровневых полей ответа матча через запятую — облегчённый ответ (меньше трафика и быстрее). Поле `id` включается всегда. Допустимые значения: id, status, statusDescription, dateEvent, startTimestamp, currentMatchMinute, currentMatchSecond, overtimeLength, tournament, category, roundInfo, season, venue, referee, homeTeam, awayTeam, homeScore, awayScore, esports, tennis, liveEvents, matchStatistics, oddsBase, highlights, hasBkOdds, attendance, winner, winnerCode, pregame, bestPlayers",
            "schema": {
              "type": "string",
              "example": "id,status,startTimestamp,homeTeam,awayTeam,homeScore,awayScore,tournament"
            }
          },
          {
            "name": "view",
            "in": "query",
            "description": "Пресет состава ответа: `lite` — компактный матч (без составов, статистики, событий и коэффициентов); `odds` — lite + коэффициенты `oddsBase` (и `oddsBk` при `with_bk_odds=true`) — удобно для массовой выгрузки коэффициентов. Если передан `fields`, `view` игнорируется",
            "schema": {
              "type": "string",
              "enum": [
                "lite",
                "odds"
              ],
              "example": "lite"
            }
          },
          {
            "name": "with_pregame",
            "in": "query",
            "description": "Добавить каждому матчу списка блок `pregame` (очные встречи, серии, форма команд). Передайте true для активации. Удобно для аналитики: контекст всех матчей дня одним запросом",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "with_bk_odds",
            "in": "query",
            "description": "Добавить букмекерские коэффициенты в ответ. Передайте true для активации. При включении каждый матч будет содержать поле oddsBk с детальными коэффициентами по рынкам. Можно комбинировать с bookmaker_ids",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "bookmaker_ids",
            "in": "query",
            "description": "Список ID букмекеров через запятую. Используется совместно с has_bk_odds и/или with_bk_odds для ограничения данных конкретными букмекерами. Возвращает ошибку 400 при указании невалидных ID. Доступные значения: melbet, pari, marathon, betboom",
            "schema": {
              "type": "string",
              "example": "melbet,pari,marathon,betboom"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Список live-матчей",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "totalMatches": {
                      "type": "integer",
                      "description": "Число live-матчей",
                      "example": 42
                    },
                    "matches": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Match"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          }
        }
      }
    },
    "/v2/{sportSlug}/matches/{matchId}/shotmap": {
      "get": {
        "summary": "Карта ударов матча (shotmap)",
        "description": "Все удары/броски матча с деталями. Футбол: xG/xGOT каждого удара, координаты игрока и створа, часть тела, игровая ситуация, вратарь. Хоккей: координаты и тип броска. Для видов спорта без данных возвращается пустой массив",
        "tags": [
          "Матчи"
        ],
        "operationId": "getMatchShotmap",
        "x-sports": [
          "football",
          "ice-hockey"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "matchId",
            "in": "path",
            "required": true,
            "description": "ID матча",
            "schema": {
              "type": "integer",
              "example": 12812998
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Карта ударов",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MatchShotmapResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID матча",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Матч не найден",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/matches/{matchId}/momentum": {
      "get": {
        "summary": "График давления матча (momentum)",
        "description": "Точки графика давления/инициативы по ходу матча: положительные значения — перевес хозяев, отрицательные — гостей. Футбол/баскетбол/хоккей — по минутам; теннис — по геймам с отметками брейков. Для видов спорта без данных возвращается пустой массив точек",
        "tags": [
          "Матчи"
        ],
        "operationId": "getMatchMomentum",
        "x-sports": [
          "football",
          "basketball",
          "ice-hockey",
          "tennis"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "matchId",
            "in": "path",
            "required": true,
            "description": "ID матча",
            "schema": {
              "type": "integer",
              "example": 12812998
            }
          }
        ],
        "responses": {
          "200": {
            "description": "График давления",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MatchMomentumResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID матча",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Матч не найден",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/matches/{matchId}/average-positions": {
      "get": {
        "summary": "Средние позиции игроков в матче",
        "description": "Средние координаты каждого игрока на поле за матч (тепловая схема расстановки) и список замен. Для видов спорта без данных возвращаются пустые массивы",
        "tags": [
          "Матчи"
        ],
        "operationId": "getMatchAveragePositions",
        "x-sports": [
          "football",
          "basketball",
          "ice-hockey"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "matchId",
            "in": "path",
            "required": true,
            "description": "ID матча",
            "schema": {
              "type": "integer",
              "example": 12812998
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Средние позиции",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MatchAveragePositionsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректный ID матча",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Матч не найден",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/teams/{teamId}/matches": {
      "get": {
        "summary": "Матчи команды: последние и ближайшие",
        "description": "Завершённые и предстоящие матчи команды одним запросом — идеально для ботов и виджетов («последние 5 и ближайшие 5»). Списки управляются параметрами `last` и `next`; поддерживаются облегчённые ответы (`fields`/`view`), блок `pregame` и букмекерские коэффициенты",
        "tags": [
          "Команды"
        ],
        "operationId": "getTeamMatches",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "ID команды",
            "schema": {
              "type": "integer",
              "example": 3427
            }
          },
          {
            "name": "last",
            "in": "query",
            "description": "Сколько последних завершённых матчей вернуть (0–50). По умолчанию 5",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 5,
              "example": 5
            }
          },
          {
            "name": "next",
            "in": "query",
            "description": "Сколько ближайших предстоящих матчей вернуть (0–50). По умолчанию 5",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "maximum": 50,
              "default": 5,
              "example": 5
            }
          },
          {
            "name": "tournament_id",
            "in": "query",
            "description": "Ограничить выборку турниром(ами): один ID или несколько через запятую",
            "schema": {
              "type": "string",
              "example": "17,23"
            }
          },
          {
            "name": "fields",
            "in": "query",
            "description": "Список верхнеуровневых полей ответа матча через запятую — облегчённый ответ (меньше трафика и быстрее). Поле `id` включается всегда. Допустимые значения: id, status, statusDescription, dateEvent, startTimestamp, currentMatchMinute, currentMatchSecond, overtimeLength, tournament, category, roundInfo, season, venue, referee, homeTeam, awayTeam, homeScore, awayScore, esports, tennis, liveEvents, matchStatistics, oddsBase, highlights, hasBkOdds, attendance, winner, winnerCode, pregame, bestPlayers",
            "schema": {
              "type": "string",
              "example": "id,status,startTimestamp,homeTeam,awayTeam,homeScore,awayScore,tournament"
            }
          },
          {
            "name": "view",
            "in": "query",
            "description": "Пресет состава ответа: `lite` — компактный матч (без составов, статистики, событий и коэффициентов); `odds` — lite + коэффициенты `oddsBase` (и `oddsBk` при `with_bk_odds=true`) — удобно для массовой выгрузки коэффициентов. Если передан `fields`, `view` игнорируется",
            "schema": {
              "type": "string",
              "enum": [
                "lite",
                "odds"
              ],
              "example": "lite"
            }
          },
          {
            "name": "with_pregame",
            "in": "query",
            "description": "Добавить каждому матчу списка блок `pregame` (очные встречи, серии, форма команд). Передайте true для активации. Удобно для аналитики: контекст всех матчей дня одним запросом",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "with_bk_odds",
            "in": "query",
            "description": "Добавить букмекерские коэффициенты в ответ. Передайте true для активации. При включении каждый матч будет содержать поле oddsBk с детальными коэффициентами по рынкам. Можно комбинировать с bookmaker_ids",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "bookmaker_ids",
            "in": "query",
            "description": "Список ID букмекеров через запятую. Используется совместно с has_bk_odds и/или with_bk_odds для ограничения данных конкретными букмекерами. Возвращает ошибку 400 при указании невалидных ID. Доступные значения: melbet, pari, marathon, betboom",
            "schema": {
              "type": "string",
              "example": "melbet,pari,marathon,betboom"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Матчи команды",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamMatchesResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Команда не найдена",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/teams/{teamId}/profile": {
      "get": {
        "summary": "Профиль команды",
        "description": "Расширенный профиль команды: главный тренер, домашний стадион (город, вместимость), фирменные цвета, дата основания, основной турнир. Для тенниса и настольного тенниса «команда» — это спортсмен: дополнительно приходят `ranking` (позиция в официальном рейтинге) и блок `playerTeamInfo` (стиль игры, призовые, антропометрия, текущий рейтинг). Блоки, отсутствующие у вида спорта, равны null",
        "tags": [
          "Команды"
        ],
        "operationId": "getTeamProfile",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "ID команды",
            "schema": {
              "type": "integer",
              "example": 5257
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Профиль команды",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamProfileResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Команда не найдена",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/teams/{teamId}/form": {
      "get": {
        "summary": "Форма команды",
        "description": "Форма команды по последним завершённым матчам (новые сначала): последовательность W/D/L, счётчики побед/ничьих/поражений и список матчей с соперником и счётом. Счёт в каждом матче — с позиции команды («голы команды:голы соперника»). Работает и для парных матчей (теннис/настольный теннис) — команда ищется в том числе среди участников пар. Удобно для виджетов формы и предматчевой аналитики",
        "tags": [
          "Команды"
        ],
        "operationId": "getTeamForm",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "ID команды",
            "schema": {
              "type": "integer",
              "example": 5257
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Сколько последних завершённых матчей учитывать (1–10). По умолчанию 5",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10,
              "default": 5,
              "example": 5
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Форма команды",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamFormResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Команда не найдена",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/teams/{teamId}/squad": {
      "get": {
        "summary": "Состав команды",
        "description": "Текущий состав команды: полный список игроков (карточки с позицией, номером, датой рождения, ростом), отдельные списки легионеров и игроков национальных сборных, а также тренерский/технический штаб — данные штаба доступны только здесь",
        "tags": [
          "Команды"
        ],
        "operationId": "getTeamSquad",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "ID команды",
            "schema": {
              "type": "integer",
              "example": 5257
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Состав команды",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamSquadResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Команда не найдена",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/teams/{teamId}/transfers": {
      "get": {
        "summary": "Трансферы команды",
        "description": "Переходы игроков команды: пришедшие (`transfersIn`) и ушедшие (`transfersOut`). По каждому переходу — карточка игрока, команды «откуда»/«куда», тип перехода (трансфер, аренда, свободный агент и т.д.) с переводами, сумма и дата. Аналог истории переходов в профиле игрока, но в разрезе команды",
        "tags": [
          "Команды"
        ],
        "operationId": "getTeamTransfers",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "ID команды",
            "schema": {
              "type": "integer",
              "example": 5257
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Трансферы команды",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamTransfersResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Команда не найдена",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/teams/{teamId}/tournaments": {
      "get": {
        "summary": "Турниры команды",
        "description": "Список турниров, в которых участвует команда: чемпионат, кубки, международные турниры — с категорией (страна/регион) и фирменными цветами. Удобно, чтобы от команды перейти к её турнирам и сезонам",
        "tags": [
          "Команды"
        ],
        "operationId": "getTeamTournaments",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "teamId",
            "in": "path",
            "required": true,
            "description": "ID команды",
            "schema": {
              "type": "integer",
              "example": 5257
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Турниры команды",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TeamTournamentsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Команда не найдена",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/{sportSlug}/h2h": {
      "get": {
        "tags": [
          "Матчи"
        ],
        "summary": "Очные встречи двух команд (H2H)",
        "description": "Готовая сводка head-to-head: счёт побед/ничьих по последним встречам (окно до 50 матчей) + последние завершённые очные матчи в компактной форме. Работает и для парных матчей (теннис/настольный теннис 2×2) — команды ищутся в том числе среди участников пар; встречи, где обе команды играли в одной паре, не учитываются.\n\nПолный «сырой» список очных встреч с пагинацией и всеми фильтрами — `GET /v2/{sportSlug}/matches?team_id_1=&team_id_2=`.",
        "parameters": [
          {
            "$ref": "#/components/parameters/sportSlug"
          },
          {
            "name": "team_id_1",
            "in": "query",
            "required": true,
            "description": "ID первой команды пары. Порядок команд влияет только на привязку `team1Wins`/`team2Wins` и порядок в `teams`.",
            "schema": {
              "type": "integer",
              "example": 2672
            }
          },
          {
            "name": "team_id_2",
            "in": "query",
            "required": true,
            "description": "ID второй команды пары (должен отличаться от `team_id_1`).",
            "schema": {
              "type": "integer",
              "example": 2687
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Сколько последних очных матчей вернуть в `matches` (на `summary` не влияет).",
            "schema": {
              "type": "integer",
              "default": 10,
              "minimum": 1,
              "maximum": 50
            }
          },
          {
            "name": "fields",
            "in": "query",
            "required": false,
            "description": "Список верхнеуровневых полей ответа матча через запятую (как в `GET /v2/{sportSlug}/matches`). Поле `id` включается всегда. Если передан `fields`, пресет `view` игнорируется.",
            "schema": {
              "type": "string",
              "example": "id,startTimestamp,homeTeam,awayTeam,homeScore,awayScore,winner"
            }
          },
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "Пресет состава ответа матчей: `lite` (по умолчанию для H2H) — компактный матч; `odds` — lite + коэффициенты `oddsBase`.",
            "schema": {
              "type": "string",
              "enum": [
                "lite",
                "odds"
              ],
              "default": "lite"
            }
          },
          {
            "name": "with_bk_odds",
            "in": "query",
            "required": false,
            "description": "Добавить букмекерские коэффициенты (`oddsBk`) к матчам. Передайте true для активации. Можно комбинировать с bookmaker_ids.",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ],
              "example": "true"
            }
          },
          {
            "name": "bookmaker_ids",
            "in": "query",
            "required": false,
            "description": "Список ID букмекеров через запятую (совместно с with_bk_odds). Доступные значения: melbet, pari, marathon.",
            "schema": {
              "type": "string",
              "example": "melbet,pari,marathon,betboom"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Сводка очных встреч",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/H2HResponse"
                }
              }
            }
          },
          "400": {
            "description": "Некорректные параметры",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          },
          "401": {
            "description": "Неавторизован"
          },
          "404": {
            "description": "Одна из команд не найдена",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    },
    "/v2/BkOddsDict.json": {
      "get": {
        "summary": "Словарь букмекерских рынков и исходов",
        "description": "Статический словарь слагов букмекерских рынков и исходов с названиями и переводами. Не требует авторизации. По ключам словаря можно сопоставлять данные из `Match.oddsBk` с человекочитаемыми названиями. Подгрузите один раз и кэшируйте",
        "tags": [
          "Справочники"
        ],
        "operationId": "getBkOddsDict",
        "responses": {
          "200": {
            "description": "Словарь рынков и исходов",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BkOddsDictionary"
                }
              }
            }
          }
        }
      }
    },
    "/v2/account/usage": {
      "get": {
        "tags": [
          "Общее"
        ],
        "summary": "Использование квоты API-ключа",
        "operationId": "getAccountUsage",
        "description": "Самодиагностика ключа: текущий тарифный план, дневной лимит и его остаток, момент сброса квоты и доступные виды спорта — удобно для мониторинга интеграций.\n\nЗапрос к этому эндпоинту **не расходует дневную квоту** и остаётся доступным даже после исчерпания лимита.\n\nДля тарифов с дневным лимитом каждый ответ API дополнительно содержит заголовки **`X-RateLimit-Limit`** (дневной лимит), **`X-RateLimit-Remaining`** (остаток на сегодня) и **`X-RateLimit-Reset`** (момент сброса квоты, Unix-таймстемп в миллисекундах).",
        "responses": {
          "200": {
            "description": "Тариф и использование квоты",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountUsageResponse"
                }
              }
            }
          },
          "401": {
            "description": "Невалидный или отсутствующий API-ключ",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEnvelope"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "Authorization",
        "description": "API ключ для авторизации запросов"
      }
    },
    "parameters": {
      "sportSlug": {
        "name": "sportSlug",
        "in": "path",
        "required": true,
        "description": "Слаг вида спорта. Получите список доступных видов спорта через /v2/sport",
        "schema": {
          "type": "string",
          "enum": [
            "football",
            "ice-hockey",
            "basketball",
            "tennis",
            "table-tennis",
            "volleyball",
            "esports"
          ],
          "example": "football"
        }
      }
    },
    "schemas": {
      "SearchResponse": {
        "type": "object",
        "description": "Ответ полнотекстового поиска",
        "properties": {
          "query": {
            "type": "string",
            "description": "Поисковый запрос",
            "example": "Messi"
          },
          "results": {
            "type": "object",
            "properties": {
              "players": {
                "$ref": "#/components/schemas/SearchResultGroup"
              },
              "teams": {
                "$ref": "#/components/schemas/SearchResultGroup"
              },
              "tournaments": {
                "$ref": "#/components/schemas/SearchResultGroup"
              }
            }
          }
        }
      },
      "SearchResultGroup": {
        "type": "object",
        "description": "Группа результатов поиска по типу сущности",
        "properties": {
          "total": {
            "type": "integer",
            "description": "Количество найденных результатов"
          },
          "items": {
            "type": "array",
            "description": "Массив найденных сущностей (Player, Team или Tournament)",
            "items": {
              "type": "object"
            }
          }
        }
      },
      "Sport": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Уникальный идентификатор вида спорта",
            "example": 1
          },
          "name": {
            "type": "string",
            "description": "Название вида спорта на английском",
            "example": "Football"
          },
          "slug": {
            "type": "string",
            "description": "URL-совместимое название",
            "example": "football"
          },
          "apiBasePath": {
            "type": "string",
            "description": "Базовый путь API для данного вида спорта",
            "example": "/v2/football/"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "description": "Название на русском языке",
                "example": "Футбол"
              }
            }
          }
        }
      },
      "Category": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Уникальный идентификатор категории",
            "example": 57
          },
          "name": {
            "type": "string",
            "description": "Название категории",
            "example": "Uruguay"
          },
          "tournamentsCount": {
            "type": "integer",
            "description": "Количество турниров в категории",
            "example": 15
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "description": "Перевод на русский",
                "example": "Уругвай"
              }
            }
          },
          "image": {
            "type": "string",
            "description": "URL изображения категории",
            "example": "/images/category-57"
          }
        }
      },
      "Tournament": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Уникальный идентификатор турнира",
            "example": 25182
          },
          "name": {
            "type": "string",
            "description": "Название турнира",
            "example": "Tercera Division, Reserves"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "description": "Название на русском",
                "example": "Третий дивизион, Резерв"
              }
            }
          },
          "category": {
            "$ref": "#/components/schemas/CategoryBrief"
          },
          "sportId": {
            "type": "integer",
            "description": "ID вида спорта",
            "example": 1
          },
          "hasGroups": {
            "type": "boolean",
            "description": "Есть ли групповой этап",
            "example": false
          },
          "hasRounds": {
            "type": "boolean",
            "description": "Есть ли раунды",
            "example": true
          },
          "hasPlayoffs": {
            "type": "boolean",
            "description": "Есть ли плей-офф",
            "example": false
          },
          "startDateTimestamp": {
            "type": "integer",
            "nullable": true,
            "description": "Unix-время (в миллисекундах) начала текущего сезона турнира. null, если недоступно.",
            "example": 1786838400000
          },
          "endDateTimestamp": {
            "type": "integer",
            "nullable": true,
            "description": "Unix-время (в миллисекундах) окончания текущего сезона турнира. null, если недоступно.",
            "example": 1818460800000
          },
          "image": {
            "type": "string",
            "description": "URL изображения турнира",
            "example": "/images/unique-tournament-25182"
          },
          "linkedTournaments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TournamentLink"
            }
          },
          "lowerDivisions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TournamentLink"
            }
          },
          "upperDivisions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TournamentLink"
            }
          },
          "titleHolder": {
            "nullable": true,
            "description": "Действующий обладатель титула (компактная карточка команды); null — данных нет",
            "allOf": [
              {
                "$ref": "#/components/schemas/CompactTeam"
              }
            ]
          },
          "titleHolderTitles": {
            "type": "integer",
            "nullable": true,
            "description": "Число титулов действующего обладателя",
            "example": 3
          },
          "mostTitles": {
            "type": "integer",
            "nullable": true,
            "description": "Рекордное число титулов в истории турнира",
            "example": 5
          },
          "mostTitlesTeams": {
            "type": "array",
            "description": "Команды-рекордсмены по числу титулов (компактные карточки)",
            "items": {
              "$ref": "#/components/schemas/CompactTeam"
            }
          },
          "playerOfTheTournament": {
            "nullable": true,
            "description": "Лучший игрок турнира (компактная карточка); null — данных нет",
            "allOf": [
              {
                "$ref": "#/components/schemas/CompactPlayer"
              }
            ]
          },
          "colors": {
            "type": "object",
            "nullable": true,
            "description": "Фирменные цвета турнира",
            "properties": {
              "primary": {
                "type": "string",
                "nullable": true,
                "example": "#d20a11"
              },
              "secondary": {
                "type": "string",
                "nullable": true,
                "example": "#e8bb57"
              }
            }
          }
        }
      },
      "TournamentLink": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID связанного турнира"
          },
          "name": {
            "type": "string",
            "description": "Название связанного турнира"
          },
          "slug": {
            "type": "string",
            "nullable": true,
            "description": "Слаг связанного турнира",
            "example": "world-championship-qual-uefa"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "description": "Название на русском"
              }
            }
          },
          "image": {
            "type": "string",
            "nullable": true,
            "description": "URL логотипа связанного турнира"
          },
          "colors": {
            "type": "object",
            "nullable": true,
            "description": "Фирменные цвета связанного турнира",
            "properties": {
              "primary": {
                "type": "string",
                "nullable": true,
                "example": "#9a1133"
              },
              "secondary": {
                "type": "string",
                "nullable": true,
                "example": "#c11541"
              }
            }
          },
          "category": {
            "type": "object",
            "nullable": true,
            "description": "Категория (страна/регион) связанного турнира",
            "properties": {
              "id": {
                "type": "integer",
                "example": 1465
              },
              "name": {
                "type": "string",
                "nullable": true,
                "example": "Europe"
              },
              "flag": {
                "type": "string",
                "nullable": true,
                "example": "europe"
              },
              "translations": {
                "type": "object",
                "properties": {
                  "ru": {
                    "type": "string",
                    "nullable": true,
                    "example": "Европа"
                  }
                }
              }
            }
          }
        },
        "description": "Связанный турнир (элемент linkedTournaments/upperDivisions/lowerDivisions)"
      },
      "CategoryBrief": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID категории"
          },
          "name": {
            "type": "string",
            "description": "Название категории"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string"
              }
            }
          },
          "image": {
            "type": "string",
            "description": "URL изображения"
          }
        }
      },
      "Season": {
        "type": "object",
        "description": "Краткая информация о сезоне (используется в списке сезонов и вложениях). Полные детали сезона — в схеме SeasonDetails.",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Уникальный идентификатор сезона",
            "example": 72514
          },
          "name": {
            "type": "string",
            "description": "Название сезона",
            "example": "Tercera Division, Reserves 2025"
          },
          "year": {
            "type": "string",
            "description": "Год сезона",
            "example": "2025"
          },
          "sportId": {
            "type": "integer",
            "description": "ID вида спорта"
          },
          "translations": {
            "type": "object",
            "description": "Переводы названия сезона",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "description": "Русское название сезона"
              }
            }
          },
          "isCurrent": {
            "type": "boolean",
            "description": "Признак текущего (актуального) сезона турнира. true ровно у одного сезона в списке."
          },
          "startDateTimestamp": {
            "type": "integer",
            "description": "Unix-время (в миллисекундах) начала текущего сезона. Присутствует только у текущего сезона (isCurrent=true)."
          },
          "endDateTimestamp": {
            "type": "integer",
            "description": "Unix-время (в миллисекундах) окончания текущего сезона. Присутствует только у текущего сезона (isCurrent=true)."
          }
        }
      },
      "SeasonDetails": {
        "type": "object",
        "description": "Детальная информация о сезоне: туры, группы, плей-офф, турнирные таблицы (standings) и сетки плей-офф (cupTrees). Возвращается эндпоинтом GET /v2/{sportSlug}/tournament/{tournamentId}/seasons/{seasonId}.",
        "allOf": [
          {
            "$ref": "#/components/schemas/Season"
          },
          {
            "type": "object",
            "properties": {
              "rounds": {
                "type": "object",
                "description": "Туры сезона",
                "properties": {
                  "currentRound": {
                    "$ref": "#/components/schemas/RoundInfo"
                  },
                  "rounds": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/RoundInfo"
                    }
                  }
                }
              },
              "groups": {
                "type": "array",
                "description": "Группы сезона (для групповых стадий)",
                "items": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string",
                      "description": "Название группы",
                      "example": "Group A"
                    }
                  }
                }
              },
              "playoffs": {
                "type": "array",
                "description": "Информация о плей-офф",
                "items": {
                  "type": "object"
                }
              },
              "cupTrees": {
                "type": "array",
                "description": "Сетки плей-офф (турнирные деревья). Заполнено, если у сезона есть плей-офф; пусто, если данных нет.",
                "items": {
                  "$ref": "#/components/schemas/CupTree"
                }
              },
              "standings": {
                "type": "array",
                "description": "Турнирные таблицы. Лига — одна таблица, групповой этап — несколько (по одной на группу). Пусто, если для сезона нет таблиц.",
                "items": {
                  "$ref": "#/components/schemas/StandingsTable"
                }
              },
              "info": {
                "type": "object",
                "nullable": true,
                "additionalProperties": true,
                "description": "Сводка сезона: агрегированные показатели (например goals, homeTeamWins, awayTeamWins, draws, yellowCards, redCards, numberOfCompetitors, hostCountries) — состав зависит от вида спорта и типа турнира. Массивы команд-новичков (newcomersUpperDivision/newcomersLowerDivision/newcomersOther) отдаются компактными карточками команд. null — данных нет",
                "properties": {
                  "goals": {
                    "type": "integer",
                    "nullable": true,
                    "description": "Всего голов за сезон",
                    "example": 890
                  },
                  "homeTeamWins": {
                    "type": "integer",
                    "nullable": true,
                    "description": "Побед хозяев",
                    "example": 138
                  },
                  "awayTeamWins": {
                    "type": "integer",
                    "nullable": true,
                    "description": "Побед гостей",
                    "example": 98
                  },
                  "draws": {
                    "type": "integer",
                    "nullable": true,
                    "description": "Ничьих",
                    "example": 70
                  },
                  "yellowCards": {
                    "type": "integer",
                    "nullable": true,
                    "description": "Жёлтых карточек",
                    "example": 1198
                  },
                  "redCards": {
                    "type": "integer",
                    "nullable": true,
                    "description": "Красных карточек",
                    "example": 42
                  },
                  "numberOfCompetitors": {
                    "type": "integer",
                    "nullable": true,
                    "description": "Число участников",
                    "example": 48
                  },
                  "hostCountries": {
                    "type": "array",
                    "description": "Страны-хозяйки (при наличии)",
                    "items": {
                      "type": "string"
                    }
                  },
                  "newcomersUpperDivision": {
                    "type": "array",
                    "description": "Новички из высшего дивизиона (компактные карточки команд)",
                    "items": {
                      "$ref": "#/components/schemas/CompactTeam"
                    }
                  },
                  "newcomersLowerDivision": {
                    "type": "array",
                    "description": "Новички из низшего дивизиона (компактные карточки команд)",
                    "items": {
                      "$ref": "#/components/schemas/CompactTeam"
                    }
                  },
                  "newcomersOther": {
                    "type": "array",
                    "description": "Прочие новички (компактные карточки команд)",
                    "items": {
                      "$ref": "#/components/schemas/CompactTeam"
                    }
                  }
                }
              }
            }
          }
        ]
      },
      "TeamColors": {
        "type": "object",
        "description": "Фирменные цвета команды для отрисовки.",
        "properties": {
          "primary": {
            "type": "string",
            "nullable": true,
            "description": "Основной цвет",
            "example": "#ef0107"
          },
          "secondary": {
            "type": "string",
            "nullable": true,
            "description": "Дополнительный цвет"
          },
          "text": {
            "type": "string",
            "nullable": true,
            "description": "Цвет текста на форме"
          }
        }
      },
      "Promotion": {
        "type": "object",
        "description": "Зона турнирной таблицы (повышение / вылет / плей-офф).",
        "properties": {
          "text": {
            "type": "string",
            "nullable": true,
            "description": "Английская метка зоны",
            "example": "Promotion"
          }
        }
      },
      "StandingsTeam": {
        "type": "object",
        "description": "Команда в строке турнирной таблицы.",
        "properties": {
          "id": {
            "type": "integer",
            "nullable": true,
            "description": "ID команды"
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Название команды"
          },
          "image": {
            "type": "string",
            "nullable": true,
            "description": "URL логотипа команды"
          },
          "country": {
            "type": "object",
            "description": "Страна команды",
            "properties": {
              "name": {
                "type": "string",
                "nullable": true,
                "description": "Название страны"
              }
            }
          },
          "national": {
            "type": "boolean",
            "description": "Сборная (true) или клуб (false)"
          },
          "ranking": {
            "type": "integer",
            "nullable": true,
            "description": "Место в рейтинге (например, ФИФА). Присутствует только у сборных, иначе null."
          },
          "teamColors": {
            "nullable": true,
            "description": "Фирменные цвета; null, если не заданы.",
            "$ref": "#/components/schemas/TeamColors"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "description": "Русское название команды"
              }
            }
          }
        }
      },
      "StandingsRow": {
        "type": "object",
        "description": "Строка турнирной таблицы (одна команда).",
        "properties": {
          "position": {
            "type": "integer",
            "nullable": true,
            "description": "Место в таблице"
          },
          "team": {
            "$ref": "#/components/schemas/StandingsTeam"
          },
          "matches": {
            "type": "integer",
            "nullable": true,
            "description": "Сыграно матчей"
          },
          "wins": {
            "type": "integer",
            "nullable": true,
            "description": "Победы"
          },
          "draws": {
            "type": "integer",
            "nullable": true,
            "description": "Ничьи"
          },
          "losses": {
            "type": "integer",
            "nullable": true,
            "description": "Поражения"
          },
          "scoresFor": {
            "type": "integer",
            "nullable": true,
            "description": "Забито"
          },
          "scoresAgainst": {
            "type": "integer",
            "nullable": true,
            "description": "Пропущено"
          },
          "goalDifference": {
            "type": "integer",
            "nullable": true,
            "description": "Разница мячей (вычислено: scoresFor − scoresAgainst)"
          },
          "scoreDiffFormatted": {
            "type": "string",
            "nullable": true,
            "description": "Сырая строка разницы мячей",
            "example": "+19"
          },
          "points": {
            "type": "integer",
            "nullable": true,
            "description": "Очки"
          },
          "promotion": {
            "nullable": true,
            "description": "Зона таблицы (повышение/вылет/плей-офф); null вне зон.",
            "$ref": "#/components/schemas/Promotion"
          }
        }
      },
      "StandingsTable": {
        "type": "object",
        "description": "Турнирная таблица: лига целиком или одна группа.",
        "properties": {
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Ярлык таблицы",
            "example": "Premier League 25/26"
          },
          "updatedAt": {
            "type": "integer",
            "format": "int64",
            "nullable": true,
            "description": "Время последнего обновления (Unix, мс)"
          },
          "rows": {
            "type": "array",
            "description": "Строки таблицы",
            "items": {
              "$ref": "#/components/schemas/StandingsRow"
            }
          }
        }
      },
      "CupTeam": {
        "type": "object",
        "description": "Команда в сетке плей-офф.",
        "properties": {
          "id": {
            "type": "integer",
            "nullable": true,
            "description": "ID команды"
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Название команды"
          },
          "image": {
            "type": "string",
            "nullable": true,
            "description": "URL логотипа команды"
          },
          "teamColors": {
            "nullable": true,
            "description": "Фирменные цвета; null, если не заданы.",
            "$ref": "#/components/schemas/TeamColors"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "description": "Русское название команды"
              }
            }
          }
        }
      },
      "CupTreeParticipant": {
        "type": "object",
        "description": "Сторона пары в сетке плей-офф (команда или незаполненный слот).",
        "properties": {
          "order": {
            "type": "integer",
            "nullable": true,
            "description": "Сторона пары: 1 = домашняя, 2 = гостевая"
          },
          "winner": {
            "type": "boolean",
            "description": "Прошла ли сторона дальше"
          },
          "team": {
            "nullable": true,
            "description": "Команда стороны; null для незаполненного слота (тогда заполнено поле slot).",
            "$ref": "#/components/schemas/CupTeam"
          },
          "slot": {
            "type": "string",
            "nullable": true,
            "description": "Ярлык-заглушка слота, когда команда ещё неизвестна",
            "example": "W97"
          },
          "sourceBlockId": {
            "type": "integer",
            "nullable": true,
            "description": "Локальный blockId (1..N) пары прошлого раунда, откуда пришла команда"
          },
          "score": {
            "type": "integer",
            "nullable": true,
            "description": "Числовой счёт/агрегат"
          },
          "penalties": {
            "type": "integer",
            "nullable": true,
            "description": "Счёт по пенальти (если была серия)"
          },
          "scoreText": {
            "type": "string",
            "nullable": true,
            "description": "Сырой текст счёта как в источнике",
            "example": "2 (3)"
          }
        }
      },
      "CupTreeTie": {
        "type": "object",
        "description": "Пара (противостояние) внутри раунда сетки плей-офф.",
        "properties": {
          "blockId": {
            "type": "integer",
            "nullable": true,
            "description": "Собственный id узла сетки (1..N); цель для sourceBlockId"
          },
          "order": {
            "type": "integer",
            "nullable": true,
            "description": "Позиция пары внутри раунда"
          },
          "status": {
            "type": "string",
            "enum": [
              "finished",
              "inprogress",
              "notstarted"
            ],
            "description": "Статус пары"
          },
          "isBye": {
            "type": "boolean",
            "description": "Автоматический проход без игры"
          },
          "isThirdPlace": {
            "type": "boolean",
            "description": "Матч за 3-е место"
          },
          "hasNextRound": {
            "type": "boolean",
            "description": "Ведёт ли пара в следующий раунд"
          },
          "startTimestamp": {
            "type": "integer",
            "format": "int64",
            "nullable": true,
            "description": "Время старта пары (Unix, мс)"
          },
          "result": {
            "type": "string",
            "nullable": true,
            "description": "Сырой агрегат-результат",
            "example": "4:5"
          },
          "participants": {
            "type": "array",
            "description": "Стороны пары",
            "items": {
              "$ref": "#/components/schemas/CupTreeParticipant"
            }
          },
          "matches": {
            "type": "array",
            "description": "Матчи (ноги) пары",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "ID матча"
                },
                "leg": {
                  "type": "integer",
                  "description": "Номер ноги (1..N)"
                }
              }
            }
          }
        }
      },
      "CupTreeRound": {
        "type": "object",
        "description": "Раунд сетки плей-офф.",
        "properties": {
          "order": {
            "type": "integer",
            "description": "Порядковый номер раунда"
          },
          "name": {
            "type": "string",
            "description": "Английское название раунда (вычислено по размеру сетки)",
            "example": "Quarter-finals"
          },
          "description": {
            "type": "string",
            "description": "Описание раунда"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "description": "Русское название раунда",
                "example": "1/4 финала"
              }
            }
          },
          "ties": {
            "type": "array",
            "description": "Пары раунда",
            "items": {
              "$ref": "#/components/schemas/CupTreeTie"
            }
          }
        }
      },
      "CupTree": {
        "type": "object",
        "description": "Турнирная сетка плей-офф (дерево).",
        "properties": {
          "id": {
            "type": "integer",
            "nullable": true,
            "description": "ID сетки"
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Название сетки",
            "example": "Knockout stage"
          },
          "currentRound": {
            "type": "integer",
            "nullable": true,
            "description": "Текущий активный раунд"
          },
          "totalRounds": {
            "type": "integer",
            "description": "Всего раундов (вычислено)"
          },
          "rounds": {
            "type": "array",
            "description": "Раунды сетки",
            "items": {
              "$ref": "#/components/schemas/CupTreeRound"
            }
          }
        }
      },
      "Match": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Уникальный идентификатор матча",
            "example": 14570728
          },
          "status": {
            "type": "string",
            "description": "Статус матча",
            "enum": [
              "notstarted",
              "inprogress",
              "finished",
              "canceled",
              "postponed",
              "interrupted",
              "suspended",
              "delayed",
              "willcontinue"
            ],
            "example": "inprogress"
          },
          "statusDescription": {
            "type": "string",
            "nullable": true,
            "description": "Человекочитаемое описание статуса матча",
            "example": "1st half"
          },
          "dateEvent": {
            "type": "string",
            "format": "date",
            "description": "Дата события",
            "example": "2025-09-03"
          },
          "startTimestamp": {
            "type": "integer",
            "description": "Время начала матча в миллисекундах",
            "example": 1756836000000
          },
          "currentMatchMinute": {
            "type": "integer",
            "description": "Текущая минута матча",
            "example": 30
          },
          "currentMatchSecond": {
            "type": "integer",
            "description": "Текущая секунда матча (в пределах минуты)",
            "example": 12
          },
          "overtimeLength": {
            "type": "integer",
            "description": "Добавленное время в секундах. Присутствует только когда оно есть.",
            "example": 180
          },
          "tournament": {
            "$ref": "#/components/schemas/TournamentBrief"
          },
          "category": {
            "$ref": "#/components/schemas/CategoryBrief"
          },
          "roundInfo": {
            "$ref": "#/components/schemas/RoundInfo"
          },
          "season": {
            "$ref": "#/components/schemas/SeasonBrief"
          },
          "venue": {
            "$ref": "#/components/schemas/Venue"
          },
          "referee": {
            "x-sports": [
              "football"
            ],
            "$ref": "#/components/schemas/Referee"
          },
          "homeTeam": {
            "$ref": "#/components/schemas/TeamWithLineup"
          },
          "awayTeam": {
            "$ref": "#/components/schemas/TeamWithLineup"
          },
          "homeScore": {
            "$ref": "#/components/schemas/Score"
          },
          "awayScore": {
            "$ref": "#/components/schemas/Score"
          },
          "liveEvents": {
            "x-sports": [
              "football",
              "ice-hockey",
              "basketball",
              "volleyball",
              "table-tennis"
            ],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LiveEvent"
            }
          },
          "matchStatistics": {
            "type": "array",
            "description": "Статистика матча по командам, сгруппированная по периодам. Машинные ключи (key) и их переводы (RU/ES) — в [словаре статистики](https://docs.api-sport.ru/concepts/statistics-dictionary).",
            "items": {
              "$ref": "#/components/schemas/MatchStatisticsPeriod"
            }
          },
          "oddsBase": {
            "type": "array",
            "description": "Доступные коэффициенты для матча",
            "items": {
              "$ref": "#/components/schemas/OddsMarket"
            }
          },
          "highlights": {
            "type": "array",
            "description": "Видео / хайлайты матча",
            "items": {
              "$ref": "#/components/schemas/Highlight"
            }
          },
          "esports": {
            "x-sports": [
              "esports"
            ],
            "nullable": true,
            "description": "Детальные данные по киберспортивному матчу. Присутствует только для матчей с sportSlug=esports (CS2, Dota 2, League of Legends). Содержит информацию о каждой игре серии, индивидуальную статистику игроков, раунды (CS2), баны героев/чемпионов (Dota 2, LoL) и командную статистику.",
            "$ref": "#/components/schemas/EsportsData"
          },
          "tennis": {
            "x-sports": [
              "tennis"
            ],
            "nullable": true,
            "description": "Детальные данные по теннисному матчу. Присутствует только для матчей с sportSlug=tennis. Содержит информацию о сетах (геймы, тайбрейки, длительность, победитель), подаче, посеве игроков, типе покрытия и momentum-графике. При запросе одного матча (/matches/{matchId}) также включает point-by-point данные с детализацией каждого очка.",
            "$ref": "#/components/schemas/TennisData"
          },
          "hasBkOdds": {
            "type": "object",
            "description": "Наличие букмекерских коэффициентов по каждому букмекеру. Всегда присутствует в ответе",
            "properties": {
              "melbet": {
                "type": "boolean",
                "description": "Есть ли коэффициенты букмекера Melbet для данного матча",
                "example": true
              },
              "pari": {
                "type": "boolean",
                "description": "Есть ли коэффициенты букмекера Pari для данного матча",
                "example": true
              },
              "marathon": {
                "type": "boolean",
                "description": "Есть ли коэффициенты букмекера Marathon для данного матча",
                "example": true
              },
              "betboom": {
                "type": "boolean",
                "description": "Есть ли коэффициенты букмекера BetBoom для данного матча",
                "example": true
              }
            },
            "example": {
              "melbet": true,
              "pari": true,
              "marathon": true,
              "betboom": true
            }
          },
          "oddsBk": {
            "nullable": true,
            "description": "Букмекерские коэффициенты. Присутствует только при with_bk_odds=true. Ключи объекта — идентификаторы букмекеров (например 'melbet', 'pari', 'marathon', 'betboom'). Если with_bk_odds не указан, поле отсутствует",
            "allOf": [
              {
                "$ref": "#/components/schemas/BookmakerOdds"
              }
            ]
          },
          "attendance": {
            "type": "integer",
            "nullable": true,
            "description": "Посещаемость матча (число зрителей), если известна",
            "example": 51243
          },
          "winner": {
            "type": "string",
            "nullable": true,
            "enum": [
              "home",
              "away",
              "draw"
            ],
            "description": "Исход матча: home — победа хозяев, away — победа гостей, draw — ничья; null — исход ещё не определён",
            "example": "away"
          },
          "winnerCode": {
            "type": "integer",
            "nullable": true,
            "description": "Числовой код исхода: 1 — победа хозяев, 2 — победа гостей, 3 — ничья; null — исход ещё не определён",
            "example": 2
          },
          "pregame": {
            "nullable": true,
            "description": "Предматчевый контекст: очные встречи (h2h), серии команд (teamStreaks) и форма (form). Всегда присутствует в ответе матча по ID; в списках матчей — при параметре `with_pregame=true` или когда `fields` включает `pregame`. null — данных нет",
            "$ref": "#/components/schemas/PregameBlock"
          },
          "bestPlayers": {
            "x-sports": [
              "football",
              "ice-hockey",
              "basketball"
            ],
            "nullable": true,
            "description": "Лучшие игроки матча (появляются по ходу/по завершении матча). Присутствует в ответе матча по ID; в списках — когда `fields` включает `bestPlayers`. null — данных нет",
            "$ref": "#/components/schemas/BestPlayers"
          }
        }
      },
      "TournamentBrief": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID турнира"
          },
          "name": {
            "type": "string",
            "description": "Название турнира"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string"
              }
            }
          },
          "image": {
            "type": "string",
            "description": "URL изображения турнира"
          }
        }
      },
      "SeasonBrief": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer"
          },
          "name": {
            "type": "string"
          },
          "year": {
            "type": "string"
          },
          "isCurrent": {
            "type": "boolean",
            "description": "Признак текущего (актуального) сезона турнира. true ровно у одного сезона в списке."
          },
          "startDateTimestamp": {
            "type": "integer",
            "description": "Unix-время (в миллисекундах) начала текущего сезона. Присутствует только у текущего сезона (isCurrent=true)."
          },
          "endDateTimestamp": {
            "type": "integer",
            "description": "Unix-время (в миллисекундах) окончания текущего сезона. Присутствует только у текущего сезона (isCurrent=true)."
          }
        }
      },
      "RoundInfo": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Название раунда",
            "example": "1/8"
          },
          "round": {
            "type": "integer",
            "description": "Номер раунда",
            "example": 5
          }
        }
      },
      "TeamWithLineup": {
        "type": "object",
        "description": "Команда в составе матча: базовые поля плюс состав на матч (lineup).",
        "allOf": [
          {
            "$ref": "#/components/schemas/MatchTeam"
          },
          {
            "type": "object",
            "properties": {
              "lineup": {
                "x-sports": [
                  "football",
                  "ice-hockey",
                  "basketball",
                  "volleyball"
                ],
                "nullable": true,
                "description": "Состав команды на матч; null, если состав недоступен.",
                "$ref": "#/components/schemas/Lineup"
              }
            }
          }
        ]
      },
      "MatchTeam": {
        "type": "object",
        "description": "Команда в составе матча (базовые поля).",
        "properties": {
          "id": {
            "type": "integer",
            "nullable": true,
            "description": "Уникальный идентификатор команды"
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Название команды"
          },
          "fullName": {
            "type": "string",
            "nullable": true,
            "description": "Полное название команды"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "description": "Название на русском"
              }
            }
          },
          "gender": {
            "type": "string",
            "nullable": true,
            "enum": [
              "M",
              "F"
            ],
            "description": "Пол команды"
          },
          "country": {
            "type": "string",
            "nullable": true,
            "description": "Название страны"
          },
          "manager": {
            "$ref": "#/components/schemas/Manager",
            "nullable": true,
            "description": "Тренер команды; null, если не задан."
          },
          "image": {
            "type": "string",
            "description": "URL изображения команды"
          }
        }
      },
      "Team": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Уникальный идентификатор команды"
          },
          "name": {
            "type": "string",
            "description": "Название команды"
          },
          "fullName": {
            "type": "string",
            "description": "Полное название команды"
          },
          "translation": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "description": "Название на русском"
              }
            }
          },
          "sportId": {
            "type": "integer",
            "description": "ID вида спорта"
          },
          "country": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Название страны"
              }
            }
          },
          "gender": {
            "type": "string",
            "description": "Пол команды",
            "enum": [
              "M",
              "F"
            ]
          },
          "venue": {
            "$ref": "#/components/schemas/Venue"
          },
          "manager": {
            "$ref": "#/components/schemas/Manager"
          },
          "hasSeasonStatistics": {
            "x-sports": [
              "football",
              "basketball",
              "ice-hockey",
              "tennis",
              "volleyball"
            ],
            "type": "boolean",
            "description": "Есть ли у команды сезонная статистика (эндпоинты /teams/{teamId}/statistics*). Данные могут появляться с задержкой.",
            "example": true
          },
          "image": {
            "type": "string",
            "description": "URL изображения команды"
          },
          "players": {
            "type": "array",
            "description": "Список игроков команды.",
            "items": {
              "$ref": "#/components/schemas/Player"
            }
          },
          "primaryUniqueTournament": {
            "type": "object",
            "nullable": true,
            "description": "Основной турнир команды; null, если не задан.",
            "properties": {
              "id": {
                "type": "integer",
                "description": "ID турнира"
              },
              "name": {
                "type": "string",
                "description": "Название турнира"
              },
              "translations": {
                "type": "object",
                "properties": {
                  "ru": {
                    "type": "string",
                    "nullable": true,
                    "description": "Название турнира на русском"
                  }
                }
              }
            }
          }
        }
      },
      "Manager": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID тренера"
          },
          "name": {
            "type": "string",
            "description": "Имя тренера"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "description": "Имя тренера на русском"
              }
            }
          }
        }
      },
      "Lineup": {
        "type": "object",
        "properties": {
          "players": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "integer",
                  "description": "ID игрока"
                },
                "name": {
                  "type": "string",
                  "nullable": true,
                  "description": "Имя игрока"
                },
                "teamId": {
                  "type": "integer",
                  "nullable": true,
                  "description": "ID команды игрока"
                },
                "position": {
                  "type": "string",
                  "description": "Позиция игрока"
                },
                "statistics": {
                  "x-sports": [
                    "football",
                    "ice-hockey",
                    "basketball"
                  ],
                  "type": "object",
                  "nullable": true,
                  "additionalProperties": {
                    "type": "number"
                  },
                  "description": "Статистика игрока в матче: плоский объект ключ→число. Доступна для football, ice-hockey, basketball (у остальных видов спорта — null). Ключи и переводы — в [словаре статистики](https://docs.api-sport.ru/concepts/statistics-dictionary)."
                },
                "shirtNumber": {
                  "type": "integer",
                  "description": "Номер на футболке"
                },
                "captain": {
                  "type": "boolean",
                  "description": "Является ли капитаном"
                },
                "substitute": {
                  "type": "boolean",
                  "description": "Является ли запасным"
                },
                "translations": {
                  "type": "object",
                  "properties": {
                    "ru": {
                      "type": "string",
                      "nullable": true,
                      "description": "Имя игрока на русском"
                    }
                  }
                },
                "image": {
                  "type": "string",
                  "description": "URL изображения игрока"
                }
              }
            }
          },
          "formation": {
            "x-sports": [
              "football"
            ],
            "type": "string",
            "description": "Схема игры",
            "example": "4-4-2"
          },
          "missingPlayers": {
            "x-sports": [
              "football",
              "ice-hockey",
              "basketball",
              "volleyball"
            ],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MissingPlayer"
            },
            "description": "Травмы и дисквалификации — отсутствующие игроки. Карточные причины (код 11/12/13) — только для футбола. Полный словарь причин: [страница](https://docs.api-sport.ru/concepts/missing-players-dictionary)."
          }
        }
      },
      "MatchStatisticsPeriod": {
        "type": "object",
        "description": "Статистика за один период матча.",
        "properties": {
          "period": {
            "type": "string",
            "description": "Период: ALL — за весь матч; либо часть матча в зависимости от вида спорта: тайм (1ST/2ND), четверть (1Q–4Q), период (1ST–3RD), сет/партия (1ST–5TH).",
            "example": "ALL"
          },
          "groups": {
            "type": "array",
            "description": "Группы статистических показателей.",
            "items": {
              "$ref": "#/components/schemas/MatchStatisticsGroup"
            }
          }
        }
      },
      "MatchStatisticsGroup": {
        "type": "object",
        "description": "Группа статистических показателей.",
        "properties": {
          "groupName": {
            "type": "string",
            "description": "Название группы (англоязычное), напр. \"Match overview\".",
            "example": "Match overview"
          },
          "statisticsItems": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MatchStatisticsItem"
            }
          }
        }
      },
      "MatchStatisticsItem": {
        "type": "object",
        "description": "Один показатель статистики матча по командам. Перевод ключа (key) — в словаре статистики (https://docs.api-sport.ru/concepts/statistics-dictionary).",
        "properties": {
          "key": {
            "type": "string",
            "description": "Машинный ключ показателя — для сопоставления со словарём статистики.",
            "example": "ballPossession"
          },
          "name": {
            "type": "string",
            "description": "Англоязычное название показателя.",
            "example": "Ball possession"
          },
          "home": {
            "type": "string",
            "description": "Отформатированное значение хозяев для отображения.",
            "example": "54%"
          },
          "away": {
            "type": "string",
            "description": "Отформатированное значение гостей для отображения.",
            "example": "46%"
          },
          "homeValue": {
            "type": "number",
            "description": "Числовое значение хозяев."
          },
          "awayValue": {
            "type": "number",
            "description": "Числовое значение гостей."
          },
          "homeTotal": {
            "type": "number",
            "nullable": true,
            "description": "Знаменатель для показателей вида «выполнено/попыток» (хозяева); иначе отсутствует."
          },
          "awayTotal": {
            "type": "number",
            "nullable": true,
            "description": "Знаменатель для показателей вида «выполнено/попыток» (гости); иначе отсутствует."
          },
          "compareCode": {
            "type": "integer",
            "description": "Сравнение сторон: 1 — лучше у хозяев, 2 — лучше у гостей, 3 — равенство.",
            "example": 1
          },
          "statisticsType": {
            "type": "string",
            "description": "Направленность показателя: positive (больше — лучше) либо negative.",
            "example": "positive"
          },
          "valueType": {
            "type": "string",
            "description": "Тип значения: event (счётное событие), team (доля/процент), time (время).",
            "example": "event"
          },
          "renderType": {
            "type": "integer",
            "description": "Подсказка по отображению: 1 — число, 2 — процент/доля, 3 — «выполнено/попыток» с процентом.",
            "example": 2
          }
        }
      },
      "StatisticsDictionary": {
        "type": "object",
        "description": "Словарь ключей статистики матча и игроков по видам спорта (отдаётся эндпоинтом /v2/StatisticsDict.json). Ключи верхнего уровня — слаги видов спорта; внутри — секции matchStatistics и (для football/ice-hockey/basketball) playerStatistics, где ключ совпадает с key/полем в сырой выдаче, а значение содержит название и переводы. Подробнее: https://docs.api-sport.ru/concepts/statistics-dictionary.",
        "properties": {
          "_meta": {
            "type": "object",
            "description": "Метаданные словаря (языки, примечания)."
          }
        },
        "additionalProperties": {
          "type": "object",
          "description": "Статистика по виду спорта. Ключ объекта — слаг вида спорта: football, ice-hockey, basketball, volleyball, tennis, table-tennis.",
          "properties": {
            "matchStatistics": {
              "type": "object",
              "description": "Ключ показателя матча → описание и переводы.",
              "additionalProperties": {
                "$ref": "#/components/schemas/StatisticsDictEntry"
              }
            },
            "playerStatistics": {
              "type": "object",
              "description": "Ключ показателя игрока → описание и переводы.",
              "additionalProperties": {
                "$ref": "#/components/schemas/StatisticsDictEntry"
              }
            }
          }
        }
      },
      "StatisticsDictEntry": {
        "type": "object",
        "description": "Описание одного ключа статистики с переводами.",
        "properties": {
          "name": {
            "type": "string",
            "description": "Англоязычное название.",
            "example": "Ball possession"
          },
          "ru": {
            "type": "string",
            "description": "Перевод на русский.",
            "example": "Владение мячом"
          },
          "es": {
            "type": "string",
            "description": "Перевод на испанский.",
            "example": "Posesión del balón"
          },
          "group": {
            "type": "string",
            "description": "Группа показателя (только matchStatistics).",
            "example": "Match overview"
          },
          "valueType": {
            "type": "string",
            "description": "Тип значения (только matchStatistics)."
          },
          "renderType": {
            "type": "integer",
            "description": "Подсказка по отображению (только matchStatistics)."
          }
        }
      },
      "Score": {
        "type": "object",
        "properties": {
          "current": {
            "type": "integer",
            "description": "Текущий счет",
            "example": 3
          },
          "period1": {
            "type": "integer",
            "x-sport-notes": "Значение зависит от вида спорта: тайм (футбол), период (хоккей), четверть (баскетбол), геймы в сете (теннис, наст. теннис), очки в партии (волейбол), счёт в карте (киберспорт)",
            "description": "Счет в первом тайме",
            "example": 2
          },
          "period2": {
            "type": "integer",
            "description": "Счет во втором тайме / геймы во 2-м сете (теннис)",
            "example": 1
          },
          "period3": {
            "type": "integer",
            "nullable": true,
            "description": "Счет в третьем периоде / геймы в 3-м сете (теннис)"
          },
          "period4": {
            "type": "integer",
            "nullable": true,
            "description": "Счет в четвертом периоде / геймы в 4-м сете (теннис, Grand Slam)"
          },
          "period5": {
            "type": "integer",
            "nullable": true,
            "description": "Счет в пятом периоде / геймы в 5-м сете (теннис, Grand Slam)"
          },
          "period6": {
            "x-sports": [
              "basketball",
              "table-tennis"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Счёт в 6-м периоде: 2-й овертайм (баскетбол) или геймы в 6-м сете (наст. теннис, best-of-7). При множественных овертаймах возможны и дальнейшие периоды (period7+) — редко."
          },
          "period7": {
            "x-sports": [
              "basketball",
              "table-tennis"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Счёт в 7-м периоде: 3-й овертайм (баскетбол) или геймы в 7-м сете (наст. теннис, best-of-7)."
          },
          "period1TieBreak": {
            "x-sports": [
              "tennis"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Очки в тайбрейке 1-го сета (только теннис, только если был тайбрейк)"
          },
          "period2TieBreak": {
            "x-sports": [
              "tennis"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Очки в тайбрейке 2-го сета (только теннис, только если был тайбрейк)"
          },
          "period3TieBreak": {
            "x-sports": [
              "tennis"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Очки в тайбрейке 3-го сета (только теннис, только если был тайбрейк)",
            "example": 7
          },
          "period4TieBreak": {
            "x-sports": [
              "tennis"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Очки в тайбрейке 4-го сета (только теннис, только если был тайбрейк)"
          },
          "period5TieBreak": {
            "x-sports": [
              "tennis"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Очки в тайбрейке 5-го сета (только теннис, только если был тайбрейк)"
          },
          "penalties": {
            "x-sports": [
              "football",
              "ice-hockey"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Счёт по послематчевым пенальти. Присутствует только если была серия пенальти.",
            "example": 4
          },
          "display": {
            "type": "string",
            "nullable": true,
            "description": "Текстовое представление счёта, как отдаёт источник (например, \"2-2 (5-4 pen.)\" в футболе или \"3 (6-4, 4-6, 7-6)\" в теннисе)."
          },
          "point": {
            "x-sports": [
              "tennis"
            ],
            "type": "string",
            "nullable": true,
            "description": "Текущее очко в теннисном гейме (для live-матчей). Значения: \"0\", \"15\", \"30\", \"40\", \"A\" (advantage) для обычных геймов, или числа \"0\"-\"7\"+ для тайбрейков",
            "example": "40"
          }
        }
      },
      "Venue": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "nullable": true,
            "description": "ID стадиона"
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Название стадиона"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "description": "Название стадиона на русском"
              }
            }
          },
          "capacity": {
            "type": "integer",
            "nullable": true,
            "description": "Вместимость"
          },
          "city": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "nullable": true,
                "description": "Город"
              },
              "translations": {
                "type": "object",
                "properties": {
                  "ru": {
                    "type": "string",
                    "nullable": true,
                    "description": "Город на русском"
                  }
                }
              }
            }
          },
          "country": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "nullable": true,
                "description": "Страна"
              }
            }
          }
        }
      },
      "Referee": {
        "type": "object",
        "description": "Информация об арбитре матча (на данный момент доступно для футбола)",
        "properties": {
          "id": {
            "type": "integer",
            "nullable": true,
            "description": "ID арбитра"
          },
          "name": {
            "type": "string",
            "description": "Имя арбитра",
            "example": "Anthony Taylor"
          },
          "yellowCards": {
            "type": "integer",
            "description": "Количество жёлтых карточек показанных арбитром (статистика)",
            "example": 156
          },
          "redCards": {
            "type": "integer",
            "description": "Количество красных карточек показанных арбитром (статистика)",
            "example": 12
          },
          "yellowRedCards": {
            "type": "integer",
            "description": "Количество вторых жёлтых карточек показанных арбитром (статистика)",
            "example": 8
          },
          "games": {
            "type": "integer",
            "description": "Количество игр проведённых арбитром (статистика)",
            "example": 245
          },
          "country": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Страна арбитра",
                "example": "England"
              }
            }
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "description": "Имя арбитра на русском языке",
                "example": "Энтони Тейлор"
              }
            }
          }
        }
      },
      "Player": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Уникальный идентификатор игрока"
          },
          "teamId": {
            "type": "integer",
            "description": "ID команды игрока"
          },
          "name": {
            "type": "string",
            "description": "Полное имя игрока"
          },
          "shortName": {
            "type": "string",
            "description": "Короткое имя"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "description": "Имя на русском"
              }
            }
          },
          "gender": {
            "type": "string",
            "description": "Пол",
            "enum": [
              "M",
              "F"
            ]
          },
          "height": {
            "type": "number",
            "description": "Рост в сантиметрах"
          },
          "country": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "description": "Страна игрока"
              }
            }
          },
          "position": {
            "type": "string",
            "description": "Позиция на поле",
            "enum": [
              "G",
              "D",
              "M",
              "F"
            ]
          },
          "shirtNumber": {
            "type": "integer",
            "description": "Номер на футболке"
          },
          "preferredFoot": {
            "type": "string",
            "description": "Рабочая нога",
            "enum": [
              "left",
              "right",
              "both"
            ]
          },
          "dateOfBirth": {
            "type": "string",
            "format": "date",
            "description": "Дата рождения"
          },
          "dateOfBirthTimestamp": {
            "type": "integer",
            "description": "Дата рождения в миллисекундах"
          },
          "contractUntilTimestamp": {
            "type": "integer",
            "description": "Контракт до (в миллисекундах)"
          },
          "proposedMarketValueEUR": {
            "type": "number",
            "description": "Рыночная стоимость в EUR"
          },
          "hasSeasonStatistics": {
            "x-sports": [
              "football",
              "basketball",
              "ice-hockey",
              "volleyball"
            ],
            "type": "boolean",
            "description": "Есть ли у игрока сезонная статистика (эндпоинты /players/{playerId}/statistics*). Данные могут появляться с задержкой.",
            "example": true
          },
          "image": {
            "type": "string",
            "description": "URL изображения игрока"
          }
        }
      },
      "LiveEvent": {
        "type": "object",
        "description": "Событие матча. Набор полей зависит от type. Подтипы goal/card/substitution/inGamePenalty/penaltyShootout/varDecision/injuryTime/period наиболее характерны для футбола; в других видах спорта набор типов беднее.",
        "properties": {
          "time": {
            "type": "integer",
            "description": "Время события в минутах"
          },
          "timeSeconds": {
            "type": "integer",
            "description": "Время события в секундах"
          },
          "type": {
            "type": "string",
            "description": "Тип события",
            "enum": [
              "card",
              "goal",
              "substitution",
              "inGamePenalty",
              "penaltyShootout",
              "varDecision",
              "injuryTime",
              "period"
            ]
          },
          "class": {
            "type": "string",
            "description": "Класс события"
          },
          "team": {
            "type": "string",
            "description": "Команда события",
            "enum": [
              "home",
              "away"
            ]
          },
          "player": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              }
            }
          },
          "playerIn": {
            "type": "object",
            "description": "Игрок входящий (для замен)",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              }
            }
          },
          "playerOut": {
            "type": "object",
            "description": "Игрок выходящий (для замен)",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              }
            }
          },
          "reason": {
            "type": "string",
            "description": "Причина события"
          },
          "from": {
            "type": "string",
            "description": "Откуда (например, penalty для гола)"
          },
          "homeScore": {
            "type": "integer",
            "description": "Счет хозяев после события"
          },
          "awayScore": {
            "type": "integer",
            "description": "Счет гостей после события"
          },
          "period": {
            "type": "integer",
            "nullable": true,
            "description": "Номер периода/тайма, к которому относится событие"
          },
          "description": {
            "type": "string",
            "description": "Текстовое описание события (если есть)"
          },
          "playerName": {
            "type": "string",
            "description": "Имя игрока, связанного с событием (дублирует player.name для удобства)"
          },
          "assist1Name": {
            "type": "string",
            "description": "Имя игрока, сделавшего первый ассист (голы)"
          },
          "assist2Name": {
            "type": "string",
            "description": "Имя игрока, сделавшего второй ассист (голы)"
          },
          "manager": {
            "type": "object",
            "description": "Тренер/официальное лицо — для карточки, показанной не игроку (type=card)",
            "properties": {
              "id": {
                "type": "integer"
              },
              "name": {
                "type": "string"
              }
            }
          },
          "rescinded": {
            "type": "boolean",
            "description": "Карточка отменена (type=card)"
          },
          "playerInName": {
            "type": "string",
            "description": "Имя вышедшего на замену игрока (type=substitution)"
          },
          "playerOutName": {
            "type": "string",
            "description": "Имя заменённого игрока (type=substitution)"
          },
          "injury": {
            "type": "boolean",
            "description": "Замена из-за травмы (type=substitution)"
          },
          "sequence": {
            "type": "integer",
            "nullable": true,
            "description": "Порядковый номер удара в серии пенальти (type=penaltyShootout)"
          },
          "confirmed": {
            "type": "boolean",
            "nullable": true,
            "description": "Подтверждено ли решение VAR (type=varDecision)"
          },
          "addedTime": {
            "type": "integer",
            "description": "Добавленное время в минутах (type=injuryTime / varDecision)"
          },
          "length": {
            "type": "integer",
            "nullable": true,
            "description": "Длительность добавленного времени (type=injuryTime)"
          },
          "text": {
            "type": "string",
            "description": "Текст метки периода, напр. начало/конец тайма (type=period)"
          },
          "isLive": {
            "type": "boolean",
            "description": "Идёт ли период в данный момент (type=period)"
          }
        }
      },
      "DefaultTournament": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Уникальный идентификатор турнира",
            "example": 7
          },
          "categoryId": {
            "type": "integer",
            "description": "ID категории турнира",
            "example": 1465
          },
          "name": {
            "type": "string",
            "description": "Название турнира",
            "example": "UEFA Champions League"
          }
        }
      },
      "DefaultTournaments": {
        "type": "object",
        "description": "Объект с дефолтными турнирами по языкам",
        "additionalProperties": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/DefaultTournament"
          }
        },
        "example": {
          "ru": [
            {
              "id": 7,
              "categoryId": 1465,
              "name": "UEFA Champions League"
            },
            {
              "id": 17,
              "categoryId": 1,
              "name": "Premier League"
            }
          ]
        }
      },
      "OddsChoice": {
        "type": "object",
        "description": "Вариант ставки с коэффициентами",
        "properties": {
          "name": {
            "type": "string",
            "description": "Название варианта ставки",
            "example": "1"
          },
          "decimal": {
            "type": "number",
            "description": "Текущий коэффициент в десятичном формате",
            "example": 1.61
          },
          "initialDecimal": {
            "type": "number",
            "description": "Начальный коэффициент в десятичном формате",
            "example": 1.35
          },
          "winning": {
            "type": "boolean",
            "description": "Является ли вариант выигрышным",
            "example": false
          },
          "change": {
            "type": "integer",
            "description": "Изменение коэффициента (-1: понижение, 0: без изменений, 1: повышение)",
            "enum": [
              -1,
              0,
              1
            ],
            "example": 1
          }
        }
      },
      "OddsMarket": {
        "type": "object",
        "description": "Рынок ставок (betting market) с вариантами коэффициентов",
        "properties": {
          "name": {
            "type": "string",
            "description": "Название рынка ставок",
            "example": "Full time"
          },
          "group": {
            "type": "string",
            "description": "Группа ставки",
            "example": "1X2"
          },
          "period": {
            "type": "string",
            "description": "Период матча для ставки",
            "example": "Full-time"
          },
          "isLive": {
            "type": "boolean",
            "description": "Доступна ли ставка в live режиме",
            "example": false
          },
          "suspended": {
            "type": "boolean",
            "description": "Приостановлена ли ставка",
            "example": false
          },
          "choices": {
            "type": "array",
            "description": "Варианты ставок с коэффициентами",
            "items": {
              "$ref": "#/components/schemas/OddsChoice"
            }
          }
        }
      },
      "Highlight": {
        "type": "object",
        "description": "Видео/хайлайт матча",
        "properties": {
          "title": {
            "type": "string",
            "description": "Название видео/хайлайта",
            "example": "Alianza Valledupar 1 - 0 La Equidad"
          },
          "url": {
            "type": "string",
            "format": "uri",
            "description": "URL видео (обычно YouTube)",
            "example": "https://youtu.be/H_9b2BSCNK4"
          },
          "image": {
            "type": "string",
            "format": "uri",
            "description": "URL изображения превью видео",
            "example": "https://i.ytimg.com/vi/H_9b2BSCNK4/hqdefault.jpg"
          }
        }
      },
      "EsportsData": {
        "type": "object",
        "description": "Корневой объект с данными киберспортивного матча. Содержит формат серии и массив отдельных игр (карт) с детальной статистикой.",
        "properties": {
          "bestOf": {
            "type": "integer",
            "nullable": true,
            "description": "Формат серии — максимальное количество игр (например, 1, 3 или 5). Best of 3 означает, что для победы нужно выиграть 2 игры из 3.",
            "example": 3
          },
          "games": {
            "type": "array",
            "description": "Список отдельных игр (карт) в серии. Каждая игра содержит счёт, статистику игроков, раунды (CS2) или баны (Dota 2/LoL).",
            "items": {
              "$ref": "#/components/schemas/EsportsGame"
            }
          }
        }
      },
      "EsportsGame": {
        "type": "object",
        "description": "Одна игра (карта/map) в киберспортивной серии. Для CS2 содержит информацию о карте и раундах, для Dota 2/LoL — о героях/чемпионах и банах.",
        "properties": {
          "id": {
            "type": "integer",
            "description": "Уникальный идентификатор игры",
            "example": 548805
          },
          "gameNumber": {
            "type": "integer",
            "description": "Порядковый номер игры в серии (начинается с 1)",
            "example": 1
          },
          "status": {
            "type": "string",
            "description": "Текущий статус игры",
            "enum": [
              "notstarted",
              "inprogress",
              "finished"
            ],
            "example": "finished"
          },
          "winnerCode": {
            "type": "integer",
            "nullable": true,
            "description": "Код команды-победителя игры: 1 — домашняя команда (home), 2 — гостевая команда (away). null, если игра ещё не завершена.",
            "example": 1
          },
          "durationSeconds": {
            "type": "integer",
            "nullable": true,
            "description": "Длительность игры в секундах. null, если игра ещё не завершена.",
            "example": 2340
          },
          "startTimestamp": {
            "type": "integer",
            "description": "Время начала игры в миллисекундах (Unix timestamp * 1000)",
            "example": 1773129756000
          },
          "homeScore": {
            "$ref": "#/components/schemas/Score",
            "description": "Счёт домашней команды в данной игре. Для CS2 — количество выигранных раундов (с разбивкой по половинам в period1/period2). Для Dota 2/LoL — количество убийств."
          },
          "awayScore": {
            "$ref": "#/components/schemas/Score",
            "description": "Счёт гостевой команды в данной игре. Для CS2 — количество выигранных раундов. Для Dota 2/LoL — количество убийств."
          },
          "map": {
            "type": "string",
            "nullable": true,
            "description": "Название карты (только CS2). Примеры: Dust2, Inferno, Mirage, Ancient, Nuke, Anubis, Vertigo. Для Dota 2 и LoL всегда null.",
            "example": "Dust2"
          },
          "homeTeamStartingSide": {
            "type": "string",
            "nullable": true,
            "description": "Стартовая сторона домашней команды. Зависит от игры: CS2 — T (Terrorists) или CT (Counter-Terrorists); Dota 2 — Radiant или Dire; LoL — Blue или Red.",
            "enum": [
              "T",
              "CT",
              "Radiant",
              "Dire",
              "Blue",
              "Red"
            ],
            "example": "T"
          },
          "homeTeamPlayers": {
            "type": "array",
            "description": "Игроки домашней команды с индивидуальной статистикой за данную игру. Набор полей статистики зависит от типа игры (CS2, Dota 2 или LoL).",
            "items": {
              "$ref": "#/components/schemas/EsportsPlayer"
            }
          },
          "awayTeamPlayers": {
            "type": "array",
            "description": "Игроки гостевой команды с индивидуальной статистикой за данную игру.",
            "items": {
              "$ref": "#/components/schemas/EsportsPlayer"
            }
          },
          "statistics": {
            "type": "object",
            "nullable": true,
            "description": "Командная статистика за игру. Для Dota 2: faction, kills, towersDestroyed/Remaining, barracksDestroyed/Remaining, firstBlood. Для LoL: color, kills, goldEarned, towerKills, inhibitorKills, dragonKills (с разбивкой по типам), nashorKills. Для CS2 обычно null (данные в rounds).",
            "properties": {
              "home": {
                "$ref": "#/components/schemas/EsportsTeamStatistics"
              },
              "away": {
                "$ref": "#/components/schemas/EsportsTeamStatistics"
              }
            }
          },
          "rounds": {
            "nullable": true,
            "description": "Информация о раундах — только для CS2. Содержит детали каждого раунда: исход, победитель, сторона домашней команды. Для Dota 2 и LoL всегда null.",
            "$ref": "#/components/schemas/EsportsRounds"
          },
          "bans": {
            "nullable": true,
            "description": "Забаненные герои/чемпионы — только для Dota 2 и LoL. Содержит списки банов для каждой команды. Для CS2 всегда null.",
            "$ref": "#/components/schemas/EsportsBans"
          }
        }
      },
      "EsportsPlayer": {
        "type": "object",
        "description": "Игрок с индивидуальной статистикой за одну игру киберспортивной серии. Базовые поля (player, kills, deaths, assists) присутствуют всегда. Остальные поля зависят от типа игры.",
        "properties": {
          "player": {
            "type": "object",
            "description": "Информация об игроке",
            "properties": {
              "id": {
                "type": "integer",
                "description": "Уникальный идентификатор игрока",
                "example": 1072879
              },
              "name": {
                "type": "string",
                "nullable": true,
                "description": "Настоящее имя игрока (имя + фамилия). Если настоящее имя недоступно — используется игровой ник.",
                "example": "Danil Kryshkovets"
              },
              "nickName": {
                "type": "string",
                "nullable": true,
                "description": "Игровой ник (никнейм) игрока",
                "example": "gpk"
              },
              "shortName": {
                "type": "string",
                "description": "Сокращённое игровое имя игрока",
                "example": "gpk"
              },
              "position": {
                "type": "string",
                "nullable": true,
                "description": "Код позиции/роли игрока. Dota 2: hc (Hard Carry), mid (Midlane), off (Offlane), ss (Soft Support), hs (Hard Support). LoL: top (Top), jun (Jungle), mid (Mid), adc (ADC), sup (Support). CS2: null (позиции не применяются).",
                "example": "mid"
              },
              "positionName": {
                "type": "string",
                "nullable": true,
                "description": "Человекочитаемое название позиции/роли. Примеры: Midlane, Hard Carry, Offlane, Soft Support, Hard Support, Top, Jungle, ADC, Support. null для CS2.",
                "example": "Midlane"
              },
              "translations": {
                "type": "object",
                "description": "Переводы имени игрока",
                "properties": {
                  "ru": {
                    "type": "string",
                    "nullable": true,
                    "description": "Настоящее имя игрока на русском"
                  }
                }
              },
              "image": {
                "type": "string",
                "nullable": true,
                "description": "URL изображения (аватара) игрока",
                "example": "https://images.api-sport.ru/sportimages/player-1072879"
              }
            }
          },
          "kills": {
            "type": "integer",
            "description": "Количество убийств игрока за игру (все типы игр)",
            "example": 9
          },
          "deaths": {
            "type": "integer",
            "description": "Количество смертей игрока за игру (все типы игр)",
            "example": 0
          },
          "assists": {
            "type": "integer",
            "description": "Количество ассистов игрока за игру (все типы игр)",
            "example": 11
          },
          "adr": {
            "type": "number",
            "description": "Average Damage per Round — средний урон за раунд (только CS2)",
            "example": 74.2
          },
          "kast": {
            "type": "integer",
            "description": "Процент раундов, в которых игрок совершил Kill, Assist, Survived или был Trade-killed (только CS2)",
            "example": 66
          },
          "kdDiff": {
            "type": "integer",
            "description": "Разница между убийствами и смертями Kill-Death Difference (только CS2)",
            "example": -1
          },
          "firstKillsDiff": {
            "type": "integer",
            "description": "Разница первых убийств: сколько раз игрок сделал первое убийство в раунде минус сколько раз умер первым (только CS2)",
            "example": 2
          },
          "flashAssists": {
            "type": "integer",
            "description": "Количество ассистов с помощью ослепляющих гранат (только CS2)",
            "example": 0
          },
          "headshots": {
            "type": "integer",
            "description": "Количество убийств в голову (только CS2)",
            "example": 7
          },
          "character": {
            "type": "object",
            "nullable": true,
            "description": "Выбранный герой (Dota 2) или чемпион (LoL). Отсутствует для CS2.",
            "properties": {
              "name": {
                "type": "string",
                "description": "Имя героя/чемпиона",
                "example": "Void Spirit"
              },
              "slug": {
                "type": "string",
                "description": "URL-совместимый идентификатор героя/чемпиона",
                "example": "void-spirit"
              }
            }
          },
          "denies": {
            "type": "integer",
            "description": "Количество добиваний союзных крипов (только Dota 2)",
            "example": 19
          },
          "goldPerMin": {
            "type": "integer",
            "description": "Золото в минуту (только Dota 2)",
            "example": 638
          },
          "xpPerMin": {
            "type": "integer",
            "description": "Опыт в минуту (только Dota 2)",
            "example": 778
          },
          "lastHits": {
            "type": "integer",
            "description": "Количество добиваний вражеских крипов (только Dota 2)",
            "example": 354
          },
          "netWorth": {
            "type": "integer",
            "description": "Общая стоимость инвентаря и золота игрока (только Dota 2)",
            "example": 26260
          },
          "heroLevel": {
            "type": "integer",
            "description": "Уровень героя на момент окончания игры (только Dota 2)",
            "example": 23
          },
          "goldEarned": {
            "type": "integer",
            "description": "Общее количество заработанного золота (только LoL)",
            "example": 14134
          },
          "level": {
            "type": "integer",
            "description": "Уровень чемпиона на момент окончания игры (только LoL)",
            "example": 17
          },
          "minionsKilled": {
            "type": "integer",
            "description": "Количество убитых миньонов/крипов (только LoL)",
            "example": 234
          },
          "role": {
            "type": "string",
            "description": "Роль игрока в команде (только LoL). Значения: top, jun, mid, adc, sup",
            "example": "jun"
          }
        }
      },
      "EsportsTeamStatistics": {
        "type": "object",
        "description": "Командная статистика за одну игру. Набор полей зависит от типа игры. Dota 2: faction (Radiant/Dire), kills, towersDestroyed, towersRemaining, barracksDestroyed, barracksRemaining, firstBlood. LoL: color (Blue/Red), kills, goldEarned, towerKills, inhibitorKills, dragonKills, nashorKills, elderDrakeKills и отдельные типы драконов (chemtechDrakeKills, cloudDrakeKills, hextechDrakeKills, infernalDrakeKills, mountainDrakeKills, oceanDrakeKills). Для CS2 statistics обычно null.",
        "properties": {
          "faction": {
            "type": "string",
            "nullable": true,
            "description": "Фракция команды (только Dota 2): Radiant или Dire",
            "enum": [
              "Radiant",
              "Dire"
            ],
            "example": "Radiant"
          },
          "color": {
            "type": "string",
            "nullable": true,
            "description": "Цвет/сторона команды (только LoL): Blue или Red",
            "enum": [
              "Blue",
              "Red"
            ],
            "example": "Blue"
          },
          "kills": {
            "type": "integer",
            "description": "Общее количество убийств команды",
            "example": 27
          },
          "firstBlood": {
            "type": "boolean",
            "description": "Совершила ли команда первое убийство в игре (только Dota 2)",
            "example": false
          },
          "towersDestroyed": {
            "type": "integer",
            "description": "Количество разрушенных вражеских башен (только Dota 2)",
            "example": 3
          },
          "towersRemaining": {
            "type": "integer",
            "description": "Количество оставшихся своих башен (только Dota 2)",
            "example": 8
          },
          "barracksDestroyed": {
            "type": "integer",
            "description": "Количество разрушенных вражеских бараков (только Dota 2)",
            "example": 0
          },
          "barracksRemaining": {
            "type": "integer",
            "description": "Количество оставшихся своих бараков (только Dota 2)",
            "example": 6
          },
          "goldEarned": {
            "type": "integer",
            "description": "Общее золото команды (только LoL)",
            "example": 56802
          },
          "towerKills": {
            "type": "integer",
            "description": "Количество уничтоженных башен (только LoL)",
            "example": 4
          },
          "inhibitorKills": {
            "type": "integer",
            "description": "Количество уничтоженных ингибиторов (только LoL)",
            "example": 0
          },
          "dragonKills": {
            "type": "integer",
            "description": "Общее количество убитых драконов (только LoL)",
            "example": 1
          },
          "nashorKills": {
            "type": "integer",
            "description": "Количество убийств Барона Нашора (только LoL)",
            "example": 0
          },
          "elderDrakeKills": {
            "type": "integer",
            "description": "Количество убийств Старшего дракона (только LoL)",
            "example": 0
          },
          "chemtechDrakeKills": {
            "type": "integer",
            "description": "Количество убийств Химтех-дракона (только LoL)",
            "example": 0
          },
          "cloudDrakeKills": {
            "type": "integer",
            "description": "Количество убийств Воздушного дракона (только LoL)",
            "example": 0
          },
          "hextechDrakeKills": {
            "type": "integer",
            "description": "Количество убийств Хекстек-дракона (только LoL)",
            "example": 0
          },
          "infernalDrakeKills": {
            "type": "integer",
            "description": "Количество убийств Огненного дракона (только LoL)",
            "example": 1
          },
          "mountainDrakeKills": {
            "type": "integer",
            "description": "Количество убийств Горного дракона (только LoL)",
            "example": 0
          },
          "oceanDrakeKills": {
            "type": "integer",
            "description": "Количество убийств Водного дракона (только LoL)",
            "example": 0
          }
        }
      },
      "EsportsRounds": {
        "type": "object",
        "description": "Информация о раундах в игре CS2. Содержит детали каждого раунда основного времени и овертайма (если был).",
        "properties": {
          "roundsInAHalf": {
            "type": "integer",
            "nullable": true,
            "description": "Количество раундов в одной половине (обычно 12 для CS2 MR12)",
            "example": 12
          },
          "normaltime": {
            "type": "array",
            "description": "Массив раундов основного времени",
            "items": {
              "$ref": "#/components/schemas/EsportsRound"
            }
          },
          "overtime": {
            "type": "array",
            "nullable": true,
            "description": "Массив раундов овертайма. null, если овертайма не было.",
            "items": {
              "$ref": "#/components/schemas/EsportsRound"
            }
          },
          "overtimeChunkSize": {
            "type": "integer",
            "nullable": true,
            "description": "Количество раундов в одном блоке овертайма (обычно 6 для CS2). null, если овертайма не было.",
            "example": 6
          }
        }
      },
      "EsportsRound": {
        "type": "object",
        "description": "Один раунд в игре CS2",
        "properties": {
          "roundNumber": {
            "type": "integer",
            "description": "Порядковый номер раунда (начинается с 1)",
            "example": 1
          },
          "outcome": {
            "type": "string",
            "nullable": true,
            "description": "Исход раунда: elimination — все игроки противника убиты; defuse — бомба обезврежена; explosion — бомба взорвалась; timeout — время раунда истекло",
            "enum": [
              "elimination",
              "defuse",
              "explosion",
              "timeout"
            ],
            "example": "elimination"
          },
          "winnerCode": {
            "type": "integer",
            "nullable": true,
            "description": "Код команды-победителя раунда: 1 — домашняя команда (home), 2 — гостевая команда (away)",
            "example": 1
          },
          "homeTeamSide": {
            "type": "string",
            "nullable": true,
            "description": "Сторона домашней команды в данном раунде: T (Terrorists) или CT (Counter-Terrorists). Меняется после первой половины.",
            "enum": [
              "T",
              "CT"
            ],
            "example": "T"
          }
        }
      },
      "EsportsBans": {
        "type": "object",
        "description": "Забаненные герои (Dota 2) или чемпионы (LoL) для каждой команды. Баны определяются в фазе драфта перед началом игры.",
        "properties": {
          "home": {
            "type": "array",
            "description": "Список героев/чемпионов, забаненных домашней командой",
            "items": {
              "$ref": "#/components/schemas/EsportsCharacter"
            }
          },
          "away": {
            "type": "array",
            "description": "Список героев/чемпионов, забаненных гостевой командой",
            "items": {
              "$ref": "#/components/schemas/EsportsCharacter"
            }
          }
        }
      },
      "EsportsCharacter": {
        "type": "object",
        "description": "Герой (Dota 2) или чемпион (LoL)",
        "properties": {
          "name": {
            "type": "string",
            "description": "Имя героя/чемпиона",
            "example": "Batrider"
          },
          "slug": {
            "type": "string",
            "description": "URL-совместимый идентификатор (slug) героя/чемпиона",
            "example": "batrider"
          }
        }
      },
      "TennisData": {
        "type": "object",
        "description": "Корневой объект с данными теннисного матча. Содержит информацию о формате серии, покрытии, подаче, посеве игроков, детализацию по сетам, momentum-график и (при запросе одного матча) point-by-point данные.",
        "properties": {
          "bestOf": {
            "type": "integer",
            "nullable": true,
            "description": "Формат матча — максимальное количество сетов (3 или 5). Best of 3 — для WTA и большинства ATP турниров, Best of 5 — для мужских Grand Slam.",
            "example": 3
          },
          "groundType": {
            "type": "string",
            "nullable": true,
            "description": "Тип покрытия корта",
            "example": "Hardcourt outdoor",
            "enum": [
              "Hardcourt outdoor",
              "Hardcourt indoor",
              "Clay",
              "Grass"
            ]
          },
          "firstToServe": {
            "type": "string",
            "nullable": true,
            "description": "Кто подаёт первым в матче",
            "enum": [
              "home",
              "away"
            ],
            "example": "home"
          },
          "homePlayerSeed": {
            "type": "string",
            "nullable": true,
            "description": "Посев (seed) домашнего игрока в турнире. Посев определяет рейтинг игрока в сетке турнира.",
            "example": "25"
          },
          "awayPlayerSeed": {
            "type": "string",
            "nullable": true,
            "description": "Посев (seed) гостевого игрока в турнире",
            "example": "18"
          },
          "sets": {
            "type": "array",
            "nullable": true,
            "description": "Детализация по сыгранным сетам. Каждый элемент содержит количество геймов, победителя, длительность и данные тайбрейка (если был).",
            "items": {
              "$ref": "#/components/schemas/TennisSet"
            }
          },
          "momentum": {
            "type": "array",
            "nullable": true,
            "description": "График импульса (momentum) матча. Показывает доминирование одного из игроков в каждом гейме. Положительные значения — доминирование домашнего игрока, отрицательные — гостевого.",
            "items": {
              "$ref": "#/components/schemas/TennisMomentumItem"
            }
          },
          "pointByPoint": {
            "type": "array",
            "nullable": true,
            "description": "Подробные данные по каждому очку матча, сгруппированные по сетам и геймам. Доступно только при запросе одного матча (/matches/{matchId}). Содержит тип каждого розыгрыша (эйс, двойная ошибка, виннер) и текущий счёт.",
            "items": {
              "$ref": "#/components/schemas/TennisPointByPointSet"
            }
          }
        }
      },
      "TennisSet": {
        "type": "object",
        "description": "Информация об одном сете теннисного матча",
        "properties": {
          "setNumber": {
            "type": "integer",
            "description": "Номер сета (1-5)",
            "example": 3
          },
          "homeGames": {
            "type": "integer",
            "description": "Количество геймов, выигранных домашним игроком в этом сете",
            "example": 7
          },
          "awayGames": {
            "type": "integer",
            "description": "Количество геймов, выигранных гостевым игроком в этом сете",
            "example": 6
          },
          "winner": {
            "type": "string",
            "nullable": true,
            "description": "Победитель сета. null если сет ещё не завершён",
            "enum": [
              "home",
              "away"
            ],
            "example": "home"
          },
          "durationSeconds": {
            "type": "integer",
            "nullable": true,
            "description": "Длительность сета в секундах",
            "example": 3423
          },
          "tiebreak": {
            "nullable": true,
            "description": "Данные тайбрейка. Присутствует только если в сете был тайбрейк (обычно при счёте 6-6). Тайбрейк — специальный гейм, в котором очки считаются последовательно (1, 2, 3...) до 7 с разницей минимум 2.",
            "$ref": "#/components/schemas/TennisTiebreak"
          }
        }
      },
      "TennisTiebreak": {
        "type": "object",
        "description": "Результат тайбрейка в сете",
        "properties": {
          "homePoints": {
            "type": "integer",
            "description": "Очки домашнего игрока в тайбрейке",
            "example": 7
          },
          "awayPoints": {
            "type": "integer",
            "description": "Очки гостевого игрока в тайбрейке",
            "example": 4
          }
        }
      },
      "TennisMomentumItem": {
        "type": "object",
        "description": "Одна точка на графике импульса (momentum) матча. Каждая точка соответствует одному гейму.",
        "properties": {
          "set": {
            "type": "integer",
            "description": "Номер сета",
            "example": 1
          },
          "game": {
            "type": "integer",
            "description": "Номер гейма в сете",
            "example": 9
          },
          "value": {
            "type": "number",
            "description": "Значение импульса. Положительное значение — доминирование домашнего игрока (home), отрицательное — гостевого (away). Диапазон примерно от -100 до +100. Чем больше абсолютное значение, тем увереннее была победа в гейме.",
            "example": -17.48
          },
          "breakOccurred": {
            "type": "boolean",
            "description": "Был ли брейк подачи в этом гейме. Брейк — ситуация когда принимающий игрок выиграл гейм на подаче соперника.",
            "example": true
          }
        }
      },
      "TennisPointByPointSet": {
        "type": "object",
        "description": "Данные point-by-point для одного сета",
        "properties": {
          "set": {
            "type": "integer",
            "description": "Номер сета",
            "example": 3
          },
          "games": {
            "type": "array",
            "description": "Массив геймов в сете (в обратном хронологическом порядке — от последнего к первому)",
            "items": {
              "$ref": "#/components/schemas/TennisGame"
            }
          }
        }
      },
      "TennisGame": {
        "type": "object",
        "description": "Один гейм теннисного матча с детализацией по очкам",
        "properties": {
          "game": {
            "type": "integer",
            "description": "Номер гейма в сете",
            "example": 13
          },
          "isTiebreak": {
            "type": "boolean",
            "description": "Является ли этот гейм тайбрейком. В тайбрейке используется другая система подсчёта очков (1, 2, 3... вместо 15, 30, 40).",
            "example": true
          },
          "score": {
            "nullable": true,
            "description": "Счёт по геймам в сете после завершения данного гейма, а также информация о подающем и победителе",
            "$ref": "#/components/schemas/TennisGameScore"
          },
          "points": {
            "type": "array",
            "description": "Массив очков в гейме в хронологическом порядке. Каждое очко содержит текущий счёт и тип розыгрыша.",
            "items": {
              "$ref": "#/components/schemas/TennisPoint"
            }
          }
        }
      },
      "TennisGameScore": {
        "type": "object",
        "description": "Счёт в сете после завершения гейма и информация о подающем/победителе",
        "properties": {
          "homeGames": {
            "type": "integer",
            "description": "Геймы домашнего игрока в сете после этого гейма",
            "example": 7
          },
          "awayGames": {
            "type": "integer",
            "description": "Геймы гостевого игрока в сете после этого гейма",
            "example": 6
          },
          "serving": {
            "type": "string",
            "nullable": true,
            "description": "Кто подавал в этом гейме",
            "enum": [
              "home",
              "away"
            ],
            "example": "home"
          },
          "wonBy": {
            "type": "string",
            "nullable": true,
            "description": "Кто выиграл этот гейм",
            "enum": [
              "home",
              "away"
            ],
            "example": "home"
          }
        }
      },
      "TennisPoint": {
        "type": "object",
        "description": "Одно очко в теннисном гейме. Содержит текущий счёт после розыгрыша и тип розыгрыша.",
        "properties": {
          "homePoint": {
            "type": "string",
            "nullable": true,
            "description": "Очко домашнего игрока после розыгрыша. В обычном гейме: \"0\", \"15\", \"30\", \"40\", \"A\" (advantage). В тайбрейке: \"0\", \"1\", \"2\", ... (последовательные числа).",
            "example": "40"
          },
          "awayPoint": {
            "type": "string",
            "nullable": true,
            "description": "Очко гостевого игрока после розыгрыша",
            "example": "30"
          },
          "description": {
            "type": "string",
            "nullable": true,
            "description": "Тип розыгрыша",
            "enum": [
              "normal",
              "ace",
              "doubleFault"
            ],
            "example": "ace"
          },
          "homePointType": {
            "type": "string",
            "nullable": true,
            "description": "Результат розыгрыша для домашнего игрока. winner — игрок выиграл очко активным ударом; ace — выиграл очко подачей навылет; error — соперник допустил ошибку; doubleFault — двойная ошибка при подаче; loser — игрок проиграл очко.",
            "enum": [
              "winner",
              "doubleFault",
              "ace",
              "loser",
              "error"
            ],
            "example": "ace"
          },
          "awayPointType": {
            "type": "string",
            "nullable": true,
            "description": "Результат розыгрыша для гостевого игрока",
            "enum": [
              "winner",
              "doubleFault",
              "ace",
              "loser",
              "error"
            ],
            "example": "loser"
          }
        }
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "Описание ошибки"
          },
          "message": {
            "type": "string",
            "description": "Дополнительная информация об ошибке"
          }
        }
      },
      "BkTranslatedName": {
        "type": "object",
        "description": "Мультиязычное название",
        "properties": {
          "en": {
            "type": "string",
            "description": "Название на английском",
            "example": "Match Winner"
          },
          "ru": {
            "type": "string",
            "description": "Название на русском",
            "example": "Победа в матче"
          }
        }
      },
      "BkOddsLine": {
        "type": "object",
        "description": "Линия ставки с аргументом (для рынков с параметром, например тотал 2.5)",
        "properties": {
          "dateUpdateMs": {
            "type": "integer",
            "nullable": true,
            "description": "Время обновления коэффициента в миллисекундах",
            "example": 1234567890
          },
          "factor": {
            "type": "number",
            "description": "Коэффициент ставки",
            "example": 1.95
          },
          "argument": {
            "type": "number",
            "description": "Аргумент/параметр ставки (например значение тотала или гандикапа)",
            "example": 2.5
          }
        }
      },
      "BkOddsStake": {
        "type": "object",
        "description": "Исход ставки. Для рынков без аргумента содержит name и factor. Для рынков с аргументом (hasArgument=true) содержит name и массив lines",
        "properties": {
          "name": {
            "description": "Мультиязычное название исхода",
            "allOf": [
              {
                "$ref": "#/components/schemas/BkTranslatedName"
              }
            ]
          },
          "factor": {
            "type": "number",
            "description": "Коэффициент ставки (для рынков без аргумента, т.е. hasArgument=false)",
            "example": 1.85
          },
          "lines": {
            "type": "array",
            "description": "Массив линий с разными аргументами (для рынков с аргументом, hasArgument=true). Отсортирован по argument по возрастанию",
            "items": {
              "$ref": "#/components/schemas/BkOddsLine"
            }
          }
        }
      },
      "BkOddsMarket": {
        "type": "object",
        "description": "Рынок букмекерских ставок (например 'Исход матча', 'Тотал голов')",
        "properties": {
          "name": {
            "description": "Мультиязычное название рынка",
            "allOf": [
              {
                "$ref": "#/components/schemas/BkTranslatedName"
              }
            ]
          },
          "hasArgument": {
            "type": "boolean",
            "description": "Есть ли у рынка аргумент/параметр (например значение тотала). Если true — исходы содержат lines вместо factor",
            "example": false
          },
          "stakeKeys": {
            "type": "array",
            "description": "Упорядоченный список ключей исходов",
            "items": {
              "type": "string"
            },
            "example": [
              "home_win",
              "draw",
              "away_win"
            ]
          },
          "stakes": {
            "type": "object",
            "description": "Исходы ставок. Ключи — слаги исходов (например 'home_win', 'over', 'under'). Значение каждого ключа — объект BkOddsStake",
            "properties": {
              "home_win": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/BkOddsStake"
                  }
                ],
                "description": "Пример исхода (ключ динамический)"
              }
            },
            "example": {
              "home_win": {
                "name": {
                  "en": "Home Win",
                  "ru": "Победа хозяев"
                },
                "factor": 1.85
              },
              "draw": {
                "name": {
                  "en": "Draw",
                  "ru": "Ничья"
                },
                "factor": 3.4
              },
              "away_win": {
                "name": {
                  "en": "Away Win",
                  "ru": "Победа гостей"
                },
                "factor": 4.2
              }
            }
          }
        }
      },
      "BookmakerOddsData": {
        "type": "object",
        "description": "Данные коэффициентов одного букмекера",
        "properties": {
          "slug": {
            "type": "string",
            "description": "Слаг-идентификатор букмекера",
            "example": "melbet"
          },
          "name": {
            "description": "Название букмекера на разных языках",
            "allOf": [
              {
                "$ref": "#/components/schemas/BkTranslatedName"
              }
            ],
            "example": {
              "en": "Melbet",
              "ru": "Мелбет"
            }
          },
          "updatedAt": {
            "type": "integer",
            "nullable": true,
            "description": "Время последнего обновления коэффициентов (timestamp в миллисекундах)",
            "example": 1234567890000
          },
          "isBettingActive": {
            "type": "boolean",
            "description": "Активны ли ставки в данный момент",
            "example": true
          },
          "markets": {
            "type": "object",
            "description": "Рынки ставок. Ключи — слаги рынков (например 'result', 'total', 'handicap', 'double_chance', а также пер-периодные слаги вида '1st_half_total', '2nd_half_handicap', '1st_half_result', '1st_set_winner'). Значение каждого ключа — объект BkOddsMarket",
            "properties": {
              "match_result": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/BkOddsMarket"
                  }
                ],
                "description": "Пример рынка (ключ динамический)"
              }
            },
            "example": {
              "match_result": {
                "name": {
                  "en": "Match Result",
                  "ru": "Исход матча"
                },
                "hasArgument": false,
                "stakeKeys": [
                  "home_win",
                  "draw",
                  "away_win"
                ],
                "stakes": {}
              }
            }
          }
        }
      },
      "MissingPlayer": {
        "type": "object",
        "description": "Отсутствующий игрок (травма, болезнь или дисквалификация). Справочник причин и уточнений: [Словарь причин](https://docs.api-sport.ru/concepts/missing-players-dictionary).",
        "properties": {
          "player": {
            "type": "object",
            "description": "Данные отсутствующего игрока",
            "properties": {
              "id": {
                "type": "integer",
                "nullable": true,
                "description": "ID игрока"
              },
              "name": {
                "type": "string",
                "nullable": true,
                "description": "Имя игрока"
              },
              "position": {
                "type": "string",
                "nullable": true,
                "description": "Позиция игрока"
              },
              "shirtNumber": {
                "type": "string",
                "nullable": true,
                "description": "Игровой номер (строка)"
              },
              "translations": {
                "type": "object",
                "properties": {
                  "ru": {
                    "type": "string",
                    "nullable": true,
                    "description": "Имя игрока на русском"
                  }
                }
              },
              "image": {
                "type": "string",
                "description": "URL изображения игрока"
              }
            }
          },
          "type": {
            "type": "string",
            "nullable": true,
            "enum": [
              "missing",
              "doubtful"
            ],
            "description": "Статус: missing — точно не сыграет; doubtful — под вопросом"
          },
          "reason": {
            "type": "object",
            "description": "Причина отсутствия",
            "properties": {
              "code": {
                "type": "integer",
                "nullable": true,
                "description": "Код причины: 0 — другое, 1 — травма, 2 — болезнь, 3 — дисквалификация, 4 — недоступен, 11 — перебор жёлтых карточек (только футбол), 12 — вторая жёлтая → красная (только футбол), 13 — красная карточка (только футбол), 21 — в аренде"
              },
              "name": {
                "type": "string",
                "nullable": true,
                "description": "Кодовое имя причины: Injured, Ill, Suspended, Absent, Other, YellowCard, YellowRedCard, RedCard, OnLoan"
              },
              "categoryKey": {
                "type": "string",
                "description": "Ключ категории причины (для сопоставления со словарём)"
              },
              "translations": {
                "type": "object",
                "nullable": true,
                "description": "Перевод причины",
                "properties": {
                  "ru": {
                    "type": "string",
                    "description": "Причина на русском"
                  },
                  "es": {
                    "type": "string",
                    "description": "Причина на испанском"
                  }
                }
              }
            }
          },
          "description": {
            "type": "object",
            "nullable": true,
            "description": "Уточнение причины (часть тела или диагноз); null, если уточнения нет",
            "properties": {
              "raw": {
                "type": "string",
                "description": "Исходный текст уточнения (на английском), например \"Muscle Injury\""
              },
              "key": {
                "type": "string",
                "nullable": true,
                "description": "Ключ перевода уточнения (для сопоставления со словарём)"
              },
              "translations": {
                "type": "object",
                "nullable": true,
                "description": "Перевод уточнения",
                "properties": {
                  "ru": {
                    "type": "string",
                    "description": "Уточнение на русском"
                  },
                  "es": {
                    "type": "string",
                    "description": "Уточнение на испанском"
                  }
                }
              }
            }
          },
          "expectedEndDateMs": {
            "type": "integer",
            "format": "int64",
            "nullable": true,
            "description": "Ожидаемая дата возвращения игрока, Unix-timestamp в миллисекундах; null, если неизвестно"
          }
        }
      },
      "BookmakerOdds": {
        "type": "object",
        "description": "Букмекерские коэффициенты. Ключи объекта — идентификаторы букмекеров (melbet, pari, marathon, betboom). Пустой объект {} если коэффициенты отсутствуют. Постепенно будут добавлены другие букмекеры",
        "properties": {
          "melbet": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BookmakerOddsData"
              }
            ],
            "description": "Коэффициенты букмекера Melbet"
          },
          "pari": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BookmakerOddsData"
              }
            ],
            "description": "Коэффициенты букмекера Pari"
          },
          "marathon": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BookmakerOddsData"
              }
            ],
            "description": "Коэффициенты букмекера Marathon"
          },
          "betboom": {
            "allOf": [
              {
                "$ref": "#/components/schemas/BookmakerOddsData"
              }
            ],
            "description": "Коэффициенты букмекера BetBoom"
          }
        },
        "example": {
          "melbet": {
            "slug": "melbet",
            "name": {
              "en": "Melbet",
              "ru": "Мелбет"
            },
            "updatedAt": 1234567890000,
            "isBettingActive": true,
            "markets": {
              "result": {
                "name": {
                  "en": "Result",
                  "ru": "Исход"
                },
                "hasArgument": false,
                "stakeKeys": [
                  "w1",
                  "x",
                  "w2"
                ],
                "stakes": {
                  "w1": {
                    "name": {
                      "en": "Win1",
                      "ru": "П1"
                    },
                    "factor": 1.85
                  },
                  "x": {
                    "name": {
                      "en": "X",
                      "ru": "X"
                    },
                    "factor": 3.4
                  },
                  "w2": {
                    "name": {
                      "en": "Win2",
                      "ru": "П2"
                    },
                    "factor": 4.2
                  }
                }
              }
            }
          },
          "pari": {
            "slug": "pari",
            "name": {
              "en": "Pari",
              "ru": "Пари"
            },
            "updatedAt": 1234567890000,
            "isBettingActive": true,
            "markets": {
              "result": {
                "name": {
                  "en": "Result",
                  "ru": "Исход"
                },
                "hasArgument": false,
                "stakeKeys": [
                  "w1",
                  "x",
                  "w2"
                ],
                "stakes": {
                  "w1": {
                    "name": {
                      "en": "Win1",
                      "ru": "П1"
                    },
                    "factor": 1.8
                  },
                  "x": {
                    "name": {
                      "en": "X",
                      "ru": "X"
                    },
                    "factor": 3.5
                  },
                  "w2": {
                    "name": {
                      "en": "Win2",
                      "ru": "П2"
                    },
                    "factor": 4.4
                  }
                }
              },
              "total": {
                "name": {
                  "en": "Total",
                  "ru": "Тотал"
                },
                "hasArgument": true,
                "stakeKeys": [
                  "over",
                  "under"
                ],
                "stakes": {
                  "over": {
                    "name": {
                      "en": "Over",
                      "ru": "Больше"
                    },
                    "lines": [
                      {
                        "dateUpdateMs": 1234567890000,
                        "factor": 1.85,
                        "argument": 2.5
                      }
                    ]
                  },
                  "under": {
                    "name": {
                      "en": "Under",
                      "ru": "Меньше"
                    },
                    "lines": [
                      {
                        "dateUpdateMs": 1234567890000,
                        "factor": 1.95,
                        "argument": 2.5
                      }
                    ]
                  }
                }
              }
            }
          },
          "marathon": {
            "slug": "marathon",
            "name": {
              "en": "Marathon",
              "ru": "Марафон"
            },
            "updatedAt": 1234567890000,
            "isBettingActive": true,
            "markets": {
              "result": {
                "name": {
                  "en": "Result",
                  "ru": "Исход"
                },
                "hasArgument": false,
                "stakeKeys": [
                  "w1",
                  "x",
                  "w2"
                ],
                "stakes": {
                  "w1": {
                    "name": {
                      "en": "Win1",
                      "ru": "П1"
                    },
                    "factor": 2.4
                  },
                  "x": {
                    "name": {
                      "en": "X",
                      "ru": "X"
                    },
                    "factor": 3.3
                  },
                  "w2": {
                    "name": {
                      "en": "Win2",
                      "ru": "П2"
                    },
                    "factor": 2.9
                  }
                }
              },
              "handicap": {
                "name": {
                  "en": "Handicap",
                  "ru": "Фора"
                },
                "hasArgument": true,
                "stakeKeys": [
                  "handicap_1",
                  "handicap_2"
                ],
                "stakes": {
                  "handicap_1": {
                    "name": {
                      "en": "Handicap 1",
                      "ru": "Фора1"
                    },
                    "lines": [
                      {
                        "dateUpdateMs": 1234567890000,
                        "factor": 1.85,
                        "argument": 0
                      }
                    ]
                  },
                  "handicap_2": {
                    "name": {
                      "en": "Handicap 2",
                      "ru": "Фора2"
                    },
                    "lines": [
                      {
                        "dateUpdateMs": 1234567890000,
                        "factor": 1.95,
                        "argument": 0
                      }
                    ]
                  }
                }
              }
            }
          },
          "betboom": {
            "slug": "betboom",
            "name": {
              "en": "BetBoom",
              "ru": "БетБум"
            },
            "updatedAt": 1234567890000,
            "isBettingActive": true,
            "markets": {
              "result": {
                "name": {
                  "en": "Result",
                  "ru": "Исход"
                },
                "hasArgument": false,
                "stakeKeys": [
                  "w1",
                  "x",
                  "w2"
                ],
                "stakes": {
                  "w1": {
                    "name": {
                      "en": "Win1",
                      "ru": "П1"
                    },
                    "factor": 1.9
                  },
                  "x": {
                    "name": {
                      "en": "X",
                      "ru": "X"
                    },
                    "factor": 3.6
                  },
                  "w2": {
                    "name": {
                      "en": "Win2",
                      "ru": "П2"
                    },
                    "factor": 3.9
                  }
                }
              },
              "handicap": {
                "name": {
                  "en": "Handicap",
                  "ru": "Фора"
                },
                "hasArgument": true,
                "stakeKeys": [
                  "handicap_1",
                  "handicap_2"
                ],
                "stakes": {
                  "handicap_1": {
                    "name": {
                      "en": "Handicap 1",
                      "ru": "Фора1"
                    },
                    "lines": [
                      {
                        "dateUpdateMs": 1234567890000,
                        "factor": 1.9,
                        "argument": -1.5
                      }
                    ]
                  },
                  "handicap_2": {
                    "name": {
                      "en": "Handicap 2",
                      "ru": "Фора2"
                    },
                    "lines": [
                      {
                        "dateUpdateMs": 1234567890000,
                        "factor": 1.9,
                        "argument": 1.5
                      }
                    ]
                  }
                }
              },
              "total": {
                "name": {
                  "en": "Total",
                  "ru": "Тотал"
                },
                "hasArgument": true,
                "stakeKeys": [
                  "over",
                  "under"
                ],
                "stakes": {
                  "over": {
                    "name": {
                      "en": "Over",
                      "ru": "Больше"
                    },
                    "lines": [
                      {
                        "dateUpdateMs": 1234567890000,
                        "factor": 1.85,
                        "argument": 2.5
                      }
                    ]
                  },
                  "under": {
                    "name": {
                      "en": "Under",
                      "ru": "Меньше"
                    },
                    "lines": [
                      {
                        "dateUpdateMs": 1234567890000,
                        "factor": 1.95,
                        "argument": 2.5
                      }
                    ]
                  }
                }
              }
            }
          }
        }
      },
      "SeasonStatisticsEntityBrief": {
        "type": "object",
        "description": "Краткая карточка сущности (игрок, команда или турнир) в ответах сезонной статистики.",
        "properties": {
          "id": {
            "type": "integer",
            "example": 861608
          },
          "name": {
            "type": "string",
            "nullable": true,
            "example": "Luka Dončić"
          },
          "translations": {
            "type": "object",
            "description": "Переводы названия.",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "example": "Лука Дончич"
              }
            }
          },
          "image": {
            "type": "string",
            "description": "URL изображения.",
            "example": "https://img.api-sport.ru/player-861608"
          }
        }
      },
      "SeasonStatisticsSeasonBrief": {
        "type": "object",
        "description": "Краткая карточка сезона.",
        "properties": {
          "id": {
            "type": "integer",
            "example": 76986
          },
          "name": {
            "type": "string",
            "nullable": true,
            "example": "NBA 25/26"
          },
          "year": {
            "type": "string",
            "nullable": true,
            "example": "25/26"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true
              }
            }
          }
        }
      },
      "SeasonStatisticsSeason": {
        "type": "object",
        "description": "Сезон в списке доступной статистики: карточка сезона + доступные типы статистики.",
        "properties": {
          "id": {
            "type": "integer",
            "example": 76986
          },
          "name": {
            "type": "string",
            "nullable": true,
            "example": "NBA 25/26"
          },
          "year": {
            "type": "string",
            "nullable": true,
            "example": "25/26"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true
              }
            }
          },
          "types": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Доступные типы статистики сезона. Множество значений открытое; наблюдаемые: overall, regularSeason, playoffs, home, away, mainDraw, top16.",
            "example": [
              "regularSeason",
              "playoffs"
            ]
          }
        }
      },
      "SeasonStatisticsTournament": {
        "type": "object",
        "description": "Турнир со списком сезонов, за которые доступна сезонная статистика.",
        "properties": {
          "id": {
            "type": "integer",
            "example": 132
          },
          "name": {
            "type": "string",
            "nullable": true,
            "example": "NBA"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "example": "НБА"
              }
            }
          },
          "image": {
            "type": "string",
            "example": "https://img.api-sport.ru/unique-tournament-132"
          },
          "seasons": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SeasonStatisticsSeason"
            }
          }
        }
      },
      "PlayerStatisticsSeasonsResponse": {
        "type": "object",
        "description": "Список турниров и сезонов, за которые у игрока есть сезонная статистика. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна.",
        "properties": {
          "player": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "totalTournaments": {
            "type": "integer",
            "example": 2
          },
          "tournaments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SeasonStatisticsTournament"
            }
          }
        }
      },
      "TeamStatisticsSeasonsResponse": {
        "type": "object",
        "description": "Список турниров и сезонов, за которые у команды есть сезонная статистика. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна.",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "totalTournaments": {
            "type": "integer",
            "example": 2
          },
          "tournaments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SeasonStatisticsTournament"
            }
          }
        }
      },
      "SeasonStatisticsTypeBlock": {
        "type": "object",
        "description": "Блок статистики одного типа (overall, regularSeason, playoffs, home, away, ...).",
        "properties": {
          "team": {
            "x-sports": [
              "football",
              "basketball",
              "ice-hockey",
              "volleyball"
            ],
            "allOf": [
              {
                "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
              }
            ],
            "description": "Команда, за которую игрок выступал в этом турнире/сезоне. Присутствует только в статистике игроков."
          },
          "highlighted": {
            "type": "object",
            "description": "Ключевые показатели с местом в турнире: ключ показателя → { value, rankTotal, rankPerGame, ... }. Присутствует не всегда.",
            "additionalProperties": {
              "type": "object",
              "description": "Значение показателя и его ранги в турнире.",
              "properties": {
                "value": {
                  "type": "number",
                  "example": 52
                },
                "rankTotal": {
                  "type": "integer",
                  "nullable": true,
                  "example": 63
                },
                "rankPerGame": {
                  "type": "integer",
                  "nullable": true,
                  "example": 17
                }
              }
            }
          },
          "statistics": {
            "type": "object",
            "description": "Показатели сезона: ключ → числовое значение. Названия, переводы и группы ключей — в словаре /v2/SeasonStatisticsDict.json (см. https://docs.api-sport.ru/concepts/season-statistics).",
            "additionalProperties": {
              "description": "Значение показателя (число)."
            }
          }
        },
        "required": [
          "statistics"
        ]
      },
      "PlayerSeasonStatisticsResponse": {
        "type": "object",
        "description": "Сезонная статистика игрока в турнире и сезоне, по типам статистики. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна.",
        "properties": {
          "player": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "tournament": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "season": {
            "$ref": "#/components/schemas/SeasonStatisticsSeasonBrief"
          },
          "types": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Типы статистики, присутствующие в ответе.",
            "example": [
              "overall",
              "home",
              "away"
            ]
          },
          "statistics": {
            "type": "object",
            "description": "Статистика по типам: ключ — тип статистики.",
            "additionalProperties": {
              "$ref": "#/components/schemas/SeasonStatisticsTypeBlock"
            }
          },
          "updatedAt": {
            "type": "integer",
            "nullable": true,
            "description": "Время обновления данных, Unix-время в миллисекундах.",
            "example": 1751600000000
          }
        }
      },
      "TeamSeasonStatisticsResponse": {
        "type": "object",
        "description": "Сезонная статистика команды в турнире и сезоне, по типам статистики. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна.",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "tournament": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "season": {
            "$ref": "#/components/schemas/SeasonStatisticsSeasonBrief"
          },
          "types": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Типы статистики, присутствующие в ответе.",
            "example": [
              "regularSeason",
              "playoffs"
            ]
          },
          "statistics": {
            "type": "object",
            "description": "Статистика по типам: ключ — тип статистики. В блоках команд поле team отсутствует.",
            "additionalProperties": {
              "$ref": "#/components/schemas/SeasonStatisticsTypeBlock"
            }
          },
          "updatedAt": {
            "type": "integer",
            "nullable": true,
            "description": "Время обновления данных, Unix-время в миллисекундах.",
            "example": 1751600000000
          }
        }
      },
      "SeasonStatisticsDictEntry": {
        "type": "object",
        "description": "Описание одного ключа сезонной статистики с переводами.",
        "properties": {
          "name": {
            "type": "string",
            "description": "Англоязычное название.",
            "example": "Expected goals (xG)"
          },
          "ru": {
            "type": "string",
            "description": "Перевод на русский.",
            "example": "Ожидаемые голы (xG)"
          },
          "es": {
            "type": "string",
            "description": "Перевод на испанский.",
            "example": "Goles esperados (xG)"
          },
          "group": {
            "type": "string",
            "description": "Тематическая группа показателя.",
            "example": "Attacking"
          }
        }
      },
      "SeasonStatisticsDictionary": {
        "type": "object",
        "description": "Словарь ключей сезонной статистики игроков и команд (эндпоинт /v2/SeasonStatisticsDict.json). Ключи верхнего уровня — слаги видов спорта; внутри — секции playerSeasonStatistics и teamSeasonStatistics, где ключ совпадает буква-в-букву с ключом в объекте statistics ответов. Подробнее: https://docs.api-sport.ru/concepts/season-statistics.",
        "properties": {
          "_meta": {
            "type": "object",
            "description": "Метаданные словаря (описание, языки, примечания)."
          }
        },
        "additionalProperties": {
          "type": "object",
          "description": "Секции по виду спорта. Ключ объекта — слаг вида спорта: football, basketball, ice-hockey, tennis, volleyball.",
          "properties": {
            "playerSeasonStatistics": {
              "type": "object",
              "description": "Ключ показателя сезонной статистики игрока → описание и переводы.",
              "additionalProperties": {
                "$ref": "#/components/schemas/SeasonStatisticsDictEntry"
              }
            },
            "teamSeasonStatistics": {
              "type": "object",
              "description": "Ключ показателя сезонной статистики команды → описание и переводы.",
              "additionalProperties": {
                "$ref": "#/components/schemas/SeasonStatisticsDictEntry"
              }
            }
          }
        }
      },
      "PlayerCharacteristicItem": {
        "type": "object",
        "description": "Одна характеристика игрока (сильная или слабая сторона).",
        "properties": {
          "type": {
            "type": "integer",
            "description": "Числовой код характеристики.",
            "example": 26
          },
          "name": {
            "type": "string",
            "nullable": true,
            "description": "Англоязычное название.",
            "example": "High pressing"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "example": "Высокий прессинг"
              },
              "es": {
                "type": "string",
                "nullable": true,
                "example": "Presión alta"
              }
            }
          },
          "rank": {
            "type": "integer",
            "description": "Ранг игрока по этой характеристике.",
            "example": 904
          }
        }
      },
      "PlayerNationalTeamStatisticsItem": {
        "type": "object",
        "description": "Статистика игрока за национальную сборную.",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "appearances": {
            "type": "integer",
            "nullable": true,
            "example": 7
          },
          "goals": {
            "type": "integer",
            "nullable": true,
            "example": 1
          },
          "debutTimestamp": {
            "type": "integer",
            "nullable": true,
            "description": "Дата дебюта, Unix-время в миллисекундах.",
            "example": 1635379200000
          }
        }
      },
      "PlayerTransferHistoryItem": {
        "type": "object",
        "description": "Один переход в истории трансферов игрока.",
        "properties": {
          "fromTeam": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
              }
            ],
            "description": "Команда, из которой перешёл игрок."
          },
          "toTeam": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
              }
            ],
            "description": "Команда, в которую перешёл игрок."
          },
          "fromTeamName": {
            "type": "string",
            "nullable": true,
            "example": "Barcelona SC Guayaquil"
          },
          "toTeamName": {
            "type": "string",
            "nullable": true,
            "example": "LDU"
          },
          "type": {
            "type": "integer",
            "nullable": true,
            "description": "Числовой код типа перехода.",
            "example": 3
          },
          "typeName": {
            "type": "string",
            "nullable": true,
            "description": "Англоязычное название типа перехода.",
            "example": "Transfer"
          },
          "typeTranslations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "example": "Трансфер"
              },
              "es": {
                "type": "string",
                "nullable": true,
                "example": "Traspaso"
              }
            }
          },
          "transferFee": {
            "type": "number",
            "nullable": true,
            "description": "Сумма перехода.",
            "example": 860000
          },
          "transferFeeDescription": {
            "type": "string",
            "nullable": true,
            "example": "860k €"
          },
          "transferFeeRaw": {
            "type": "object",
            "nullable": true,
            "description": "Сумма перехода с валютой.",
            "properties": {
              "value": {
                "type": "number",
                "example": 860000
              },
              "currency": {
                "type": "string",
                "example": "EUR"
              }
            }
          },
          "transferDateTimestamp": {
            "type": "integer",
            "nullable": true,
            "description": "Дата перехода, Unix-время в миллисекундах.",
            "example": 1767830400000
          }
        }
      },
      "PlayerProfileResponse": {
        "type": "object",
        "description": "Профиль игрока: характеристики (сильные/слабые стороны), атрибуты по годам, статистика за сборную, история трансферов. Блоки, недоступные для вида спорта, отдаются как null или пустой массив.",
        "properties": {
          "player": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "characteristics": {
            "x-sports": [
              "football"
            ],
            "type": "object",
            "nullable": true,
            "description": "Сильные и слабые стороны игрока и его позиции на поле.",
            "properties": {
              "positive": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PlayerCharacteristicItem"
                }
              },
              "negative": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/PlayerCharacteristicItem"
                }
              },
              "positions": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "example": [
                  "LW",
                  "RW"
                ]
              }
            }
          },
          "attributeOverviews": {
            "x-sports": [
              "football"
            ],
            "type": "object",
            "nullable": true,
            "description": "Атрибуты игрока (нападение, техника, тактика, оборона, креативность) по годам: average — средние по позиции, player — значения игрока (yearShift 0 — текущий год, 1 — год назад и т.д.).",
            "properties": {
              "average": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "attacking": {
                      "type": "integer",
                      "example": 52
                    },
                    "technical": {
                      "type": "integer",
                      "example": 55
                    },
                    "tactical": {
                      "type": "integer",
                      "example": 40
                    },
                    "defending": {
                      "type": "integer",
                      "example": 42
                    },
                    "creativity": {
                      "type": "integer",
                      "example": 50
                    },
                    "position": {
                      "type": "string",
                      "example": "M"
                    },
                    "yearShift": {
                      "type": "integer",
                      "example": 0
                    }
                  }
                }
              },
              "player": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "attacking": {
                      "type": "integer",
                      "example": 56
                    },
                    "technical": {
                      "type": "integer",
                      "example": 41
                    },
                    "tactical": {
                      "type": "integer",
                      "example": 35
                    },
                    "defending": {
                      "type": "integer",
                      "example": 37
                    },
                    "creativity": {
                      "type": "integer",
                      "example": 49
                    },
                    "position": {
                      "type": "string",
                      "example": "M"
                    },
                    "yearShift": {
                      "type": "integer",
                      "example": 0
                    }
                  }
                }
              }
            }
          },
          "nationalTeamStatistics": {
            "x-sports": [
              "football"
            ],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlayerNationalTeamStatisticsItem"
            },
            "description": "Статистика за национальные сборные (пустой массив, если данных нет)."
          },
          "transferHistory": {
            "x-sports": [
              "football",
              "basketball"
            ],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlayerTransferHistoryItem"
            },
            "description": "История переходов, новые первыми (пустой массив, если данных нет)."
          },
          "market": {
            "type": "object",
            "nullable": true,
            "description": "Рыночный блок: оценочная трансферная стоимость и срок контракта. null — данных нет",
            "properties": {
              "proposedMarketValue": {
                "type": "number",
                "nullable": true,
                "description": "Оценочная трансферная стоимость (число в валюте из proposedMarketValueRaw)",
                "example": 1100000
              },
              "proposedMarketValueRaw": {
                "type": "object",
                "nullable": true,
                "description": "Стоимость с валютой",
                "properties": {
                  "value": {
                    "type": "number",
                    "nullable": true,
                    "example": 1100000
                  },
                  "currency": {
                    "type": "string",
                    "nullable": true,
                    "example": "EUR"
                  }
                }
              },
              "contractUntilTimestamp": {
                "type": "integer",
                "nullable": true,
                "description": "Unix-время окончания контракта в миллисекундах",
                "example": 1861833600000
              }
            }
          },
          "preferredFoot": {
            "x-sports": [
              "football"
            ],
            "type": "string",
            "nullable": true,
            "description": "Рабочая нога (left/right/both)",
            "example": "right"
          },
          "positionsDetailed": {
            "x-sports": [
              "football"
            ],
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Детализированные позиции игрока (коды позиций). Пустой массив — данных нет",
            "example": [
              "LW",
              "RW"
            ]
          }
        }
      },
      "PlayerLatestSeasonStatisticsResponse": {
        "type": "object",
        "description": "Последняя актуальная сезонная статистика игрока одним запросом. Выбор данных: турнир — первый в списке по релевантности (или заданный `tournament_id`); сезон — новейший, за который уже собраны данные (при отсутствии данных в новейшем сезоне возвращается предыдущий, при отсутствии в турнире — следующий турнир списка, если `tournament_id` не задан); тип — `overall`, иначе `regularSeason`, иначе `mainDraw`, иначе первый доступный (или заданный `type` — тогда возвращается последний сезон, где этот тип есть). Фактически выбранные турнир, сезон и тип всегда видны в полях ответа. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна.",
        "properties": {
          "player": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "tournament": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "season": {
            "$ref": "#/components/schemas/SeasonStatisticsSeasonBrief"
          },
          "type": {
            "type": "string",
            "description": "Выбранный (основной) тип статистики.",
            "example": "regularSeason"
          },
          "availableTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Все типы статистики, доступные в возвращённом сезоне.",
            "example": [
              "regularSeason",
              "playoffs"
            ]
          },
          "team": {
            "x-sports": [
              "football",
              "basketball",
              "ice-hockey",
              "volleyball"
            ],
            "allOf": [
              {
                "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
              }
            ],
            "description": "Команда, за которую игрок выступал в возвращённом турнире/сезоне. Только у игроков."
          },
          "highlighted": {
            "type": "object",
            "description": "Ключевые показатели с местом в турнире: ключ показателя → { value, rankTotal, rankPerGame, ... }. Присутствует не всегда.",
            "additionalProperties": {
              "type": "object",
              "description": "Значение показателя и его ранги в турнире.",
              "properties": {
                "value": {
                  "type": "number",
                  "example": 52
                },
                "rankTotal": {
                  "type": "integer",
                  "nullable": true,
                  "example": 63
                },
                "rankPerGame": {
                  "type": "integer",
                  "nullable": true,
                  "example": 17
                }
              }
            }
          },
          "statistics": {
            "type": "object",
            "description": "Показатели выбранного типа: ключ → числовое значение (плоский объект). Названия, переводы и группы ключей — в словаре /v2/SeasonStatisticsDict.json (см. https://docs.api-sport.ru/concepts/season-statistics).",
            "additionalProperties": {
              "description": "Значение показателя (число)."
            }
          },
          "updatedAt": {
            "type": "integer",
            "nullable": true,
            "description": "Время обновления данных, Unix-время в миллисекундах.",
            "example": 1751600000000
          }
        }
      },
      "TeamLatestSeasonStatisticsResponse": {
        "type": "object",
        "description": "Последняя актуальная сезонная статистика команды одним запросом. Выбор данных: турнир — первый в списке по релевантности (или заданный `tournament_id`); сезон — новейший, за который уже собраны данные (при отсутствии данных в новейшем сезоне возвращается предыдущий, при отсутствии в турнире — следующий турнир списка, если `tournament_id` не задан); тип — `overall`, иначе `regularSeason`, иначе `mainDraw`, иначе первый доступный (или заданный `type` — тогда возвращается последний сезон, где этот тип есть). Фактически выбранные турнир, сезон и тип всегда видны в полях ответа. Доступность по видам спорта: игроки — football, basketball, ice-hockey, volleyball (volleyball — в основном крупные международные турниры); команды — football, basketball, ice-hockey, tennis, volleyball (tennis: команда = игрок, volleyball — в основном сборные). Для esports и table-tennis сезонная статистика недоступна.",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "tournament": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "season": {
            "$ref": "#/components/schemas/SeasonStatisticsSeasonBrief"
          },
          "type": {
            "type": "string",
            "description": "Выбранный (основной) тип статистики.",
            "example": "regularSeason"
          },
          "availableTypes": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Все типы статистики, доступные в возвращённом сезоне.",
            "example": [
              "regularSeason",
              "playoffs"
            ]
          },
          "highlighted": {
            "type": "object",
            "description": "Ключевые показатели с местом в турнире: ключ показателя → { value, rankTotal, rankPerGame, ... }. Присутствует не всегда.",
            "additionalProperties": {
              "type": "object",
              "description": "Значение показателя и его ранги в турнире.",
              "properties": {
                "value": {
                  "type": "number",
                  "example": 52
                },
                "rankTotal": {
                  "type": "integer",
                  "nullable": true,
                  "example": 63
                },
                "rankPerGame": {
                  "type": "integer",
                  "nullable": true,
                  "example": 17
                }
              }
            }
          },
          "statistics": {
            "type": "object",
            "description": "Показатели выбранного типа: ключ → числовое значение (плоский объект). Названия, переводы и группы ключей — в словаре /v2/SeasonStatisticsDict.json (см. https://docs.api-sport.ru/concepts/season-statistics).",
            "additionalProperties": {
              "description": "Значение показателя (число)."
            }
          },
          "updatedAt": {
            "type": "integer",
            "nullable": true,
            "description": "Время обновления данных, Unix-время в миллисекундах.",
            "example": 1751600000000
          }
        }
      },
      "CompactPlayer": {
        "type": "object",
        "description": "Компактная карточка игрока",
        "properties": {
          "id": {
            "type": "integer",
            "example": 994363
          },
          "name": {
            "type": "string",
            "nullable": true,
            "example": "Bart Verbruggen"
          },
          "shortName": {
            "type": "string",
            "nullable": true,
            "example": "B. Verbruggen"
          },
          "position": {
            "type": "string",
            "nullable": true,
            "description": "Позиция игрока (например G, D, M, F)",
            "example": "G"
          },
          "jerseyNumber": {
            "type": "string",
            "nullable": true,
            "example": "1"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "example": "Барт Вербругген"
              }
            }
          },
          "image": {
            "type": "string",
            "nullable": true,
            "description": "URL изображения игрока"
          }
        }
      },
      "CompactTeam": {
        "type": "object",
        "description": "Компактная карточка команды",
        "properties": {
          "id": {
            "type": "integer",
            "example": 3680
          },
          "name": {
            "type": "string",
            "nullable": true,
            "example": "Carolina Hurricanes"
          },
          "shortName": {
            "type": "string",
            "nullable": true,
            "example": "Hurricanes"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "example": "Каролина Харрикейнс"
              }
            }
          },
          "image": {
            "type": "string",
            "nullable": true,
            "description": "URL логотипа команды"
          }
        }
      },
      "PregameDuel": {
        "type": "object",
        "description": "Баланс очных встреч",
        "properties": {
          "homeWins": {
            "type": "integer",
            "nullable": true,
            "description": "Побед хозяев в очных встречах",
            "example": 2
          },
          "awayWins": {
            "type": "integer",
            "nullable": true,
            "description": "Побед гостей в очных встречах",
            "example": 0
          },
          "draws": {
            "type": "integer",
            "nullable": true,
            "description": "Ничьих в очных встречах",
            "example": 1
          }
        }
      },
      "PregameStreakItem": {
        "type": "object",
        "description": "Текущая серия команды",
        "properties": {
          "name": {
            "type": "string",
            "description": "Название серии (на английском)",
            "example": "No losses"
          },
          "value": {
            "type": "string",
            "nullable": true,
            "description": "Значение серии: длина («4») или доля матчей («4/5»)",
            "example": "4/5"
          },
          "team": {
            "type": "string",
            "nullable": true,
            "enum": [
              "home",
              "away",
              "both"
            ],
            "description": "К кому относится серия: home/away; both — к обеим командам (в очных сериях)"
          }
        }
      },
      "PregameFormSide": {
        "type": "object",
        "nullable": true,
        "description": "Форма одной команды перед матчем",
        "properties": {
          "position": {
            "type": "integer",
            "nullable": true,
            "description": "Текущая позиция команды в турнирной таблице",
            "example": 3
          },
          "value": {
            "type": "string",
            "nullable": true,
            "description": "Значение показателя формы — смысл задаёт поле label родителя (очки, баланс побед-поражений и т.п.)",
            "example": "9-7"
          },
          "avgRating": {
            "type": "number",
            "nullable": true,
            "description": "Средний рейтинг команды за последние матчи (где доступен)",
            "example": 6.68
          },
          "form": {
            "type": "array",
            "description": "Результаты последних матчей: W — победа, D — ничья, L — поражение",
            "items": {
              "type": "string",
              "enum": [
                "W",
                "D",
                "L"
              ]
            },
            "example": [
              "W",
              "W",
              "L",
              "D",
              "W"
            ]
          }
        }
      },
      "PregameBlock": {
        "type": "object",
        "description": "Предматчевый контекст матча",
        "properties": {
          "h2h": {
            "type": "object",
            "nullable": true,
            "description": "Дуэли по очным встречам. null — данных нет",
            "properties": {
              "teamDuel": {
                "nullable": true,
                "description": "Очные встречи команд",
                "$ref": "#/components/schemas/PregameDuel"
              },
              "managerDuel": {
                "nullable": true,
                "description": "Очные встречи тренеров (где доступно)",
                "$ref": "#/components/schemas/PregameDuel"
              }
            }
          },
          "teamStreaks": {
            "type": "object",
            "nullable": true,
            "description": "Активные серии команд. null — данных нет",
            "properties": {
              "general": {
                "type": "array",
                "description": "Общие серии каждой из команд",
                "items": {
                  "$ref": "#/components/schemas/PregameStreakItem"
                }
              },
              "head2head": {
                "type": "array",
                "description": "Серии в очных встречах этих команд",
                "items": {
                  "$ref": "#/components/schemas/PregameStreakItem"
                }
              }
            }
          },
          "form": {
            "type": "object",
            "nullable": true,
            "description": "Форма команд перед матчем. null — данных нет",
            "properties": {
              "homeTeam": {
                "nullable": true,
                "$ref": "#/components/schemas/PregameFormSide"
              },
              "awayTeam": {
                "nullable": true,
                "$ref": "#/components/schemas/PregameFormSide"
              },
              "label": {
                "type": "string",
                "nullable": true,
                "description": "Смысл поля value у команд: например Pts (очки) или W-L (баланс побед-поражений)",
                "example": "Pts"
              }
            }
          }
        }
      },
      "BestPlayerItem": {
        "type": "object",
        "description": "Игрок с показателем, по которому он выделен",
        "properties": {
          "value": {
            "type": "string",
            "nullable": true,
            "description": "Значение показателя",
            "example": "8.2"
          },
          "label": {
            "type": "string",
            "nullable": true,
            "description": "Название показателя",
            "example": "rating"
          },
          "player": {
            "$ref": "#/components/schemas/CompactPlayer"
          }
        }
      },
      "BestPlayers": {
        "type": "object",
        "description": "Лучшие игроки матча",
        "properties": {
          "playerOfTheMatch": {
            "nullable": true,
            "description": "Игрок матча",
            "$ref": "#/components/schemas/BestPlayerItem"
          },
          "home": {
            "type": "array",
            "description": "Лучшие игроки хозяев",
            "items": {
              "$ref": "#/components/schemas/BestPlayerItem"
            }
          },
          "away": {
            "type": "array",
            "description": "Лучшие игроки гостей",
            "items": {
              "$ref": "#/components/schemas/BestPlayerItem"
            }
          }
        }
      },
      "ShotmapShot": {
        "type": "object",
        "description": "Удар/бросок на карте ударов. Состав полей зависит от вида спорта: футбол — xG/xGOT, координаты удара и створа, часть тела; хоккей — координаты x/y, период и тип броска",
        "additionalProperties": true,
        "properties": {
          "id": {
            "type": "integer",
            "nullable": true,
            "description": "ID удара"
          },
          "player": {
            "$ref": "#/components/schemas/CompactPlayer"
          },
          "goalkeeper": {
            "x-sports": [
              "football"
            ],
            "nullable": true,
            "description": "Вратарь, против которого выполнен удар",
            "$ref": "#/components/schemas/CompactPlayer"
          },
          "team": {
            "x-sports": [
              "ice-hockey"
            ],
            "nullable": true,
            "description": "Команда игрока",
            "$ref": "#/components/schemas/CompactTeam"
          },
          "isHome": {
            "type": "boolean",
            "nullable": true,
            "description": "Удар команды хозяев"
          },
          "time": {
            "type": "integer",
            "nullable": true,
            "description": "Минута удара"
          },
          "timeSeconds": {
            "type": "integer",
            "nullable": true,
            "description": "Время удара в секундах от начала матча"
          },
          "shotType": {
            "x-sports": [
              "football"
            ],
            "type": "string",
            "nullable": true,
            "description": "Результат удара: goal, save, miss, block, post",
            "example": "goal"
          },
          "situation": {
            "x-sports": [
              "football"
            ],
            "type": "string",
            "nullable": true,
            "description": "Игровая ситуация: assisted, regular, fast-break, set-piece, corner, free-kick, penalty, throw-in-set-piece, shootout",
            "example": "assisted"
          },
          "goalType": {
            "x-sports": [
              "football"
            ],
            "type": "string",
            "nullable": true,
            "description": "Тип гола (например penalty, regular, own)",
            "example": "penalty"
          },
          "bodyPart": {
            "x-sports": [
              "football"
            ],
            "type": "string",
            "nullable": true,
            "description": "Часть тела: right-foot, left-foot, head",
            "example": "right-foot"
          },
          "xg": {
            "x-sports": [
              "football"
            ],
            "type": "number",
            "nullable": true,
            "description": "Ожидаемые голы удара (xG)",
            "example": 0.7884
          },
          "xgot": {
            "x-sports": [
              "football"
            ],
            "type": "number",
            "nullable": true,
            "description": "Ожидаемые голы в створе (xGOT)",
            "example": 0.9935
          },
          "playerCoordinates": {
            "x-sports": [
              "football"
            ],
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "Координаты игрока в момент удара {x, y, z}"
          },
          "goalMouthCoordinates": {
            "x-sports": [
              "football"
            ],
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "Координаты попадания в створ {x, y, z}"
          },
          "goalMouthLocation": {
            "x-sports": [
              "football"
            ],
            "type": "string",
            "nullable": true,
            "description": "Зона створа (например low-left, high)",
            "example": "low-left"
          },
          "draw": {
            "x-sports": [
              "football"
            ],
            "type": "object",
            "nullable": true,
            "additionalProperties": true,
            "description": "Координаты для отрисовки траектории удара"
          },
          "x": {
            "x-sports": [
              "ice-hockey"
            ],
            "type": "number",
            "nullable": true,
            "description": "Координата X броска"
          },
          "y": {
            "x-sports": [
              "ice-hockey"
            ],
            "type": "number",
            "nullable": true,
            "description": "Координата Y броска"
          },
          "period": {
            "x-sports": [
              "ice-hockey"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Период броска"
          },
          "type": {
            "x-sports": [
              "ice-hockey"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Числовой тип броска"
          },
          "typeName": {
            "x-sports": [
              "ice-hockey"
            ],
            "type": "string",
            "nullable": true,
            "description": "Название типа броска"
          }
        }
      },
      "MatchShotmapResponse": {
        "type": "object",
        "description": "Карта ударов матча",
        "properties": {
          "matchId": {
            "type": "integer",
            "description": "ID матча",
            "example": 12812998
          },
          "totalShots": {
            "type": "integer",
            "description": "Число ударов/бросков",
            "example": 27
          },
          "shotmap": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ShotmapShot"
            }
          }
        }
      },
      "MomentumPoint": {
        "type": "object",
        "description": "Точка графика давления. Для футбола/баскетбола/хоккея — по минутам; для тенниса — по геймам (set/game/breakOccurred)",
        "properties": {
          "minute": {
            "type": "number",
            "nullable": true,
            "description": "Минута матча (футбол/баскетбол/хоккей)"
          },
          "value": {
            "type": "number",
            "nullable": true,
            "description": "Значение давления: положительное — перевес хозяев, отрицательное — гостей",
            "example": 35.7
          },
          "set": {
            "x-sports": [
              "tennis"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Номер сета (теннис)"
          },
          "game": {
            "x-sports": [
              "tennis"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Номер гейма (теннис)"
          },
          "breakOccurred": {
            "x-sports": [
              "tennis"
            ],
            "type": "boolean",
            "nullable": true,
            "description": "В гейме случился брейк (теннис)"
          }
        }
      },
      "MatchMomentumResponse": {
        "type": "object",
        "description": "График давления (momentum) матча",
        "properties": {
          "matchId": {
            "type": "integer",
            "description": "ID матча",
            "example": 12812998
          },
          "periodTime": {
            "type": "integer",
            "nullable": true,
            "description": "Длительность периода в минутах (null для тенниса)",
            "example": 45
          },
          "periodCount": {
            "type": "integer",
            "nullable": true,
            "description": "Число периодов (null для тенниса)",
            "example": 2
          },
          "overtimeLength": {
            "type": "integer",
            "nullable": true,
            "description": "Длительность овертайма в минутах",
            "example": 15
          },
          "points": {
            "type": "array",
            "description": "Точки графика; пустой массив — данных нет",
            "items": {
              "$ref": "#/components/schemas/MomentumPoint"
            }
          }
        }
      },
      "AveragePositionEntry": {
        "type": "object",
        "description": "Средняя позиция игрока на поле",
        "properties": {
          "player": {
            "$ref": "#/components/schemas/CompactPlayer"
          },
          "averageX": {
            "type": "number",
            "nullable": true,
            "description": "Средняя координата X (0–100)",
            "example": 61.85
          },
          "averageY": {
            "type": "number",
            "nullable": true,
            "description": "Средняя координата Y (0–100)",
            "example": 73.9
          },
          "pointsCount": {
            "type": "integer",
            "nullable": true,
            "description": "Число событий, по которым усреднена позиция",
            "example": 42
          }
        }
      },
      "AveragePositionsSubstitution": {
        "type": "object",
        "description": "Замена (влияет на интерпретацию средних позиций)",
        "properties": {
          "time": {
            "type": "integer",
            "nullable": true,
            "description": "Минута замены",
            "example": 71
          },
          "isHome": {
            "type": "boolean",
            "nullable": true,
            "description": "Замена в команде хозяев"
          },
          "injury": {
            "type": "boolean",
            "description": "Замена из-за травмы"
          },
          "playerIn": {
            "nullable": true,
            "description": "Вышедший игрок",
            "$ref": "#/components/schemas/CompactPlayer"
          },
          "playerOut": {
            "nullable": true,
            "description": "Заменённый игрок",
            "$ref": "#/components/schemas/CompactPlayer"
          }
        }
      },
      "MatchAveragePositionsResponse": {
        "type": "object",
        "description": "Средние позиции игроков в матче",
        "properties": {
          "matchId": {
            "type": "integer",
            "description": "ID матча",
            "example": 12812998
          },
          "home": {
            "type": "array",
            "description": "Игроки хозяев",
            "items": {
              "$ref": "#/components/schemas/AveragePositionEntry"
            }
          },
          "away": {
            "type": "array",
            "description": "Игроки гостей",
            "items": {
              "$ref": "#/components/schemas/AveragePositionEntry"
            }
          },
          "substitutions": {
            "type": "array",
            "description": "Замены",
            "items": {
              "$ref": "#/components/schemas/AveragePositionsSubstitution"
            }
          }
        }
      },
      "TeamMatchesResponse": {
        "type": "object",
        "description": "Последние и ближайшие матчи команды",
        "properties": {
          "team": {
            "type": "object",
            "description": "Команда",
            "properties": {
              "id": {
                "type": "integer",
                "example": 3427
              },
              "name": {
                "type": "string",
                "nullable": true,
                "example": "Los Angeles Lakers"
              },
              "translations": {
                "type": "object",
                "properties": {
                  "ru": {
                    "type": "string",
                    "nullable": true,
                    "example": "Лос-Анджелес Лейкерс"
                  }
                }
              },
              "image": {
                "type": "string",
                "nullable": true,
                "description": "URL логотипа команды"
              }
            }
          },
          "last": {
            "type": "array",
            "description": "Завершённые матчи, новые сначала",
            "items": {
              "$ref": "#/components/schemas/Match"
            }
          },
          "next": {
            "type": "array",
            "description": "Предстоящие матчи, ближайшие сначала",
            "items": {
              "$ref": "#/components/schemas/Match"
            }
          }
        }
      },
      "ErrorEnvelope": {
        "type": "object",
        "description": "Ошибка (формат новых эндпоинтов)",
        "properties": {
          "code": {
            "type": "integer",
            "description": "HTTP-код",
            "example": 404
          },
          "error": {
            "type": "string",
            "description": "Машиночитаемый код ошибки",
            "example": "match_not_found"
          },
          "message": {
            "type": "string",
            "description": "Описание ошибки",
            "example": "Match not found"
          }
        }
      },
      "BkOddsDictionary": {
        "type": "object",
        "description": "Словарь букмекерских рынков и исходов: слаги рынков (result, total, handicap, double_chance и др.) и исходов (w1, x, w2, over, under и т.д.) с названиями и переводами",
        "additionalProperties": true
      },
      "SeasonLeaderItem": {
        "type": "object",
        "description": "Строка лидерборда сезона. При entity=players содержит `player` (и `team` — команду игрока в контексте сезона, если известна); при entity=teams — только `team`.",
        "properties": {
          "rank": {
            "type": "integer",
            "description": "Позиция в лидерборде (сквозная, с учётом offset).",
            "example": 1
          },
          "player": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
              }
            ],
            "description": "Игрок (только при entity=players)."
          },
          "team": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
              }
            ],
            "description": "Команда: при entity=teams — сама команда-лидер; при entity=players — команда игрока в этом сезоне (может отсутствовать)."
          },
          "statistics": {
            "type": "object",
            "description": "Показатели сезона в выбранном разрезе `type`. Ключи — как в словаре `/v2/SeasonStatisticsDict.json`; набор ограничивается параметром `stats` (ключ `sort_by` присутствует всегда).",
            "additionalProperties": true,
            "example": {
              "goals": 27,
              "assists": 8,
              "rating": 7.42
            }
          }
        },
        "required": [
          "rank",
          "statistics"
        ]
      },
      "SeasonLeadersResponse": {
        "type": "object",
        "description": "Лидерборд сезона турнира по выбранному показателю сезонной статистики.",
        "properties": {
          "tournament": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
              }
            ],
            "description": "Краткая карточка турнира."
          },
          "season": {
            "$ref": "#/components/schemas/SeasonStatisticsSeasonBrief"
          },
          "entity": {
            "type": "string",
            "enum": [
              "players",
              "teams"
            ],
            "description": "Тип сущностей лидерборда.",
            "example": "players"
          },
          "sortBy": {
            "type": "string",
            "description": "Показатель, по которому построен лидерборд.",
            "example": "goals"
          },
          "order": {
            "type": "string",
            "enum": [
              "desc",
              "asc"
            ],
            "example": "desc"
          },
          "type": {
            "type": "string",
            "description": "Разрез статистики (overall, regularSeason, home, away, playoffs, ...). Если параметр `type` не передан — выбирается основной доступный разрез сезона.",
            "example": "overall"
          },
          "total": {
            "type": "integer",
            "description": "Сколько всего сущностей сезона имеют показатель `sort_by` в выбранном разрезе (для пагинации offset/limit).",
            "example": 214
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SeasonLeaderItem"
            }
          }
        },
        "required": [
          "entity",
          "sortBy",
          "order",
          "type",
          "total",
          "items"
        ]
      },
      "H2HResponse": {
        "type": "object",
        "description": "Сводка очных встреч двух команд (head-to-head): счёт побед и последние матчи.",
        "properties": {
          "teams": {
            "type": "array",
            "description": "Краткие карточки команд в порядке параметров запроса: [team_id_1, team_id_2].",
            "minItems": 2,
            "maxItems": 2,
            "items": {
              "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
            }
          },
          "summary": {
            "type": "object",
            "description": "Итог последних очных встреч (окно — до 50 последних завершённых матчей пары). Победы сопоставляются командам по их фактической стороне в каждом матче.",
            "properties": {
              "team1Wins": {
                "type": "integer",
                "description": "Победы команды team_id_1.",
                "example": 4
              },
              "team2Wins": {
                "type": "integer",
                "description": "Победы команды team_id_2.",
                "example": 2
              },
              "draws": {
                "type": "integer",
                "description": "Ничьи.",
                "example": 3
              },
              "total": {
                "type": "integer",
                "description": "Всего очных встреч в окне подсчёта.",
                "example": 9
              }
            },
            "required": [
              "team1Wins",
              "team2Wins",
              "draws",
              "total"
            ]
          },
          "matches": {
            "type": "array",
            "description": "Последние завершённые очные встречи, новые сначала (до `limit`). По умолчанию — компактная форма (пресет `lite`); состав настраивается параметрами `fields`/`view`.",
            "items": {
              "$ref": "#/components/schemas/Match"
            }
          }
        },
        "required": [
          "teams",
          "summary",
          "matches"
        ]
      },
      "TeamBrief": {
        "type": "object",
        "description": "Краткая карточка команды",
        "properties": {
          "id": {
            "type": "integer",
            "example": 5257
          },
          "name": {
            "type": "string",
            "nullable": true,
            "example": "LDU"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "example": "ЛДУ Кито"
              }
            }
          },
          "image": {
            "type": "string",
            "nullable": true,
            "description": "URL логотипа команды"
          }
        }
      },
      "TournamentInlineBrief": {
        "type": "object",
        "description": "Краткая карточка турнира с категорией и фирменными цветами",
        "properties": {
          "id": {
            "type": "integer",
            "example": 240
          },
          "name": {
            "type": "string",
            "nullable": true,
            "example": "LigaPro Serie A"
          },
          "slug": {
            "type": "string",
            "nullable": true,
            "example": "ligapro-serie-a"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "example": "ЛигаПро Серия A"
              }
            }
          },
          "image": {
            "type": "string",
            "nullable": true,
            "description": "URL логотипа турнира"
          },
          "category": {
            "type": "object",
            "nullable": true,
            "description": "Категория турнира (страна/регион)",
            "properties": {
              "id": {
                "type": "integer",
                "example": 165
              },
              "name": {
                "type": "string",
                "nullable": true,
                "example": "Ecuador"
              },
              "flag": {
                "type": "string",
                "nullable": true,
                "example": "ecuador"
              },
              "translations": {
                "type": "object",
                "properties": {
                  "ru": {
                    "type": "string",
                    "nullable": true,
                    "example": "Эквадор"
                  }
                }
              }
            }
          },
          "colors": {
            "type": "object",
            "nullable": true,
            "description": "Фирменные цвета турнира",
            "properties": {
              "primary": {
                "type": "string",
                "nullable": true,
                "example": "#feca06"
              },
              "secondary": {
                "type": "string",
                "nullable": true,
                "example": "#025388"
              }
            }
          }
        }
      },
      "PlayerTeamInfo": {
        "type": "object",
        "description": "Данные игрока для видов спорта, где «команда» — это спортсмен (теннис, настольный теннис): рейтинг, стиль игры, призовые, антропометрия. У командных видов спорта — null",
        "properties": {
          "currentRanking": {
            "type": "integer",
            "nullable": true,
            "description": "Текущая позиция в официальном рейтинге",
            "example": 6
          },
          "plays": {
            "type": "string",
            "nullable": true,
            "description": "Игровая рука/хват (например right-handed)",
            "example": "right-handed"
          },
          "turnedPro": {
            "type": "string",
            "nullable": true,
            "description": "Год перехода в профессионалы",
            "example": "2003"
          },
          "prizeCurrent": {
            "type": "number",
            "nullable": true,
            "description": "Призовые за текущий сезон",
            "example": 1562312
          },
          "prizeCurrentRaw": {
            "type": "object",
            "nullable": true,
            "description": "Призовые за текущий сезон с валютой",
            "properties": {
              "value": {
                "type": "number",
                "example": 1562312
              },
              "currency": {
                "type": "string",
                "example": "EUR"
              }
            }
          },
          "prizeTotal": {
            "type": "number",
            "nullable": true,
            "description": "Призовые за карьеру",
            "example": 168318575
          },
          "prizeTotalRaw": {
            "type": "object",
            "nullable": true,
            "description": "Призовые за карьеру с валютой",
            "properties": {
              "value": {
                "type": "number",
                "example": 168318575
              },
              "currency": {
                "type": "string",
                "example": "EUR"
              }
            }
          },
          "height": {
            "type": "number",
            "nullable": true,
            "description": "Рост, метры",
            "example": 1.88
          },
          "weight": {
            "type": "number",
            "nullable": true,
            "description": "Вес, кг",
            "example": 82
          },
          "residence": {
            "type": "string",
            "nullable": true,
            "example": "Monte Carlo, Monaco"
          },
          "birthplace": {
            "type": "string",
            "nullable": true,
            "example": "Belgrade, Serbia"
          },
          "birthDateTimestamp": {
            "type": "integer",
            "nullable": true,
            "description": "Дата рождения, Unix-время в миллисекундах",
            "example": 548640000000
          }
        }
      },
      "TeamProfileResponse": {
        "type": "object",
        "description": "Профиль команды: тренер, стадион, цвета, основной турнир; для тенниса/настольного тенниса («команда» = спортсмен) — рейтинг и данные игрока",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/TeamBrief"
          },
          "fullName": {
            "type": "string",
            "nullable": true,
            "example": "LDU de Quito"
          },
          "nameCode": {
            "type": "string",
            "nullable": true,
            "description": "Короткий код команды (3–4 символа)",
            "example": "LDU"
          },
          "country": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "nullable": true,
                "example": "Ecuador"
              }
            }
          },
          "gender": {
            "type": "string",
            "nullable": true,
            "description": "Пол: M — мужская, F — женская",
            "example": "M"
          },
          "national": {
            "type": "boolean",
            "nullable": true,
            "description": "Сборная страны (true) или клуб (false)"
          },
          "foundationDateTimestamp": {
            "type": "integer",
            "nullable": true,
            "description": "Дата основания, Unix-время в миллисекундах (для старых клубов может быть отрицательным)",
            "example": -1615507200000
          },
          "teamColors": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/TeamColors"
              }
            ],
            "description": "Фирменные цвета команды"
          },
          "manager": {
            "type": "object",
            "nullable": true,
            "description": "Главный тренер",
            "properties": {
              "id": {
                "type": "integer",
                "example": 790357
              },
              "name": {
                "type": "string",
                "nullable": true,
                "example": "Tiago Nunes"
              },
              "shortName": {
                "type": "string",
                "nullable": true,
                "example": "T. Nunes"
              },
              "country": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "nullable": true,
                    "example": "Brazil"
                  }
                }
              },
              "translations": {
                "type": "object",
                "properties": {
                  "ru": {
                    "type": "string",
                    "nullable": true,
                    "example": "Тьяго Нунес"
                  }
                }
              }
            }
          },
          "venue": {
            "type": "object",
            "nullable": true,
            "description": "Домашний стадион/арена",
            "properties": {
              "id": {
                "type": "integer",
                "nullable": true,
                "example": 17523
              },
              "name": {
                "type": "string",
                "nullable": true,
                "example": "Estadio Rodrigo Paz Delgado"
              },
              "translations": {
                "type": "object",
                "properties": {
                  "ru": {
                    "type": "string",
                    "nullable": true,
                    "example": "Стадион Родриго Пас Дельгадо"
                  }
                }
              },
              "capacity": {
                "type": "integer",
                "nullable": true,
                "description": "Вместимость",
                "example": 41575
              },
              "city": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "nullable": true,
                    "example": "Quito"
                  },
                  "translations": {
                    "type": "object",
                    "properties": {
                      "ru": {
                        "type": "string",
                        "nullable": true,
                        "example": "Кито"
                      }
                    }
                  }
                }
              },
              "country": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "nullable": true,
                    "example": "Ecuador"
                  }
                }
              }
            }
          },
          "primaryUniqueTournament": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/TournamentInlineBrief"
              }
            ],
            "description": "Основной турнир команды"
          },
          "ranking": {
            "x-sports": [
              "tennis"
            ],
            "type": "integer",
            "nullable": true,
            "description": "Позиция в официальном рейтинге (ATP/WTA). Для остальных видов спорта — null",
            "example": 8
          },
          "playerTeamInfo": {
            "x-sports": [
              "tennis",
              "table-tennis"
            ],
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/PlayerTeamInfo"
              }
            ],
            "description": "Данные спортсмена (теннис/настольный теннис). Для командных видов спорта — null"
          }
        }
      },
      "TeamFormMatch": {
        "type": "object",
        "description": "Матч в блоке формы команды",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID матча",
            "example": 12812998
          },
          "startTimestamp": {
            "type": "integer",
            "nullable": true,
            "description": "Время начала, Unix-время в миллисекундах",
            "example": 1751500000000
          },
          "opponent": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompactTeam"
              }
            ],
            "description": "Соперник (в парных матчах — пара соперника)"
          },
          "homeAway": {
            "type": "string",
            "enum": [
              "home",
              "away"
            ],
            "description": "Сторона команды в матче",
            "example": "home"
          },
          "score": {
            "type": "string",
            "nullable": true,
            "description": "Счёт С ПОЗИЦИИ КОМАНДЫ: «голы команды:голы соперника» (в теннисе — выигранные сеты)",
            "example": "3:0"
          },
          "result": {
            "type": "string",
            "nullable": true,
            "enum": [
              "W",
              "D",
              "L"
            ],
            "description": "Результат для команды: W — победа, D — ничья, L — поражение; null — исход не определён",
            "example": "W"
          }
        }
      },
      "TeamFormResponse": {
        "type": "object",
        "description": "Форма команды по последним завершённым матчам (новые сначала)",
        "properties": {
          "teamId": {
            "type": "integer",
            "example": 5257
          },
          "form": {
            "type": "array",
            "description": "Последовательность результатов, новые сначала (матчи без определённого исхода не входят)",
            "items": {
              "type": "string",
              "enum": [
                "W",
                "D",
                "L"
              ]
            },
            "example": [
              "W",
              "L",
              "D",
              "W"
            ]
          },
          "wins": {
            "type": "integer",
            "example": 2
          },
          "draws": {
            "type": "integer",
            "example": 1
          },
          "losses": {
            "type": "integer",
            "example": 1
          },
          "matches": {
            "type": "array",
            "description": "Матчи, по которым построена форма (новые сначала)",
            "items": {
              "$ref": "#/components/schemas/TeamFormMatch"
            }
          }
        }
      },
      "SquadPlayer": {
        "type": "object",
        "description": "Карточка игрока в составе команды",
        "properties": {
          "id": {
            "type": "integer",
            "example": 270287
          },
          "name": {
            "type": "string",
            "nullable": true,
            "example": "Alexander Domínguez"
          },
          "shortName": {
            "type": "string",
            "nullable": true,
            "example": "A. Domínguez"
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "example": "Александр Домингес"
              }
            }
          },
          "position": {
            "type": "string",
            "nullable": true,
            "description": "Позиция (например G, D, M, F)",
            "example": "G"
          },
          "jerseyNumber": {
            "type": "string",
            "nullable": true,
            "example": "1"
          },
          "dateOfBirthTimestamp": {
            "type": "integer",
            "nullable": true,
            "description": "Дата рождения, Unix-время в миллисекундах",
            "example": 550281600000
          },
          "height": {
            "type": "number",
            "nullable": true,
            "description": "Рост, см",
            "example": 196
          },
          "preferredFoot": {
            "x-sports": [
              "football"
            ],
            "type": "string",
            "nullable": true,
            "description": "Рабочая нога (left/right/both)",
            "example": "right"
          },
          "country": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "nullable": true,
                "example": "Ecuador"
              }
            }
          },
          "image": {
            "type": "string",
            "nullable": true,
            "description": "URL фото игрока"
          }
        }
      },
      "SupportStaffMember": {
        "type": "object",
        "description": "Член тренерского/технического штаба команды",
        "properties": {
          "id": {
            "type": "integer",
            "nullable": true
          },
          "name": {
            "type": "string",
            "nullable": true
          },
          "role": {
            "type": "string",
            "nullable": true,
            "description": "Роль в штабе"
          },
          "country": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "nullable": true,
                "example": "Ecuador"
              }
            }
          },
          "translations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "example": null
              }
            }
          }
        }
      },
      "TeamSquadResponse": {
        "type": "object",
        "description": "Состав команды: игроки, легионеры, сборники, тренерский штаб",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/TeamBrief"
          },
          "totalPlayers": {
            "type": "integer",
            "description": "Число игроков в основном списке players",
            "example": 32
          },
          "players": {
            "type": "array",
            "description": "Полный состав",
            "items": {
              "$ref": "#/components/schemas/SquadPlayer"
            }
          },
          "foreignPlayers": {
            "type": "array",
            "description": "Легионеры (подмножество players)",
            "items": {
              "$ref": "#/components/schemas/SquadPlayer"
            }
          },
          "nationalPlayers": {
            "type": "array",
            "description": "Игроки национальных сборных (подмножество players)",
            "items": {
              "$ref": "#/components/schemas/SquadPlayer"
            }
          },
          "supportStaff": {
            "type": "array",
            "description": "Тренерский/технический штаб",
            "items": {
              "$ref": "#/components/schemas/SupportStaffMember"
            }
          }
        }
      },
      "TeamTransferItem": {
        "type": "object",
        "description": "Один переход в трансферах команды",
        "properties": {
          "player": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CompactPlayer"
              }
            ],
            "description": "Игрок"
          },
          "fromTeam": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
              }
            ],
            "description": "Команда, из которой перешёл игрок."
          },
          "toTeam": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
              }
            ],
            "description": "Команда, в которую перешёл игрок."
          },
          "fromTeamName": {
            "type": "string",
            "nullable": true,
            "example": "Barcelona SC Guayaquil"
          },
          "toTeamName": {
            "type": "string",
            "nullable": true,
            "example": "LDU"
          },
          "type": {
            "type": "integer",
            "nullable": true,
            "description": "Числовой код типа перехода.",
            "example": 3
          },
          "typeName": {
            "type": "string",
            "nullable": true,
            "description": "Англоязычное название типа перехода.",
            "example": "Transfer"
          },
          "typeTranslations": {
            "type": "object",
            "properties": {
              "ru": {
                "type": "string",
                "nullable": true,
                "example": "Трансфер"
              },
              "es": {
                "type": "string",
                "nullable": true,
                "example": "Traspaso"
              }
            }
          },
          "transferFee": {
            "type": "number",
            "nullable": true,
            "description": "Сумма перехода.",
            "example": 860000
          },
          "transferFeeDescription": {
            "type": "string",
            "nullable": true,
            "example": "860k €"
          },
          "transferFeeRaw": {
            "type": "object",
            "nullable": true,
            "description": "Сумма перехода с валютой.",
            "properties": {
              "value": {
                "type": "number",
                "example": 860000
              },
              "currency": {
                "type": "string",
                "example": "EUR"
              }
            }
          },
          "transferDateTimestamp": {
            "type": "integer",
            "nullable": true,
            "description": "Дата перехода, Unix-время в миллисекундах.",
            "example": 1767830400000
          }
        }
      },
      "TeamTransfersResponse": {
        "type": "object",
        "description": "Трансферы команды: пришедшие и ушедшие игроки",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/TeamBrief"
          },
          "transfersIn": {
            "type": "array",
            "description": "Пришедшие игроки",
            "items": {
              "$ref": "#/components/schemas/TeamTransferItem"
            }
          },
          "transfersOut": {
            "type": "array",
            "description": "Ушедшие игроки",
            "items": {
              "$ref": "#/components/schemas/TeamTransferItem"
            }
          }
        }
      },
      "TeamTournamentsResponse": {
        "type": "object",
        "description": "Турниры, в которых участвует команда",
        "properties": {
          "team": {
            "$ref": "#/components/schemas/TeamBrief"
          },
          "totalTournaments": {
            "type": "integer",
            "example": 3
          },
          "tournaments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TournamentInlineBrief"
            }
          }
        }
      },
      "PlayerMatchCompact": {
        "type": "object",
        "description": "Компактная карточка матча в истории игрока. Полные данные матча — `GET /v2/{sportSlug}/matches/{matchId}`",
        "properties": {
          "id": {
            "type": "integer",
            "description": "ID матча",
            "example": 12812998
          },
          "startTimestamp": {
            "type": "integer",
            "nullable": true,
            "description": "Unix-время начала матча в миллисекундах",
            "example": 1782781200000
          },
          "status": {
            "type": "string",
            "nullable": true,
            "description": "Тип статуса матча (для этого эндпоинта всегда завершённые матчи)",
            "example": "finished"
          },
          "statusDescription": {
            "type": "string",
            "nullable": true,
            "description": "Короткое описание статуса",
            "example": "Ended"
          },
          "tournament": {
            "$ref": "#/components/schemas/TournamentBrief"
          },
          "roundInfo": {
            "$ref": "#/components/schemas/RoundInfo"
          },
          "season": {
            "nullable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/SeasonBrief"
              }
            ]
          },
          "homeTeam": {
            "$ref": "#/components/schemas/CompactTeam"
          },
          "awayTeam": {
            "$ref": "#/components/schemas/CompactTeam"
          },
          "homeScore": {
            "type": "integer",
            "nullable": true,
            "description": "Итоговый счёт хозяев",
            "example": 3
          },
          "awayScore": {
            "type": "integer",
            "nullable": true,
            "description": "Итоговый счёт гостей",
            "example": 4
          },
          "winner": {
            "type": "string",
            "nullable": true,
            "description": "Исход матча: home | away | draw; null — исход не определён",
            "example": "away"
          },
          "winnerCode": {
            "type": "integer",
            "nullable": true,
            "description": "Код исхода: 1 — победа хозяев, 2 — победа гостей, 3 — ничья",
            "example": 2
          }
        }
      },
      "PlayerMatchHistoryItem": {
        "type": "object",
        "description": "Матч из истории игрока: компактная карточка матча + строка игрока из состава",
        "properties": {
          "match": {
            "$ref": "#/components/schemas/PlayerMatchCompact"
          },
          "homeAway": {
            "type": "string",
            "description": "Сторона команды игрока в матче: home | away",
            "example": "home"
          },
          "position": {
            "type": "string",
            "nullable": true,
            "description": "Позиция игрока в матче",
            "example": "G"
          },
          "shirtNumber": {
            "type": "integer",
            "nullable": true,
            "description": "Номер на футболке",
            "example": 1
          },
          "captain": {
            "type": "boolean",
            "description": "Являлся ли капитаном",
            "example": false
          },
          "substitute": {
            "type": "boolean",
            "description": "Вышел ли со скамейки запасных",
            "example": false
          },
          "statistics": {
            "x-sports": [
              "football",
              "ice-hockey",
              "basketball"
            ],
            "type": "object",
            "nullable": true,
            "additionalProperties": {
              "type": "number"
            },
            "description": "Статистика игрока в матче: плоский объект ключ→число, как в составах ответа матча. Ключи и переводы — в [словаре статистики](https://docs.api-sport.ru/concepts/statistics-dictionary) `null` — у игрока нет строки статистики в этом матче (см. played)."
          },
          "played": {
            "type": "boolean",
            "description": "Выходил ли игрок в этом матче (есть ли его строка в составе). false — статистики нет (statistics=null): не играл, состав не опубликован или вид спорта без составов."
          }
        }
      },
      "PlayerMatchesResponse": {
        "type": "object",
        "description": "История матчей игрока с пер-матчевой статистикой (новые сначала)",
        "properties": {
          "playerId": {
            "type": "integer",
            "description": "ID игрока",
            "example": 994363
          },
          "player": {
            "$ref": "#/components/schemas/SeasonStatisticsEntityBrief"
          },
          "teamId": {
            "type": "integer",
            "nullable": true,
            "description": "ID команды выборки в командном режиме (`team_id` либо текущая команда при `current_team=true`); null — режим по умолчанию (все матчи игрока) или текущая команда игрока неизвестна.",
            "example": 4705
          },
          "totalItems": {
            "type": "integer",
            "description": "Число матчей в items",
            "example": 10
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlayerMatchHistoryItem"
            }
          }
        }
      },
      "TournamentStandingsResponse": {
        "type": "object",
        "description": "Актуальная турнирная таблица: standings новейшего сезона, в котором таблицы есть",
        "properties": {
          "tournament": {
            "$ref": "#/components/schemas/TournamentBrief"
          },
          "season": {
            "type": "object",
            "description": "Сезон, к которому относится таблица",
            "properties": {
              "id": {
                "type": "integer",
                "example": 76986
              },
              "name": {
                "type": "string",
                "nullable": true,
                "example": "Premier League 25/26"
              },
              "year": {
                "type": "string",
                "nullable": true,
                "example": "25/26"
              },
              "isCurrent": {
                "type": "boolean",
                "description": "Является ли сезон текущим для турнира"
              },
              "translations": {
                "type": "object",
                "properties": {
                  "ru": {
                    "type": "string",
                    "nullable": true
                  }
                }
              }
            }
          },
          "standings": {
            "type": "array",
            "description": "Турнирные таблицы сезона. Лига — одна таблица, групповой этап — несколько (по одной на группу)",
            "items": {
              "$ref": "#/components/schemas/StandingsTable"
            }
          }
        }
      },
      "AccountUsageResponse": {
        "type": "object",
        "description": "Тарифный план и использование дневной квоты API-ключа",
        "properties": {
          "plan": {
            "type": "object",
            "description": "Тарифный план ключа",
            "properties": {
              "name": {
                "type": "string",
                "nullable": true,
                "description": "Название тарифного плана",
                "example": "Pro"
              },
              "dailyRequestLimit": {
                "type": "integer",
                "nullable": true,
                "description": "Дневной лимит запросов; `null` — безлимит",
                "example": 100000
              }
            }
          },
          "usage": {
            "type": "object",
            "description": "Использование квоты за текущие сутки",
            "properties": {
              "today": {
                "type": "integer",
                "description": "Успешных запросов за сегодня (зачтено в лимит)",
                "example": 12345
              },
              "remaining": {
                "type": "integer",
                "nullable": true,
                "description": "Остаток квоты на сегодня; `null` — безлимит",
                "example": 87655
              },
              "resetAt": {
                "type": "integer",
                "format": "int64",
                "description": "Момент сброса квоты — Unix-таймстемп в миллисекундах",
                "example": 1783458000000
              }
            }
          },
          "services": {
            "type": "array",
            "description": "Слаги видов спорта, доступных на тарифе",
            "items": {
              "type": "string"
            },
            "example": [
              "football",
              "ice-hockey",
              "basketball"
            ]
          },
          "options": {
            "type": "object",
            "nullable": true,
            "description": "Дополнительные опции тарифа; `null` — опций нет",
            "additionalProperties": true
          }
        }
      }
    }
  },
  "x-tagGroups": [
    {
      "name": "⚽ Спортивные события - REST API",
      "tags": [
        "Общее",
        "Категории",
        "Матчи",
        "Поиск",
        "Игроки",
        "Команды",
        "Турниры"
      ]
    }
  ]
}