---
id: api-event
title: event Method — Specific Match
description: Reference for the EVENT method, which returns full information about a specific match by game_id.
version: v1
language: en
---

# `event` Method — Specific Match

## Purpose

The `event` method returns detailed data for one match by its `game_id`.

Unlike [`events`](events.md), which provides a short list of the main markets and best
odds for each match, `event` returns the complete available list of markets and
selections for the selected match.

The method is also used to:

- open a specific match page;
- regularly update an open Live match;
- retrieve the main current Live metrics from `stat_list`;
- retrieve the submatch list;
- request the complete odds list for a selected submatch;
- check video and Live 3D Tracker availability.

Every JSON field is documented in the
[Sport Line API Field Reference](../data-models/field-reference.md).

## Request

```http
GET https://YOUR_API_DOMAIN/v1/event/{gameId}/group/{type}/{lang}
```

Send the API key in the HTTP header:

```http
Package: YOUR_API_KEY
```

## Path Parameters

| Parameter | Type | Required | Description |
|---|---|---:|---|
| `gameId` | number | yes | Match or submatch ID obtained from `events` or `sub_games` |
| `group` | string | yes | The only format supported by `event`. Groups odds into markets and nested selection columns |
| `type` | string | yes | Sports line type: `live` or `line` |
| `lang` | string | yes | Language of names. It must be supported by the API and included in the client's subscription |

The `event` method supports only the `group` format.

### Why `group` Is Used

The `group` format is recommended for a specific match because the API prepares the
odds for display:

- it separates selections into betting markets;
- it creates columns within each market;
- it provides the recommended number of columns in `columns`;
- it sorts selections by their values.

The developer does not need to group selections, reconstruct columns, or re-sort the
values. Preserve the order of markets, columns, and selections returned by the API.

Request an ID using the same line type from which it was obtained:

- use `live` for a Live match;
- use `line` for a Prematch match.

Prematch and Live versions of the same match have different `game_id` values. Do not
take a Prematch ID and continue requesting it as a Live ID after the match starts.

## Live Request Example

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

## Prematch Request Example

```bash
curl --request GET \
  --url 'https://YOUR_API_DOMAIN/v1/event/730321837/group/line/en' \
  --header 'Package: YOUR_API_KEY'
```

## Shortened Live Response Example

The following excerpt comes from the real English response for match `746146992`. It
contains one betting market and the first three submatches.

```json
{
  "status": 1,
  "page": "/v1/event",
  "body": {
    "game_id": 746146992,
    "game_mid": 746146992,
    "game_start": 1787338800,
    "sport_id": 1,
    "sport_name": "Football",
    "country_id": 231,
    "country_name": "England",
    "tournament_id": 88637,
    "tournament_name": "England. Premier League",
    "opp_1_name": "Arsenal",
    "opp_2_name": "Coventry City",
    "game_oc_counter": 278,
    "game_oc_list": [
      {
        "group_id": 19,
        "group_name": "Both Teams To Score",
        "columns": 2,
        "oc_list": [
          [
            {
              "oc_group_name": "Both Teams To Score",
              "oc_name": "Yes",
              "oc_rate": 3.336,
              "oc_size": 0,
              "oc_pointer": "746146992|19|180|0",
              "oc_block": false,
              "op_id": null
            }
          ],
          [
            {
              "oc_group_name": "Both Teams To Score",
              "oc_name": "No",
              "oc_rate": 1.33,
              "oc_size": 0,
              "oc_pointer": "746146992|19|181|0",
              "oc_block": false,
              "op_id": null
            }
          ]
        ]
      }
    ],
    "timer": 3376,
    "score_full": "3:0",
    "score_period": "2:0;1:0",
    "period_name": "period",
    "sub_games": [
      {
        "game_id": 746147013,
        "game_num": 150080,
        "game_name": "2nd half"
      },
      {
        "game_id": 746147010,
        "game_num": 205978,
        "game_name": "Corners"
      },
      {
        "game_id": 746147037,
        "game_num": 207011,
        "game_name": "Quick events"
      }
    ],
    "va": null,
    "vi": null,
    "zp": 746146992,
    "finale": false
  }
}
```

This is a shortened excerpt. The full response contains all match fields, 49 odds
markets, 13 submatches, and 15 statistics metrics.

## Top-level Response Fields

| Field | Type | Description |
|---|---|---|
| `status` | number | Request status. A successful response returns `1` |
| `page` | string | Method name. A specific match returns `/v1/event` |
| `body` | object | Detailed object of the selected match |

In `events`, `body` contains an array of tournaments. In `event`, `body` contains one
match object without an additional tournament wrapper.

## Main Match Fields

