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

Sport Line API — авторизация и доступ

Как работает доступ к API

Для работы со Sport Line API клиент получает у менеджера SportAPI:

  • базовый URL спортивной линии;
  • персональный API-ключ;
  • доступные виды спорта;
  • доступные языки;
  • срок действия доступа;
  • условия выбранного тарифа.

API-ключ связан с тарифом клиента. С его помощью API проверяет срок действия доступа, а также список доступных видов спорта и языков. Если запрошенные данные не входят в тариф, API вернёт ошибку доступа или не включит их в ответ.

Чтобы получить доступ, напишите менеджеру SportAPI в Telegram.

Заголовок Package

При каждом обращении к API передавайте ключ в HTTP-заголовке Package:

Package: YOUR_API_KEY

URL запроса:

GET https://YOUR_API_DOMAIN/v1/menu/live/ru

HTTP-заголовки запроса:

Package: YOUR_API_KEY
Accept: application/json

Значение YOUR_API_KEY передаётся именно в заголовке Package, а не в URL.

В полном формате HTTP-запрос выглядит так:

GET /v1/menu/live/ru HTTP/1.1
Host: YOUR_API_DOMAIN
Package: YOUR_API_KEY
Accept: application/json

Замените:

  • https://YOUR_API_DOMAIN — на базовый URL, выданный менеджером;
  • YOUR_API_KEY — на Ваш API-ключ.

Не передавайте ключ:

  • в параметрах URL;
  • в теле GET-запроса;
  • в имени файла;
  • в сообщениях об ошибках;
  • в публичной документации и примерах.

Пример с curl

Для локальной проверки можно использовать переменные окружения:

export SPORTAPI_BASE_URL='https://YOUR_API_DOMAIN'
export SPORTAPI_KEY='YOUR_API_KEY'

curl --request GET \
  --url "$SPORTAPI_BASE_URL/v1/menu/live/ru" \
  --header "Package: $SPORTAPI_KEY"

Не сохраняйте действующий ключ в истории команд на общем компьютере.

Безопасное хранение ключа

Храните API-ключ в защищённых настройках приложения:

  • в переменной окружения;
  • в секретах хостинга или CI/CD;
  • в менеджере секретов;
  • в серверной конфигурации, которая не публикуется в репозитории.

Не записывайте действующий ключ непосредственно в исходный код и не добавляйте файл с ключом в Git.

Если спортивные данные используются на публичном сайте, рекомендуется выполнять запросы к Sport Line API через свой backend. Это позволяет не показывать персональный ключ посетителям сайта в браузере.

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

Ограничения по видам спорта

Ключ содержит список доступных видов спорта.

Поддерживаемые обычные и киберспортивные дисциплины и их sport_id приведены в списке видов спорта SportAPI.

Если запрашивается конкретный sportId, который не входит в тариф, API может вернуть отказ в доступе:

{
  "error_code": 100,
  "error_message": "Access denied"
}

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

Ограничения по языкам

Полный перечень доступных языков и их кодов приведён в списке языков Sport Line API.

Код языка передаётся в пути запроса:

/v1/menu/live/ru
/v1/menu/live/en

Запрашиваемый язык должен:

  1. поддерживаться Sport Line API;
  2. входить в тариф клиента.

Если язык существует, но не входит в тариф ключа, API возвращает:

{
  "error_code": 100,
  "error_message": "The language is not available in your package."
}

Если передан неподдерживаемый код языка, API может вернуть:

{
  "error_code": 100,
  "error_message": "Invalid language"
}

Точный список доступных языков для Вашего ключа можно получить у менеджера SportAPI.

Срок действия и статус ключа

Доступ работает, пока ключ:

  • существует в системе;
  • имеет активный статус;
  • не достиг даты окончания;
  • имеет доступ к запрошенным данным.

Если срок действия закончился или ключ был отключён, API возвращает:

{
  "error_code": 100,
  "error_message": "Package has expired"
}

