---
id: authentication-and-access
title: Sport Line API — авторизация и доступ
description: Инструкция по получению доступа, передаче API-ключа и безопасной авторизации запросов Sport Line API.
version: v1
language: ru
---

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

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

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

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

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

Чтобы получить доступ, напишите
[менеджеру SportAPI в Telegram](https://t.me/suport_sportapi).

## Заголовок `Package`

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

```http
Package: YOUR_API_KEY
```

URL запроса:

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

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

```http
Package: YOUR_API_KEY
Accept: application/json
```

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

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

```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`

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

```bash
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](../reference/sports.md).

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

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

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

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

Полный перечень доступных языков и их кодов приведён в
[списке языков Sport Line API](../reference/languages.md).

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

```text
/v1/menu/live/ru
/v1/menu/live/en
```

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Все подтверждённые ошибки, их причины и способы устранения собраны в документе
[«Обработка ошибок»](error-handling.md).

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

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

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

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

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

## Поддержка

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

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

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

- Поддержка SportAPI: [@suport_sportapi](https://t.me/suport_sportapi)
- Официальный сайт: [sportapi.net](https://sportapi.net)

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