| Field | Type | Description |
|---|---|---|
| `game_id` | number | ID of the requested match or submatch |
| `game_mid` | number or `null` | Main match ID. For the main match, it usually equals `game_id` |
| `game_start` | number | Start time as a Unix timestamp in seconds |
| `sport_id` | number | Sport ID |
| `sport_name` | string | Sport name |
| `country_id` | number | Country ID |
| `country_name` | string | Country name |
| `tournament_id` | number | Tournament ID |
| `tournament_name` | string | Tournament name |
| `opp_1_name` | string | First team or participant |
| `opp_2_name` | string | Second team or participant |
| `timer` | number | Match timer in seconds. Divide by `60` to obtain minutes. Usually `0` in Prematch |
| `score_full` | string | Overall score |
| `score_period` | string | Current period score |
| `period_name` | string | Current period name |
| `game_oc_counter` | number | Total count of available bets or selections |
| `game_oc_list` | array | Complete available list of odds markets for the match |
| `sub_games` | array | References to available submatches |
| `va` | number or `null` | `1` — video is available; `null` — video is unavailable |
| `vi` | string or `null` | Video stream ID |
| `zp` | number or `null` | Live 3D Tracker ID |

The purpose, types, and allowed values of the remaining fields are documented in the
[field reference](../data-models/field-reference.md).

## Complete Odds List

Use `event` after the user selects a match from `events`:

```text
events → short list of the best odds
   ↓ user opens a match
event → complete available list of markets and selections
```

In the `group` format, `game_oc_list` is grouped and contains an additional nesting
level within `oc_list`:

```text
game_oc_list
└── betting market
    └── oc_list
        └── column
            └── selections and odds in this column
```

### Betting Market

| Field | Type | Description |
|---|---|---|
| `group_id` | number | Market ID |
| `group_name` | string | Market name |
| `columns` | number | Recommended number of display columns. It does not have to equal the number of nested `oc_list` arrays |
| `oc_list` | array of arrays | Selection columns in the market. Each nested array contains the selections and odds for one column |

### Selection

