---
id: example-curl
title: Sport Line API — примеры запросов cURL
description: Готовые примеры cURL-запросов к основным методам Sport Line API с передачей ключа доступа.
version: v1
language: ru
---

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

```http
Package: YOUR_API_KEY
```

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

## Минимальный Live-запрос

Получение актуального Live-меню:

```bash
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` можно не передавать, но он
явно показывает ожидаемый формат ответа.

## Рекомендуемая последовательность интеграции

Обычная последовательность состоит из трёх запросов:

```text
menu
  ↓ актуальные sportId и tournamentId
events
  ↓ актуальный game_id
event
```

Не заменяйте эту последовательность статически записанными ID. API возвращает только те
виды спорта и турниры, в которых сейчас есть матчи выбранного типа `live` или `line`.

### Шаг 1. Получите актуальное меню

Live:

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

Prematch:

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

В ответе выберите вид спорта и турнир, которые присутствуют в текущей иерархии:

```text
body[].id                         → sportId
body[].sub[].id                   → countryId
body[].sub[].sub[].id             → tournamentId
```

Подробное описание: [`menu`](../api-reference/menu.md).

### Шаг 2. Получите список матчей

Все матчи всех доступных турниров выбранного Live-вида спорта:

```bash
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-турнир:

```bash
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-матчи выбранного спорта:

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

### Шаг 3. Получите конкретный матч

Возьмите `game_id` из актуального ответа `events`.

Live-матч:

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

Prematch-матч:

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

## Запрос субматча

Сначала запросите основной матч через `event` и найдите нужный элемент в
`body.sub_games`:

```json
{
  "game_id": 746147010,
  "game_name": "Угловые"
}
```

Затем выполните отдельный запрос по `game_id` субматча:

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

Коэффициенты ответа будут относиться только к выбранному субматчу. Например, запрос
«Угловые, 1-й тайм» вернёт коэффициенты только на угловые первого тайма.

Подробное описание:
[«Дополнительные матчи и субматчи»](../data-models/sub-events.md).

## Пошаговая навигация без `menu`

Обычно удобнее использовать `menu`: он возвращает виды спорта, страны и турниры одним
запросом. Если интерфейсу нужна пошаговая загрузка, соблюдайте последовательность ниже.

### 1. Виды спорта

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

### 2. Страны выбранного спорта

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

### 3. Турниры выбранной страны

```bash
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. Матчи выбранного турнира

```bash
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 берите из непосредственно предыдущего актуального ответа. Не пропускайте
уровни цепочки и не подставляйте сохранённые статические значения.

Подробные документы:

- [`sports`](../api-reference/optional-methods/sports.md);
- [`countries`](../api-reference/optional-methods/countries.md);
- [`tournaments`](../api-reference/optional-methods/tournaments.md).

## Киберспортивные данные

В поддерживающих параметр методах передайте `cybersport=true`.

Киберспортивное Live-меню:

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

Киберспортивные Live-матчи:

```bash
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-карточки:

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

Расширенные Live-карточки с кратким списком коэффициентов:

```bash
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`](../api-reference/optional-methods/topmatches.md).

### Один вид спорта

`toplist` работает только с Prematch и не содержит параметр `type`:

```bash
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-меню.

Расширенные карточки:

```bash
curl --request GET \
  --url 'https://YOUR_API_DOMAIN/v1/toplist/SPORT_ID_FROM_MENU/ru?full=true' \
  --header 'Package: YOUR_API_KEY'
```

Подробное описание: [`toplist`](../api-reference/optional-methods/toplist.md).

## Поиск матчей

Поисковый текст является частью URL и должен быть закодирован.

Поиск `Перт` среди Live-матчей:

```bash
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-матчей:

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

## Английский язык

Чтобы получить английские названия, замените последний сегмент `ru` на `en`:

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

Запрашиваемый язык должен входить в тариф API-ключа.

## Просмотр форматированного JSON

Если установлена утилита `jq`, ответ можно сразу отформатировать:

```bash
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 и устанавливается отдельно.

## Сохранение ответа в файл

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

Не сохраняйте API-ключ внутри JSON-файла или рядом с ответом в публичном каталоге.

## Проверка формата ответа

Успешный ответ:

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

Ошибка API:

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

Служебное сообщение метода `event`:

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

При проверке ответа:

1. Сначала проверьте `error_code` и `error_message`.
2. Затем проверьте `body.message`.
3. Пустой массив `body` обрабатывайте как отсутствие данных, а не как системную ошибку.
4. Только после этого разбирайте данные конкретного метода.

Подробнее:

- [общий формат ответа](../data-models/response-format.md);
- [обработка ошибок](../getting-started/error-handling.md).

## Полные проверочные ответы

Сохранённые реальные ответы без сокращений находятся в папке
[«Полные JSON-ответы»](json-responses/README.md).

Файлы не содержат API-ключ.

## Что не делает этот документ

Примеры показывают отдельные HTTP-запросы. Они не реализуют:

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

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

## Связанные документы

- [Быстрый старт](../getting-started/quick-start.md)
- [Основные понятия](../getting-started/core-concepts.md)
- [Рекомендации по обновлению](../getting-started/update-guidelines.md)
- [Методы Sport Line API](../api-reference/README.md)
- [Единый справочник полей](../data-models/field-reference.md)
