---
id: error-handling
title: Sport Line API — обработка ошибок
description: Инструкция по распознаванию, обработке и диагностике ошибок доступа, параметров и ответов Sport Line API.
version: v1
language: ru
---

# Sport Line API — обработка ошибок


## Общий формат ошибки

Большинство ошибок доступа и проверки параметров возвращаются в формате:

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

| Поле | Тип | Описание |
|---|---|---|
| `error_code` | number | Числовой код категории ошибки |
| `error_message` | string | Текстовое описание причины |

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

## 1. Ошибки API-ключа

### `Missing Package header`

API-ключ не передан в HTTP-заголовке `Package`.

```json
{
  "error_code": 100,
  "error_message": "Missing Package header"
}
```

Что проверить:

- присутствует ли заголовок `Package`;
- не был ли ключ ошибочно добавлен в URL или тело запроса;
- добавляет ли HTTP-клиент заголовок к каждому запросу.

### `Invalid Package`

Переданный ключ не найден в системе.

Что проверить:

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

### `Package has expired`

Срок действия ключа закончился или доступ был отключён.

Что сделать:

- уточнить срок действия доступа;
- проверить статус оплаты или тестового периода;
- обратиться к менеджеру SportAPI для продления или активации.

## 2. Ошибки тарифа и разрешений

### `Access denied`

У ключа нет доступа к запрошенным данным или виду спорта.

Что проверить:

- входит ли `sportId` в тариф клиента;
- используется ли правильный метод API;
- не запрашиваются ли внутренние методы;
- соответствует ли ключ выбранному подключению.

### `The language is not available in your package.`

Указанный язык существует в Sport Line API, но не входит в тариф клиента.

Что сделать:

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

## 3. Ошибки параметров запроса

### `Invalid language`

Передан код языка, который не поддерживается API.

Что проверить:

- значение `lang` в URL;
- регистр и написание кода языка;
- отсутствие лишних символов в пути запроса.

### `Wrong data type (accept only live or line)`

В параметре типа линии передано значение, отличное от `live` или `line`.

```json
{
  "error_code": 90,
  "error_message": "Wrong data type (accept only live or line)"
}
```

Допустимые значения:

| Значение | Назначение |
|---|---|
| `line` | Prematch-матчи |
| `live` | Матчи в реальном времени |

Эта ошибка явно обрабатывается методом поиска. Для остальных методов
неправильный тип линии может привести к пустому ответу, поэтому проверяйте
значение до отправки запроса.

## 4. Ответы метода конкретного матча

Некоторые ситуации метода `event` возвращаются не в формате `error_code`, а как
сообщение внутри успешной оболочки ответа.

### `Game not found`

Матч с переданным идентификатором не найден.

```json
{
  "status": 1,
  "page": "/v1/event",
  "body": {
    "message": "Game not found"
  }
}
```

Что проверить:

- правильность `game_id` или `sgame_id`;
- соответствует ли матч типу `line` или `live`;
- существует ли матч в актуальной выдаче `events`.

### `Game id finished`

Матч больше недоступен в текущей линии по переданному `game_id`.

```json
{
  "status": 1,
  "page": "/v1/event",
  "body": {
    "message": "Game id finished"
  }
}
```

Сообщение не указывает точную причину. Prematch-матч мог перейти в live с новым `game_id`,
быть отменён или исчезнуть из линии по другой причине. Sport Line API не возвращает отдельные
статусы для этих случаев.

Что делать:

- прекратить запросы `event` по прежнему `game_id`;
- обновить список матчей через `events` для нужного типа линии;
- не считать матч начатым, завершённым или отменённым только по этому сообщению.

## 5. Пустой ответ — не всегда ошибка

Пустой массив `body` может означать, что по выбранным условиям нет доступных
данных:

```json
{
  "status": 1,
  "page": "/v1/events",
  "body": []
}
```

Перед показом ошибки пользователю проверьте:

- есть ли матчи выбранного вида спорта;
- правильно ли указан `tournamentId`;
- соответствует ли запрос типу `line` или `live`;
- доступны ли запрошенные данные текущему тарифу.

## Рекомендуемая обработка в приложении

1. Разобрать JSON-ответ.
2. Проверить наличие `error_code`.
3. Если есть `error_code`, обработать известное значение и записать техническую
   информацию в лог без API-ключа.
4. Если ответ содержит `body.message`, обработать состояние конкретного матча.
5. Если `body` — пустой массив, показать пустое состояние, а не системную
   ошибку.
6. Не показывать клиентам API-ключ, внутренний URL или полный технический лог.

## Что отправить в поддержку

Если причина ошибки неизвестна, отправьте:

- URL запроса без API-ключа;
- время и часовой пояс запроса;
- `error_code` и `error_message`;
- тело ответа без чувствительных данных;
- тип линии `line` или `live`;
- язык, `sportId`, `tournamentId` и `gameId`, если они использовались.

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

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