# Betting - Live statistics

The statistics websocket contains a live 'stream' of the team and player actions happening within a match. This websocket is typically for clients wanting to integrate aggregated stats data to power live betting markets.

You should receive a new update any time a key action is completed and this websocket is crucial for powering live scores and match actions. The authentication token provided will be required to make a connection to this websocket endpoint. Once you have the API token, any further data that you send over the connection will be ignored. This endpoint sends heartbeats in-between data packets to let you know that it is still connected.

## Endpoint URL

## Aggregated live statistics

`CONNECT` `wss://dde-streams.data.imgarena.com/v2/tabletennis/fixtures/{fixtureId}/statistics`

#### Path Parameters

| Name                                        | Type | Description                       |
| ------------------------------------------- | ---- | --------------------------------- |
| fixtureId<mark style="color:red;">\*</mark> | UUID | Unique id of a requested fixture. |

#### Headers

| Name                                     | Type   | Description                                      |
| ---------------------------------------- | ------ | ------------------------------------------------ |
| Accept<mark style="color:red;">\*</mark> | String | application/vnd.imggaming.dde.api+json;version=1 |
| Connection                               | String | keep-alive                                       |

{% tabs %}
{% tab title="401: Unauthorized " %}

```javascript
{
    The supplied authentication is invalid
}
```

{% endtab %}

{% tab title="400: Bad Request " %}

```javascript
{
    Request is missing required HTTP header 'Accept'
}
```

{% endtab %}

{% tab title="200: OK " %}

