Sport Line API — примеры запросов cURL
Перед началом
Во всех примерах замените:
| Значение | Чем заменить |
|---|---|
https://YOUR_API_DOMAIN | Базовым URL, полученным от менеджера SportAPI |
YOUR_API_KEY | Персональным ключом Sport Line API |
SPORT_ID_FROM_MENU | Актуальным ID вида спорта из menu или sports |
COUNTRY_ID_FROM_MENU | Актуальным ID страны из menu или countries |
TOURNAMENT_ID_FROM_MENU | Актуальным ID турнира из menu или tournaments |
SPORT_ID_FROM_SPORTS | Актуальным ID вида спорта из ответа sports |
COUNTRY_ID_FROM_COUNTRIES | Актуальным ID страны из ответа countries |
TOURNAMENT_ID_FROM_TOURNAMENTS | Актуальным ID турнира из ответа tournaments |
GAME_ID_FROM_EVENTS | Актуальным game_id матча из events |
SUBGAME_ID_FROM_EVENT | ID субматча из event.body.sub_games |
API-ключ передаётся только в HTTP-заголовке Package:
Package: YOUR_API_KEY
Не добавляйте ключ в URL и не сохраняйте рабочий ключ в публичном репозитории, документации или сообщениях об ошибках.
Минимальный Live-запрос
Получение актуального Live-меню:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/menu/live/ru' \
--header 'Package: YOUR_API_KEY' \
--header 'Accept: application/json'
Заголовок Package обязателен. Accept: application/json можно не передавать, но он
явно показывает ожидаемый формат ответа.
Рекомендуемая последовательность интеграции
Обычная последовательность состоит из трёх запросов:
menu
↓ актуальные sportId и tournamentId
events
↓ актуальный game_id
event
Не заменяйте эту последовательность статически записанными ID. API возвращает только те
виды спорта и турниры, в которых сейчас есть матчи выбранного типа live или line.
Шаг 1. Получите актуальное меню
Live:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/menu/live/ru' \
--header 'Package: YOUR_API_KEY'
Prematch:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/menu/line/ru' \
--header 'Package: YOUR_API_KEY'
В ответе выберите вид спорта и турнир, которые присутствуют в текущей иерархии:
body[].id → sportId
body[].sub[].id → countryId
body[].sub[].sub[].id → tournamentId
Подробное описание: menu.
Шаг 2. Получите список матчей
Все матчи всех доступных турниров выбранного Live-вида спорта:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/events/SPORT_ID_FROM_MENU/0/sub/50/live/ru' \
--header 'Package: YOUR_API_KEY'
Значение tournamentId=0 означает все доступные турниры выбранного спорта. При этом
SPORT_ID_FROM_MENU всё равно нужно взять из актуального ответа menu.
Только один выбранный Live-турнир:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/events/SPORT_ID_FROM_MENU/TOURNAMENT_ID_FROM_MENU/sub/50/live/ru' \
--header 'Package: YOUR_API_KEY'
Все Prematch-матчи выбранного спорта:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/events/SPORT_ID_FROM_MENU/0/sub/50/line/ru' \
--header 'Package: YOUR_API_KEY'
Для events используются только:
- формат
sub; - техническое значение
count=50.
Ограничение количества матчей через count отменено: API возвращает всю доступную
выборку.
Подробное описание: events.
Шаг 3. Получите конкретный матч
Возьмите game_id из актуального ответа events.
Live-матч:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/event/GAME_ID_FROM_EVENTS/group/live/ru' \
--header 'Package: YOUR_API_KEY'
Prematch-матч:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/event/GAME_ID_FROM_EVENTS/group/line/ru' \
--header 'Package: YOUR_API_KEY'
Для метода event используется только формат group. Он возвращает полный доступный
список групп ставок и коэффициентов выбранного матча.
Используйте тот же тип линии, из которого был получен game_id. Prematch-ID нельзя
запрашивать как Live-ID.
Подробное описание: event.
Запрос субматча
Сначала запросите основной матч через event и найдите нужный элемент в
body.sub_games:
{
"game_id": 746147010,
"game_name": "Угловые"
}
Затем выполните отдельный запрос по game_id субматча:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/event/SUBGAME_ID_FROM_EVENT/group/live/ru' \
--header 'Package: YOUR_API_KEY'
Коэффициенты ответа будут относиться только к выбранному субматчу. Например, запрос «Угловые, 1-й тайм» вернёт коэффициенты только на угловые первого тайма.
Подробное описание: «Дополнительные матчи и субматчи».
Пошаговая навигация без menu
Обычно удобнее использовать menu: он возвращает виды спорта, страны и турниры одним
запросом. Если интерфейсу нужна пошаговая загрузка, соблюдайте последовательность ниже.
1. Виды спорта
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/sports/live/ru' \
--header 'Package: YOUR_API_KEY'
2. Страны выбранного спорта
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/countries/SPORT_ID_FROM_SPORTS/live/ru' \
--header 'Package: YOUR_API_KEY'
3. Турниры выбранной страны
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/tournaments/SPORT_ID_FROM_SPORTS/COUNTRY_ID_FROM_COUNTRIES/live/ru' \
--header 'Package: YOUR_API_KEY'
4. Матчи выбранного турнира
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/events/SPORT_ID_FROM_SPORTS/TOURNAMENT_ID_FROM_TOURNAMENTS/sub/50/live/ru' \
--header 'Package: YOUR_API_KEY'
Каждый ID берите из непосредственно предыдущего актуального ответа. Не пропускайте уровни цепочки и не подставляйте сохранённые статические значения.
Подробные документы:
Киберспортивные данные
В поддерживающих параметр методах передайте cybersport=true.
Киберспортивное Live-меню:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/menu/live/ru?cybersport=true' \
--header 'Package: YOUR_API_KEY'
Киберспортивные Live-матчи:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/events/SPORT_ID_FROM_MENU/0/sub/50/live/ru?cybersport=true' \
--header 'Package: YOUR_API_KEY'
Используйте ID из киберспортивного меню, полученного с тем же параметром
cybersport=true.
Топ-матчи
Все виды спорта
Сокращённые Live-карточки:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/topmatches/live/ru' \
--header 'Package: YOUR_API_KEY'
Расширенные Live-карточки с кратким списком коэффициентов:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/topmatches/live/ru?full=true' \
--header 'Package: YOUR_API_KEY'
Для Prematch замените live на line.
Параметр full=true расширяет объект матча, но не возвращает полный список всех
коэффициентов. Для полного списка запросите event.
Подробное описание: topmatches.
Один вид спорта
toplist работает только с Prematch и не содержит параметр type:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/toplist/SPORT_ID_FROM_MENU/ru' \
--header 'Package: YOUR_API_KEY'
Здесь SPORT_ID_FROM_MENU нужно взять из актуального Prematch-меню menu/line, а не из
Live-меню.
Расширенные карточки:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/toplist/SPORT_ID_FROM_MENU/ru?full=true' \
--header 'Package: YOUR_API_KEY'
Подробное описание: toplist.
Поиск матчей
Поисковый текст является частью URL и должен быть закодирован.
Поиск Перт среди Live-матчей:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/search/live/ru/%D0%9F%D0%B5%D1%80%D1%82' \
--header 'Package: YOUR_API_KEY'
Поиск Манчестер среди Prematch-матчей:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/search/line/ru/%D0%9C%D0%B0%D0%BD%D1%87%D0%B5%D1%81%D1%82%D0%B5%D1%80' \
--header 'Package: YOUR_API_KEY'
Live и Prematch ищутся отдельными запросами.
Подробное описание: search.
Английский язык
Чтобы получить английские названия, замените последний сегмент ru на en:
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/menu/live/en' \
--header 'Package: YOUR_API_KEY'
Запрашиваемый язык должен входить в тариф API-ключа.
Просмотр форматированного JSON
Если установлена утилита jq, ответ можно сразу отформатировать:
curl --silent --show-error \
--request GET \
--url 'https://YOUR_API_DOMAIN/v1/menu/live/ru' \
--header 'Package: YOUR_API_KEY' \
| jq .
jq не является частью Sport Line API и устанавливается отдельно.
Сохранение ответа в файл
curl --request GET \
--url 'https://YOUR_API_DOMAIN/v1/menu/live/ru' \
--header 'Package: YOUR_API_KEY' \
--output 'sportapi-menu-live.json'
Не сохраняйте API-ключ внутри JSON-файла или рядом с ответом в публичном каталоге.
Проверка формата ответа
Успешный ответ:
{
"status": 1,
"page": "/v1/menu",
"body": []
}
Ошибка API:
{
"error_code": 100,
"error_message": "Invalid Package"
}
Служебное сообщение метода event:
{
"status": 1,
"page": "/v1/event",
"body": {
"message": "Game id finished"
}
}
При проверке ответа:
- Сначала проверьте
error_codeиerror_message. - Затем проверьте
body.message. - Пустой массив
bodyобрабатывайте как отсутствие данных, а не как системную ошибку. - Только после этого разбирайте данные конкретного метода.
Подробнее:
Полные проверочные ответы
Сохранённые реальные ответы без сокращений находятся в папке «Полные JSON-ответы».
Файлы не содержат API-ключ.
Что не делает этот документ
Примеры показывают отдельные HTTP-запросы. Они не реализуют:
- SDK или библиотеку SportAPI;
- автоматическое обновление данных;
- хранение состояния приложения;
- полноценный пользовательский интерфейс;
- автоматические повторные запросы;
- систему приёма и расчёта ставок.
Эти задачи зависят от архитектуры проекта клиента и будут рассматриваться отдельно.