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
Запрашиваемый язык должен:
- поддерживаться Sport Line API;
- входить в тариф клиента.
Если язык существует, но не входит в тариф ключа, 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-статус.
Все подтверждённые ошибки, их причины и способы устранения собраны в документе «Обработка ошибок».
Проверка подключения
Перед началом основной интеграции убедитесь, что:
- Используется базовый URL, выданный менеджером.
- Ключ передаётся в заголовке
Package. - Ключ не выводится в логи и сообщения интерфейса.
- Значение
lineилиliveправильно указано в URL. - Запрашиваемый язык входит в тариф.
- Запрашиваемый вид спорта доступен ключу.
- Срок действия доступа не закончился.
- Если ключ привязан к 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-ключ в общий чат или публичную задачу.
- Поддержка SportAPI: @sportapinet_bot
- Официальный сайт: sportapi.net
Следующий документ: 03-основные-понятия.md.