Skip to main content
Polling a REST endpoint for scores is fine for a leaderboard. For a live betting product it isn’t, you need to know the instant a score changes or a match goes live. This guide covers streaming live esports scores and status over WebSocket with the Esports Odds API.

Connect with the channels you need

channels is an allowlist, you receive only what you list. Add scores and status alongside odds:
wss://api.odds-api.io/v3/ws?apiKey=YOUR_KEY&channels=odds,scores,status
Leave channels off entirely and nothing changes from the legacy behaviour.

The scores channel

A message arrives on every score change:
{
  "type": "score",
  "id": "58231904",
  "status": "live",
  "scores": {
    "home": 2,
    "away": 1,
    "periods": { "p1": { "home": 1, "away": 0 } }
  }
}
Scores update in roughly one second, fast enough to drive a live scoreboard and to suspend markets on key moments.

The status channel

A message fires when a match is added, goes live, settles or is cancelled. On settle, the final score is included:
{
  "type": "status",
  "id": "58231904",
  "status": "settled",
  "scores": {
    "home": 2,
    "away": 1,
    "periods": { "ft": { "home": 2, "away": 1 } }
  }
}
Use status transitions to open markets when a match goes live and to settle the instant it ends, no polling required.

Mind the period keys

Period keys were renamed in the 2026 upgrade. Update your parser if you read period data:
MeaningOld keyNew key
Full-timefulltimeft
Overtimeovertimeot
Penalty/deciderap (new)
Live periods use p1, p2, and so on.

A minimal client

const ws = new WebSocket(
  "wss://api.odds-api.io/v3/ws?apiKey=YOUR_KEY&channels=odds,scores,status"
);

ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  switch (msg.type) {
    case "score":  return renderScore(msg.id, msg.scores);
    case "status": return msg.status === "settled"
      ? settleMarkets(msg.id, msg.scores)
      : updateStatus(msg.id, msg.status);
  }
};
Not ready for WebSocket yet? Scores are still available via the REST endpoint as before. When you are, start on the Esports Odds API, the same connection carries CS2, Valorant, LoL, Dota 2 and every other title.