```json
{
  "seqNum": 272,
  "traceId": "d8ae33159677210f0ae59770483c3c69",
  "version": 3,
  "finished": true,
  "fixtureId": "1bd00469-86fa-4f0b-abcc-30cbef80dacc",
  "timestamp": "2025-05-30T08:06:20.093872300Z",
  "teamActionAggregates": [
    {
      "team": {
        "id": "0222e701-d937-4250-8041-0f8ed8cf4a23",
        "name": "SIM_V2 - MUKHERJEE Ayhika/MUKHERJEE Sutirtha",
        "homeTeam": true
      },
      "gameActionAggregates": [
        {
          "action": "Swap Serve",
          "actionId": 1103,
          "actionAggregate": 24,
          "subActionAggregates": []
        },
        {
          "action": "Point Scored",
          "actionId": 1102,
          "actionAggregate": 47,
          "subActionAggregates": []
        },
        {
          "action": "Point Started",
          "actionId": 1101,
          "actionAggregate": 47,
          "subActionAggregates": []
        },
        {
          "action": "Game Point",
          "actionId": 1105,
          "actionAggregate": 5,
          "subActionAggregates": []
        },
        {
          "action": "Match Point",
          "actionId": 1108,
          "actionAggregate": 1,
          "subActionAggregates": []
        }
      ],
      "periodActionAggregates": [
        {
          "type": "Regular",
          "label": "5th Set",
          "period": 5,
          "aggregates": [
            {
              "action": "Swap Serve",
              "actionId": 1103,
              "actionAggregate": 4,
              "subActionAggregates": []
            },
            {
              "action": "Point Started",
              "actionId": 1101,
              "actionAggregate": 8,
              "subActionAggregates": []
            },
            {
              "action": "Point Scored",
              "actionId": 1102,
              "actionAggregate": 11,
              "subActionAggregates": []
            },
            {
              "action": "Match Point",
              "actionId": 1108,
              "actionAggregate": 1,
              "subActionAggregates": []
            }
          ]
        },
        {
          "type": "Regular",
          "label": "1st Set",
          "period": 1,
          "aggregates": [
            {
              "action": "Swap Serve",
              "actionId": 1103,
              "actionAggregate": 5,
              "subActionAggregates": []
            },
            {
              "action": "Point Scored",
              "actionId": 1102,
              "actionAggregate": 4,
              "subActionAggregates": []
            },
            {
              "action": "Point Started",
              "actionId": 1101,
              "actionAggregate": 7,
              "subActionAggregates": []
            }
          ]
        },
        {
          "type": "Regular",
          "label": "4th Set",
          "period": 4,
          "aggregates": [
            {
              "action": "Point Started",
              "actionId": 1101,
              "actionAggregate": 10,
              "subActionAggregates": []
            },
            {
              "action": "Point Scored",
              "actionId": 1102,
              "actionAggregate": 11,
              "subActionAggregates": []
            },
            {
              "action": "Swap Serve",
              "actionId": 1103,
              "actionAggregate": 4,
              "subActionAggregates": []
            },
            {
              "action": "Game Point",
              "actionId": 1105,
              "actionAggregate": 1,
              "subActionAggregates": []
            }
          ]
        },
        {
          "type": "Regular",
          "label": "3rd Set",
          "period": 3,
          "aggregates": [
            {
              "action": "Point Scored",
              "actionId": 1102,
              "actionAggregate": 10,
              "subActionAggregates": []
            },
            {
              "action": "Swap Serve",
              "actionId": 1103,
              "actionAggregate": 7,
              "subActionAggregates": []
            },
            {
              "action": "Point Started",
              "actionId": 1101,
              "actionAggregate": 12,
              "subActionAggregates": []
            },
            {
              "action": "Game Point",
              "actionId": 1105,
              "actionAggregate": 1,
              "subActionAggregates": []
            }
          ]
        },
        {
          "type": "Regular",
          "label": "2nd Set",
          "period": 2,
          "aggregates": [
            {
              "action": "Point Started",
              "actionId": 1101,
              "actionAggregate": 10,
              "subActionAggregates": []
            },
            {
              "action": "Point Scored",
              "actionId": 1102,
              "actionAggregate": 11,
              "subActionAggregates": []
            },
            {
              "action": "Swap Serve",
              "actionId": 1103,
              "actionAggregate": 4,
              "subActionAggregates": []
            },
            {
              "action": "Game Point",
              "actionId": 1105,
              "actionAggregate": 3,
              "subActionAggregates": []
            }
          ]
        }
      ],
      "playerActionAggregates": []
    },
    {
      "team": {
        "id": "e02e8cbb-7149-4f72-b69a-7896d06d390b",
        "name": "SIM_V2 - YILMAZ Ozge/HARAC Ece",
        "homeTeam": false
      },
      "gameActionAggregates": [
        {
          "action": "Point Started",
          "actionId": 1101,
          "actionAggregate": 50,
          "subActionAggregates": []
        },
        {
          "action": "Point Scored",
          "actionId": 1102,
          "actionAggregate": 48,
          "subActionAggregates": []
        },
        {
          "action": "Swap Serve",
          "actionId": 1103,
          "actionAggregate": 25,
          "subActionAggregates": []
        },
        {
          "action": "Game Point",
          "actionId": 1105,
          "actionAggregate": 2,
          "subActionAggregates": []
        }
      ],
      "periodActionAggregates": [
        {
          "type": "Regular",
          "label": "5th Set",
          "period": 5,
          "aggregates": [
            {
              "action": "Point Started",
              "actionId": 1101,
              "actionAggregate": 10,
              "subActionAggregates": []
            },
            {
              "action": "Point Scored",
              "actionId": 1102,
              "actionAggregate": 7,
              "subActionAggregates": []
            },
            {
              "action": "Swap Serve",
              "actionId": 1103,
              "actionAggregate": 4,
              "subActionAggregates": []
            }
          ]
        },
        {
          "type": "Regular",
          "label": "1st Set",
          "period": 1,
          "aggregates": [
            {
              "action": "Point Started",
              "actionId": 1101,
              "actionAggregate": 9,
              "subActionAggregates": []
            },
            {
              "action": "Point Scored",
              "actionId": 1102,
              "actionAggregate": 11,
              "subActionAggregates": []
            },
            {
              "action": "Swap Serve",
              "actionId": 1103,
              "actionAggregate": 4,
              "subActionAggregates": []
            },
            {
              "action": "Game Point",
              "actionId": 1105,
              "actionAggregate": 1,
              "subActionAggregates": []
            }
          ]
        },
        {
          "type": "Regular",
          "label": "4th Set",
          "period": 4,
          "aggregates": [
            {
              "action": "Point Scored",
              "actionId": 1102,
              "actionAggregate": 9,
              "subActionAggregates": []
            },
            {
              "action": "Swap Serve",
              "actionId": 1103,
              "actionAggregate": 6,
              "subActionAggregates": []
            },
            {
              "action": "Point Started",
              "actionId": 1101,
              "actionAggregate": 10,
              "subActionAggregates": []
            }
          ]
        },
        {
          "type": "Regular",
          "label": "3rd Set",
          "period": 3,
          "aggregates": [
            {
              "action": "Point Started",
              "actionId": 1101,
              "actionAggregate": 11,
              "subActionAggregates": []
            },
            {
              "action": "Point Scored",
              "actionId": 1102,
              "actionAggregate": 12,
              "subActionAggregates": []
            },
            {
              "action": "Swap Serve",
              "actionId": 1103,
              "actionAggregate": 5,
              "subActionAggregates": []
            },
            {
              "action": "Game Point",
              "actionId": 1105,
              "actionAggregate": 1,
              "subActionAggregates": []
            }
          ]
        },
        {
          "type": "Regular",
          "label": "2nd Set",
          "period": 2,
          "aggregates": [
            {
              "action": "Point Scored",
              "actionId": 1102,
              "actionAggregate": 9,
              "subActionAggregates": []
            },
            {
              "action": "Swap Serve",
              "actionId": 1103,
              "actionAggregate": 6,
              "subActionAggregates": []
            },
            {
              "action": "Point Started",
              "actionId": 1101,
              "actionAggregate": 10,
              "subActionAggregates": []
            }
          ]
        }
      ],
      "playerActionAggregates": []
    }
  ]
}
```

