SportAPI Документация
RU
S Документация продуктаSport Line API
v1
Услуга и цены ↗ Получить доступ ↗
Sport Line API / MENU — меню спортивной линии

Метод menu — меню спортивной линии

Для чего нужен метод

Метод menu возвращает структуру доступной спортивной линии:

вид спорта → страна → турнир

В каждом разделе также возвращается количество доступных матчей. Метод удобно использовать для построения меню сайта и получения идентификаторов, по которым затем можно запросить список матчей.

Самих матчей и коэффициентов в ответе menu нет. Для их получения используется метод events.

Запрос

GET https://YOUR_API_DOMAIN/v1/menu/{type}/{lang}

API-ключ необходимо передавать в HTTP-заголовке:

Package: YOUR_API_KEY

Параметры пути

ПараметрТипОбязательныйОписание
typestringдаТип спортивной линии: live или line
langstringдаЯзык названий. Язык должен поддерживаться API и входить в тариф клиента

Значения параметра type:

ЗначениеКакие данные возвращаются
liveМеню матчей, которые доступны в режиме Live
lineМеню предстоящих матчей Prematch

Необязательные query-параметры

ПараметрТипЗначение по умолчаниюОписание
cybersportbooleanfalseПереключает метод на меню киберспорта

Параметры добавляются после ?, например:

GET https://YOUR_API_DOMAIN/v1/menu/live/ru?cybersport=true

Сохранённые в этой документации полные ответы получены без query-параметров, то есть при cybersport=false.

Пример запроса Live

curl --request GET \
  --url 'https://YOUR_API_DOMAIN/v1/menu/live/ru' \
  --header 'Package: YOUR_API_KEY'

Для Prematch измените live на line:

curl --request GET \
  --url 'https://YOUR_API_DOMAIN/v1/menu/line/ru' \
  --header 'Package: YOUR_API_KEY'

Сокращённый пример ответа Live

Ниже показан фрагмент реального ответа. Значения сохранены без изменений, но массивы сокращены до одного вида спорта, одной страны и одного турнира.

{
  "status": 1,
  "page": "/v1/menu",
  "body": [
    {
      "id": 1,
      "name": "Футбол",
      "counter": 53,
      "sub": [
        {
          "id": 208,
          "name": "Шри-Ланка",
          "counter": 1,
          "sport_id": 1,
          "sub": [
            {
              "id": 2217395,
              "name": "Чемпионат Шри-Ланки. Суперлига",
              "counter": 1,
              "sport_id": 1,
              "countryId": 208
            }
          ]
        }
      ]
    }
  ]
}

Сокращённый пример ответа Prematch

Этот фрагмент также взят из реального ответа. Массивы сокращены.

{
  "status": 1,
  "page": "/v1/menu",
  "body": [
    {
      "id": 1,
      "name": "Футбол",
      "counter": 2565,
      "sub": [
        {
          "id": 1,
          "name": "Россия",
          "counter": 88,
          "sport_id": 1,
          "sub": [
            {
              "id": 176125,
              "name": "Кубок России",
              "counter": 8,
              "sport_id": 1,
              "countryId": 1
            }
          ]
        }
      ]
    }
  ]
}

Количество матчей постоянно изменяется. Значения counter в этих примерах показывают состояние линии только в момент получения ответов.

Верхний уровень ответа

ПолеТипОписание
statusnumberСтатус выполнения запроса. В успешном ответе возвращается 1
pagestringНазвание метода. Для menu возвращается /v1/menu
bodyarrayМассив доступных видов спорта

Поля вида спорта

Каждый объект верхнего уровня в массиве body описывает один вид спорта.

ПолеТипОписание
idnumberID вида спорта. Используется как sportId в URL других методов
namestringНазвание вида спорта на языке, указанном в lang
counternumberОбщее количество доступных матчей этого вида спорта
subarrayМассив стран, в которых доступны матчи этого вида спорта

Поля страны

Каждый объект в body[].sub описывает одну страну.

ПолеТипОписание
idnumberID страны. Используется как countryId в URL других методов
namestringНазвание страны на языке, указанном в lang
counternumberКоличество доступных матчей во всех турнирах этой страны
sport_idnumberID вида спорта, к которому относится страна
subarrayМассив доступных турниров этой страны

Поля турнира