| Field | Type | Description |
|---|---|---|
| `oc_name` | string | Selection name |
| `oc_rate` | number | Odds value |
| `oc_size` | string or number | Handicap, total, or another parameter value |
| [`oc_pointer`](https://sportapi.net/docs/coupon/bet-placement/bet-pointer.html) | string | Primary bet or selection code. Used to pass the selected bet to the separate bet placement and settlement system |
| `oc_block` | boolean | `true` — the selection is blocked; `false` — it is available |
| `op_id` | number or `null` | Player or participant ID for a player-specific selection, when applicable |

The market list depends on the sport and the specific match. Do not build the interface
around fixed market names, counts, or order.

When counting and processing selections, account for both `oc_list` levels: first the
column array, then the selection array inside each column.

`game_oc_counter` may differ from the actual number of returned selections. Treat it as
an API counter and process selections from the contents of `game_oc_list`.

### Saved Match Data

| Response | Markets | Columns in `oc_list` | Selections | `game_oc_counter` |
|---|---:|---:|---:|---:|
| Live, `746146992` | 49 | 95 | 278 | 278 |
| Prematch, `730321837` | 204 | 387 | 1294 | 1337 |

These values apply only to the time when the responses were retrieved and change with
the sports line.

## Submatches

In a specific `event`, `sub_games` contains the available submatches. Examples include:

- a specific half;
- corners;
- yellow cards;
- fouls;
- player statistics;
- other available parts or variants of the match.

Each `sub_games` item contains:

| Field | Type | Description |
|---|---|---|
| `game_id` | number or `null` | Submatch ID |
| `game_num` | number or `null` | Legacy service field scheduled for removal |
| `game_name` | string or `null` | Submatch name |

The `sub_games` array itself does not contain odds. To retrieve the complete odds list
for a submatch, make another `event` request using its `game_id`.

### “Corners” Submatch Request Example

The main Live match `746146992` returned:

```json
{
  "game_id": 746147010,
  "game_num": 205978,
  "game_name": "Corners"
}
```

Submatch request:

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

The verified submatch response contains the following relevant identifiers and odds
count:

```json
{
  "game_id": 746147010,
  "game_mid": 746146992,
  "game_oc_counter": 175
}
```

The full verified response for this submatch contained 23 markets, 51 columns, and 166
selections. The `game_mid` field links the submatch to main match `746146992`.

The response also contains `game_dop_name` for the localized submatch name and
`game_desk` for the localized game segment name. Their text values depend on `lang`.

The saved full response was requested in Russian; localized text values depend on the
`lang` parameter:
[“Corners” submatch, Live, Russian](../examples/json-responses/event.subgame-746147010.corners.group.live.ru.json).

The complete relationship with the main match and the rules for using `sub_games` are
documented in [Submatches and Additional Matches](../data-models/sub-events.md).

## Group Matches and `event_plan`

The `event_plan` field is populated only in a specific `event` response. It is not used
in the `events` match list and is returned there as `[]`.

`event_plan` is intended for group matches. The main match may be named “Home — Away,”
while `event_plan` contains the complete list of specific teams playing for the home and
away sides. Each object describes one team pair and the time of its match.

| Field | Type | Description |
|---|---|---|
| `opp_1_name` | string | Team on the home side |
| `opp_2_name` | string | Team on the away side |
| `opp_1_id` | number or `null` | ID of the team on the home side |
| `opp_2_id` | number or `null` | ID of the team on the away side |
| `opp_1_country_id` | number or `null` | Country ID of the team on the home side |
| `opp_2_country_id` | number or `null` | Country ID of the team on the away side |
| `opp_1_icon` | string | Icon of the team on the home side |
| `opp_2_icon` | string | Icon of the team on the away side |
| `opp_1_date` | number or `null` | Home-side team date and time as a Unix timestamp |
| `opp_2_date` | number or `null` | Away-side team date and time as a Unix timestamp |
| `game_start` | number or `null` | Start time of this pair's match as a Unix timestamp |

Example with two team pairs inside a group match:

```json
"event_plan": [
  {
    "opp_1_name": "Anzoategui",
    "opp_2_name": "Trujillanos",
    "opp_1_id": 6354451,
    "opp_2_id": 2792,
    "opp_1_country_id": 41,
    "opp_2_country_id": 41,
    "opp_1_icon": "b85e2e3631e4b873b1d74975e6dd4e93.png",
    "opp_2_icon": "2792.png",
    "opp_1_date": 1787342400,
    "opp_2_date": 1787342400,
    "game_start": 1787342400
  },
  {
    "opp_1_name": "Caracas",
    "opp_2_name": "Carabobo",
    "opp_1_id": 2776,
    "opp_2_id": 29081,
    "opp_1_country_id": 41,
    "opp_2_country_id": 41,
    "opp_1_icon": "6309ee8475d59f87fff70fd08858e36f.png",
    "opp_2_icon": "56b11c23ac71e2f6934a7e0feb46dd5e.png",
    "opp_1_date": 1787353200,
    "opp_2_date": 1787353200,
    "game_start": 1787353200
  }
]
```

## Live and Prematch

The response structure is the same, but the data is populated differently.

Live usually updates:

- `timer`;
- `score_full` and `score_period`;
- `period_name`;
- `stat_list`;
- odds and `oc_block`;
- video and tracker availability.

In Prematch, the timer, score, period, and statistics usually contain initial or empty
values.

For the saved Live match, `zp` is `746146992`, so Live 3D Tracker is available and this
value can be passed to the tracker as `gameid`. Both `va` and `vi` are `null`, so no
video stream is provided for this match.

Detailed rules:

- [Live 3D Tracker in Sport Line API](../additional-services/live-3d-tracker.md);
- [Video Streaming in Sport Line API](../additional-services/video-streaming.md).

## Match No Longer Available

If the match disappears from the selected line type, the method may return:

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

The message does not explain the reason. The match may have ended, been cancelled, or
moved from Prematch to Live under a new `game_id`. Stop updating the previous ID after
receiving this response.

## Saved Full Responses

| Response | Match | Submatches | Odds markets |
|---|---|---:|---:|
| Live | Arsenal — Coventry City | 13 | 49 |
| Prematch | Manchester City — Bournemouth | 24 | 204 |

Full unabridged responses:

- [Live `746146992`, Russian](../examples/json-responses/event.game-746146992.group.live.ru.json)
- [Live `746146992`, English](../examples/json-responses/event.game-746146992.group.live.en.json)
- [Prematch `730321837`, Russian](../examples/json-responses/event.game-730321837.group.line.ru.json)
- [Prematch `730321837`, English](../examples/json-responses/event.game-730321837.group.line.en.json)
- [“Corners” submatch `746147010`, Russian](../examples/json-responses/event.subgame-746147010.corners.group.live.ru.json)

The files contain only API response bodies. No API key is stored in them.

## Update Frequency

Recommended request frequency for `event`:

- Live — no more than once every 5 seconds;
- Prematch (`line`) — no more than once every 30 seconds.

See [Data Update Guidelines](../getting-started/update-guidelines.md) for more details.

Key, subscription, and parameter errors are documented in
[Error Handling](../getting-started/error-handling.md).
