Overview

The PandaScore Low Latency Feed delivers live esports match data within ≤ 5 seconds of the game server, purpose-built for prediction bots, quant models, and professional betting applications that require the fastest possible signal.

📘

Available for: League of Legends · CS2 · Dota 2

Traditional broadcast streams (Twitch, YouTube) carry a 3–4 minute delay. The Low Latency Feed is in sync with our odds feed, meaning a < 5-second delay compared to game servers.

🚧

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


Checking Match Availability

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.

Poll the discovery endpoint to retrieve every match currently available for low-latency streaming.

Endpoint

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

What the response includes

  • Matches currently in progress with an active low-latency WebSocket. The WebSocket endpoint is displayed as endpoint.url.
  • Matches scheduled to start within the next 15 minutes. Users can connect to a match at this time - 15 minutes before the match's scheduled time.
[
    {
        "match": {
            "videogame": {
                "id": 3,
                "name": "Counter-Strike",
                "slug": "cs-go"
            },
            "results": [
                {
                    "team_id": 133719,
                    "score": 1
                },
                {
                    "team_id": 3210,
                    "score": 2
                }
            ],
            "winner_id": 3210,
            "live": {
                "supported": false,
                "url": null,
                "opens_at": null
            },
            "detailed_stats": true,
            "game_advantage": null,
            "games": [
                {
                    "complete": true,
                    "id": 216595,
                    "position": 1,
                    "status": "finished",
                    "length": 2423,
                    "finished": true,
                    "match_id": 1474571,
                    "begin_at": "2026-05-12T11:23:26Z",
                    "detailed_stats": true,
                    "end_at": "2026-05-12T12:03:49Z",
                    "forfeit": false,
                    "winner_type": "Team",
                    "winner": {
                        "id": 3210,
                        "type": "Team"
                    }
                },
                {
                    "complete": true,
                    "id": 216596,
                    "position": 2,
                    "status": "finished",
                    "length": 3584,
                    "finished": true,
                    "match_id": 1474571,
                    "begin_at": "2026-05-12T12:20:20Z",
                    "detailed_stats": true,
                    "end_at": "2026-05-12T13:20:05Z",
                    "forfeit": false,
                    "winner_type": "Team",
                    "winner": {
                        "id": 133719,
                        "type": "Team"
                    }
                },
                {
                    "complete": true,
                    "id": 216597,
                    "position": 3,
                    "status": "finished",
                    "length": 3638,
                    "finished": true,
                    "match_id": 1474571,
                    "begin_at": "2026-05-12T13:38:17Z",
                    "detailed_stats": true,
                    "end_at": "2026-05-12T14:38:55Z",
                    "forfeit": false,
                    "winner_type": "Team",
                    "winner": {
                        "id": 3210,
                        "type": "Team"
                    }
                }
            ],
            "original_scheduled_at": "2026-05-12T11:00:00Z",
            "tournament": {
                "id": 20902,
                "name": "Group Stage",
                "type": "offline",
                "country": "KZ",
                "begin_at": "2026-05-09T05:00:00Z",
                "detailed_stats": true,
                "end_at": null,
                "winner_id": null,
                "winner_type": "Team",
                "slug": "cs-go-pgl-astana-2026-group-stage",
                "serie_id": 10574,
                "modified_at": "2026-05-08T22:23:46Z",
                "league_id": 5365,
                "has_bracket": false,
                "prizepool": null,
                "region": "ASIA",
                "tier": "a",
                "live_supported": false
            },
            "league_id": 5365,
            "league": {
                "id": 5365,
                "name": "PGL",
                "url": null,
                "slug": "cs-go-pgl",
                "modified_at": "2025-02-05T15:08:30Z",
                "image_url": "https://cdn-api.pandascore.co/images/league/image/5365/800px-pgl_allmode-png-png"
            },
            "serie_id": 10574,
            "end_at": "2026-05-12T14:38:55Z",
            "forfeit": false,
            "slug": "2026-05-12-01e0d77a-e058-4b58-a3a1-79fe86dd64e1",
            "opponents": [
                {
                    "type": "Team",
                    "opponent": {
                        "id": 133719,
                        "name": "PARIVISION",
                        "location": "RU",
                        "slug": "parivision",
                        "modified_at": "2026-05-07T09:06:22Z",
                        "acronym": "PRV",
                        "dark_mode_image_url": null,
                        "image_url": "https://cdn-api.pandascore.co/images/team/image/133719/250px_parivision_allmode.png"
                    }
                },
                {
                    "type": "Team",
                    "opponent": {
                        "id": 3210,
                        "name": "G2 Esports",
                        "location": "DE",
                        "slug": "g2",
                        "modified_at": "2026-05-13T07:59:34Z",
                        "acronym": "G2",
                        "dark_mode_image_url": null,
                        "image_url": "https://cdn-api.pandascore.co/images/team/image/3210/5995.png"
                    }
                }
            ],
            "number_of_games": 3,
            "status": "finished",
            "tournament_id": 20902,
            "winner": {
                "id": 3210,
                "name": "G2 Esports",
                "location": "DE",
                "slug": "g2",
                "modified_at": "2026-05-13T07:59:34Z",
                "acronym": "G2",
                "dark_mode_image_url": null,
                "image_url": "https://cdn-api.pandascore.co/images/team/image/3210/5995.png"
            },
            "videogame_title": {
                "id": 13,
                "name": "Counter-Strike 2",
                "slug": "cs-2",
                "videogame_id": 3
            },
            "draw": false,
            "winner_type": "Team",
            "videogame_version": null,
            "scheduled_at": "2026-05-12T11:20:00Z",
            "begin_at": "2026-05-12T11:23:25Z",
            "serie": {
                "id": 10574,
                "name": "Astana",
                "year": 2026,
                "begin_at": "2026-05-09T05:00:00Z",
                "end_at": "2026-05-17T17:00:00Z",
                "winner_id": null,
                "winner_type": "Team",
                "slug": "cs-go-pgl-astana-2026",
                "modified_at": "2026-05-03T06:52:04Z",
                "league_id": 5365,
                "season": null,
                "full_name": "Astana 2026"
            },
            "id": 1474571,
            "name": "Round 4: PRV vs G2",
            "match_type": "best_of",
            "modified_at": "2026-05-12T17:00:06Z",
            "streams_list": [
                {
                    "main": false,
                    "language": "fr",
                    "embed_url": "https://player.twitch.tv/?channel=krl_stream2",
                    "official": false,
                    "raw_url": "https://www.twitch.tv/krl_stream2"
                },
                {
                    "main": false,
                    "language": "de",
                    "embed_url": "https://player.twitch.tv/?channel=zonixxcs",
                    "official": false,
                    "raw_url": "https://www.twitch.tv/zonixxcs"
                },
                {
                    "main": false,
                    "language": "sv",
                    "embed_url": "https://player.twitch.tv/?channel=olofmeister",
                    "official": false,
                    "raw_url": "https://www.twitch.tv/olofmeister"
                },
                {
                    "main": true,
                    "language": "en",
                    "embed_url": "https://player.twitch.tv/?channel=pgl_cs2",
                    "official": true,
                    "raw_url": "https://www.twitch.tv/pgl_cs2"
                },
                {
                    "main": false,
                    "language": "ru",
                    "embed_url": "https://www.youtube.com/embed/OSUfRyGif2k",
                    "official": false,
                    "raw_url": "https://www.youtube.com/watch?v=OSUfRyGif2k"
                }
            ],
            "rescheduled": true
        },
        "endpoint": {
            "url": "wss://live.pandascore.co/matches/1474571/low_latency_feed",
            "opens_at": "2026-05-12T11:05:00.000000Z"
        }
    }
]


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 - no polling required. Pass your API token as a query parameter on the connection URL. You can find your token in the PandaScore dashboard.

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",
    "payload": {
        "status": "running",
        "match_id": "1394934",
        "videogame": "csgo"
    }
}
📘

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.