Для продления доступа обратитесь к менеджеру SportAPI. Не создавайте новый ключ самостоятельно и не используйте ключ другого клиента.

Другие состояния ключа:

error_messageЧто значит
Package is blockedКлюч временно приостановлен; срок не меняется
Package is not active yetКлюч выдан заранее, срок ещё не начался

Дата окончания в каждом ответе

Каждый успешный ответ содержит заголовок X-Key-Expires с датой окончания ключа (ISO 8601, UTC):

X-Key-Expires: 2026-11-03T14:34:23.479Z

По нему можно заранее показать напоминание о продлении, не делая отдельных запросов.

Несколько ключей и метод account

У клиента может быть несколько ключей: тестовый и рабочий, отдельные ключи для разных сайтов или зеркал. Тестовый и рабочий — всегда разные ключи: при переходе на рабочий доступ выдаётся новый ключ.

Метод account по любому ключу клиента возвращает данные по всем его ключам: срок, сколько дней осталось, доступные виды спорта и языки, ограничения доступа, время последнего запроса и число запросов за 7 дней. Список языков ключа подходит для переключателя языков на сайте: в нём только языки, которые входят в ключ и доступны в линии.

Ограничение доступа по IP и сайтам

По запросу клиента ключ можно привязать к IP-адресам его серверов и (или) к его сайтам. Тогда даже скопированный или утёкший ключ не будет работать с чужого сервера или сайта.

  • IP-адреса и подсети — для запросов с сервера клиента. Например, 203.0.113.7 или подсеть 198.51.100.0/24 (все адреса от 198.51.100.0 до 198.51.100.255). Разрешать нужно IP сервера, с которого уходят запросы к API, а не адрес сайта.
  • Сайты — для запросов прямо из браузера: example.com (только этот домен), *.example.com (все поддомены), зеркала — отдельными записями. Сайт определяется по заголовку Origin, который браузер ставит сам.

Запрос проходит, если его IP или сайт есть в списке. С другого адреса API возвращает:

{
  "error_code": 100,
  "error_message": "Access from IP 203.0.113.50 is not allowed for this Package"
}

или Access from site example.org is not allowed for this Package для запросов из браузера. В тексте указан адрес, который нужно сообщить менеджеру, чтобы его разрешили. Свой текущий IP можно узнать в поле your_ip метода account.

Привязка к сайту защищает только от использования ключа на чужом сайте: скрипт на сервере может подставить любой заголовок Origin. Поэтому для надёжной защиты выполняйте запросы со своего сервера и привязывайте ключ к его IP.

Ошибки авторизации

Ошибки доступа возвращаются в JSON-формате с полями error_code и error_message:

{
  "error_code": 100,
  "error_message": "Invalid Package"
}

При обработке ответа проверяйте наличие error_code и error_message, а не только HTTP-статус.

Все подтверждённые ошибки, их причины и способы устранения собраны в документе «Обработка ошибок».

Проверка подключения

Перед началом основной интеграции убедитесь, что:

  1. Используется базовый URL, выданный менеджером.
  2. Ключ передаётся в заголовке Package.
  3. Ключ не выводится в логи и сообщения интерфейса.
  4. Значение line или live правильно указано в URL.
  5. Запрашиваемый язык входит в тариф.
  6. Запрашиваемый вид спорта доступен ключу.
  7. Срок действия доступа не закончился.
  8. Если ключ привязан к IP или сайтам — запрос отправляется с разрешённого адреса.

Состояние всех своих ключей можно проверить одним запросом:

curl --request GET \
  --url 'https://YOUR_API_DOMAIN/v1/account' \
  --header 'Package: YOUR_API_KEY'

Для проверки выполните запрос:

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

Поддержка

Если доступ не работает, отправьте менеджеру:

  • адрес запроса без ключа;
  • время выполнения запроса;
  • error_code и error_message;
  • используемый язык и ID вида спорта;
  • описание среды: локальная, тестовая или рабочая.

Не отправляйте API-ключ в общий чат или публичную задачу.

Следующий документ: 03-основные-понятия.md.