Integration Overview

The PandaScore Low Latency Feed delivers live esports match data faster than public live streams, purpose-built for prediction bots, quant models, and professional betting applications.

📘

Available for: League of Legends · CS2 · Dota 2

Traditional broadcast streams (Twitch, YouTube) carry a 3–4 minute delay.

🚧

This product is not intended for public-facing redistribution or third-party data sharing. Internal usage only.


Server Location

📍Our servers are located in Belgium

Checking Match Availability

Upcoming matches

Each match has a low latency feed Boolean data point. This indicates whether the match should have low-latency data available.

You can filter match endpoints with ?filter[low_latency_feed]=true to receive all matches that should have this data feed. E.g.,

GET https://api.pandascore.co/matches?filter[low_latency_feed]=true

Running matches

Poll the discovery endpoint to retrieve every match currently available for low-latency streaming. The response displays matches scheduled to start within the next 15 minutes or already live.

GET https://api.pandascore.co/low_latency_feeds?token=YOUR_API_TOKEN

Connecting via WebSocket

The Low Latency Feed is delivered via a persistent WebSocket connection. Once connected, match state updates are pushed to your client as changes occur, with no polling required. Pass your API token as a query parameter on the connection URL. You can find your token in the PandaScore dashboard

GET wss://live.pandascore.co/matches/{MATCH_ID}/low_latency_feed?token={YOUR_API_TOKEN}

⚠️To get access to the Low Latency Feed, you must use the correct WebSocket URL:

  • ✅ wss://live.pandascore.co/matches/{MATCH_ID}/low_latency_feed
  • ❌ wss://live.pandascore.co/matches/{MATCH_ID} - This endpoint returns stream-synced data

Example connection:

const ws = new WebSocket(
  'wss://live.pandascore.co/matches/1400939/low_latency_feed?token=YOUR_API_TOKEN'
);

ws.onopen = () => {
  console.log('Connected to Low Latency Feed');
};

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('Match update:', data);
};

ws.onerror = (err) => {
  console.error('WebSocket error:', err);
};

ws.onclose = () => {
  console.log('Connection closed — implement reconnect logic here');
};

Connection Confirmation

Upon successfully connecting, you will receive a hello message confirming the match connection:

{
  "_type": "hello",
  "match_id": "1753729",
  "match_status": "running",
  "videogame": "dota2"
}
📘

Users are allowed a maximum of 3 simultaneous connections per match per endpoint.

Disconnections

Please follow this guide to understand WebSocket disconnection error types and how to handle them.

⚠️

Rare exception

In rare cases, a match may appear in /low_latency_feeds with an open WebSocket that delivers no data. This happens when data integrity issues prevent us from streaming reliable information for that specific match. The socket stays open but stays silent.

Status updates

Throughout the match lifecycle, you will receive match and game status updates.

Match Start

{
  "match_id": 1700484,
  "game_id": 232127,
  "game_status": "not_started",
  "match_status": "running",
  "updated_at": "2026-10-01T09:29:46.842223Z"
}

Game Start

{
  "match_id": 1700484,
  "game_id": 232127,
  "game_status": "running",
  "match_status": "running",
  "updated_at": "2026-10-01T09:29:46.842223Z"
}

Game End

{
  "match_id": 1700484,
  "game_id": 232127,
  "game_status": "finished",
  "match_status": "running",
  "updated_at": "2026-10-01T09:29:46.842223Z"
}

Match End

{
  "match_id": 1700484,
  "game_id": 232127,
  "game_status": "finished",
  "match_status": "finished",
  "updated_at": "2026-10-01T09:29:46.842223Z"
}

Did this page help you?