Каждый объект в body[].sub[].sub описывает один турнир.

ПолеТипОписание
idnumberID турнира. Используется как tournamentId в URL других методов
namestringНазвание турнира на языке, указанном в lang. Иногда API возвращает пустую строку
counternumberКоличество доступных матчей этого турнира
sport_idnumberID вида спорта, к которому относится турнир
countryIdnumberID страны, к которой относится турнир

Обратите внимание на точное написание полей в JSON:

  • у страны ID вида спорта называется sport_id;
  • у турнира ID страны называется countryId с заглавной буквой I.

Не заменяйте countryId на country_id при чтении ответа.

Готовые иконки

Для видов спорта, стран и турниров можно использовать стандартные иконки SportAPI. Нужный ID берётся из ответа menu и подставляется в соответствующий URL.

Иконка вида спорта

Используйте id вида спорта из body[].id:

https://cdn.sportapi.net/sports/v1/color/{sportId}.webp

Например, для вида спорта с id: 1:

https://cdn.sportapi.net/sports/v1/color/1.webp

Иконка страны

Используйте id страны из body[].sub[].id:

https://cdn.sportapi.net/flags/v1/color/{countryId}.webp

Например, для страны с id: 218:

https://cdn.sportapi.net/flags/v1/color/218.webp

Иконка турнира

Используйте id турнира из body[].sub[].sub[].id:

https://cdn.sportapi.net/tournaments/v1/color/{tournamentId}.webp

Например, для турнира с id: 118737:

https://cdn.sportapi.net/tournaments/v1/color/118737.webp

Как понимать counter

Поле counter показывает количество матчей, доступных в выбранном типе линии на момент ответа:

  • у турнира — количество матчей турнира;
  • у страны — количество матчей во всех её турнирах;
  • у вида спорта — количество матчей во всех его странах и турнирах.

В сохранённых ответах сумма counter дочерних элементов совпадает со значением counter родительского элемента. Значение динамическое: оно может измениться при следующем запросе.

Особенности, которые нужно учитывать

Live и Prematch нужно запрашивать отдельно

Оба типа линии имеют одинаковую структуру ответа, но содержат разные наборы видов спорта, стран и турниров. Для меню Live используйте type=live, для Prematch — type=line.

Пустое название турнира

Поле name у турнира может содержать пустую строку. В сохранённом Live-ответе было пять таких турниров, в Prematch-ответе — один.

Интерфейс клиента должен корректно обработать такую запись. Например, можно временно показать ID турнира или не отображать турнир до получения названия. Не следует придумывать название турнира на основании других полей.

Состав меню зависит от доступа

API возвращает только те данные, которые доступны переданному ключу. Состав видов спорта и языков зависит от тарифа клиента.

Снимок русскоязычных ответов

Тип линииВиды спортаСтраныТурниры
Live3192200
Prematch (line)34269783

Это статистика конкретных ответов от 21 августа 2026 года, а не постоянный состав API.

Полные ответы без сокращений:

Файлы содержат только тело ответа API. API-ключ в них не сохраняется.

Как использовать метод

Обычная последовательность работы:

  1. Запросите menu для нужного типа линии и языка.
  2. Покажите пользователю доступные виды спорта из массива body.
  3. После выбора спорта откройте страны из его массива sub.
  4. После выбора страны откройте турниры из её массива sub.
  5. Передайте выбранные sportId и tournamentId в метод events, чтобы получить матчи.
  6. При следующем обновлении меню учитывайте, что разделы и значения counter могли измениться.

Используйте только актуальные ID из меню

menu возвращает только виды спорта, страны и турниры, в которых сейчас есть матчи выбранного типа линии. Не храните их ID как постоянный список доступных разделов.

Если в турнире закончился или исчез его единственный матч, турнир перестанет возвращаться в следующем ответе. Если после этого у вида спорта не осталось других матчей, из меню исчезнет и сам вид спорта.

Перед запросом events проверяйте, что выбранные sportId и tournamentId присутствуют в актуальном menu для того же типа live или line.

Частота обновления

Рекомендуется запрашивать menu:

  • Live — не чаще одного раза в 20 секунд;
  • Prematch (line) — не чаще одного раза в 60 секунд.

Подробнее: «Рекомендации по обновлению данных».

Ошибки ключа, тарифа и параметров описаны в документе «Обработка ошибок».