{% endtab %}
{% endtabs %}

## Authentication

We don't look at the header for websockets. Instead we expect the client to push through that auth message immediately on connecting in the following format.

```json
{"authToken": "ACCESS_TOKEN"}
```

## Request limits

IMG Arena monitors customer traffic to ensure it follows guidelines and isn't excessive. We recommend a request rate of 5 per second and encourage staying connected to websockets instead of repeated re-connections.

## Response Fields

<table data-header-hidden><thead><tr><th width="263">Property</th><th>Description</th></tr></thead><tbody><tr><td>seqNum<br><em><mark style="color:blue;">integer</mark></em></td><td>The sequence number</td></tr><tr><td>traceId<br><em><mark style="color:blue;">uuid</mark></em></td><td>Tracing Id for logs</td></tr><tr><td>version<br><em><mark style="color:blue;">integer</mark></em></td><td>The version number</td></tr><tr><td>finished<br><em><mark style="color:blue;">boolean</mark></em></td><td>Whether the match has finished or not<br>Values are <code>true</code> or <code>false</code></td></tr><tr><td>fixtureId<br><em><mark style="color:blue;">uuid</mark></em></td><td>The unique id of the match</td></tr><tr><td>timestamp<br><em><mark style="color:blue;">timestamp</mark></em></td><td>The timestamp of the file and it's usually the time the latest action update has happened</td></tr><tr><td>teamActionAggregates<br><a href="/pages/slv4huyNclTkTbdeSVM2"><em><mark style="color:blue;">teamActionAggregates []</mark></em></a></td><td>Aggregated player action statistics</td></tr><tr><td>advancedSportStatistics<br><a href="/pages/Z9AbNMjVP4NgW3AQcMEx"><em><mark style="color:blue;">advancedSportStatistics []</mark></em></a></td><td>Aggregated team sports statistics</td></tr></tbody></table>

The following data points are aggregated and returned in the statistics feed. These statistics are returned at game and period level.

| Action Statistic Name | Description                                         |
| --------------------- | --------------------------------------------------- |
| Point started         | The aggregation of point started packets for player |
| Point Scored          | The aggregation of point scored packets for player  |
| Swap serve            | The aggregation of swap serve                       |
| Game point            | The aggregation of game point                       |
| Match point           | The aggregation of match point                      |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.sportradar.com/table-tennis/table-tennis-multisport/live-websockets/betting-live-statistics.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
