Eurobet Data API

Eurobet API for Italian Pre-Match, Live & Racing Data

Access Eurobet's Italian sportsbook through one API — Serie A to Serie D, the Premier League, LaLiga, the Bundesliga, Ligue 1, the Champions League, the Brasileirão and the J1 League, the NBA and the Euroleague, the NFL, the NHL and the KHL, ATP, WTA, Challenger and ITF tennis and more across 17 sports, plus about two days of horse and harness racing cards. Every event carries its ADM programme and event code and its Betradar match ID, every market a canonical type and its ADM bet-type code, and the weekend's top flights run to more than 200 markets with anytime, first and last goalscorer. REST and WebSocket, one API key.

What a Eurobet API Response Looks Like

GET /api/eurobet-it/soccer/events/36421-1157
{
  "data": {
    "eventId": "36421-1157",
    "away": "Torino",
    "country": "Italia",
    "home": "Parma",
    "league": "Serie A",
    "live": false,
    "markets": [
      {
        "canonicalMarket": "MATCH_RESULT",
        "rawName": "SCOMMESSE TOP | 1X2",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME",
            "rawName": "1",
            "odds": 3,
            "rawOdds": "3.00",
            "isActive": true,
            "selectionId": "36421|1157|3|0|0|0|0|0|0|1"
          },
          {
            "canonicalOutcome": "DRAW",
            "rawName": "X",
            "odds": 3.05,
            "rawOdds": "3.05",
            "isActive": true,
            "selectionId": "36421|1157|3|0|0|0|0|0|0|2"
          },
          {
            "canonicalOutcome": "AWAY",
            "rawName": "2",
            "odds": 2.5,
            "rawOdds": "2.50",
            "isActive": true,
            "selectionId": "36421|1157|3|0|0|0|0|0|0|3"
          }
        ],
        "marketId": "36421|1157|3|0|0|0|0|0|0",
        "moreInfo": {
          "cs": 3
        }
      },
      {
        "canonicalMarket": "DOUBLE_CHANCE",
        "rawName": "DC",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME_DRAW",
            "rawName": "1X",
            "odds": 1.5,
            "rawOdds": "1.50",
            "isActive": true,
            "selectionId": "36421|1157|15|0|0|0|0|0|0|1"
          },
          {
            "canonicalOutcome": "DRAW_AWAY",
            "rawName": "X2",
            "odds": 1.37,
            "rawOdds": "1.37",
            "isActive": true,
            "selectionId": "36421|1157|16|0|0|0|0|0|0|2"
          },
          {
            "canonicalOutcome": "HOME_AWAY",
            "rawName": "12",
            "odds": 1.35,
            "rawOdds": "1.35",
            "isActive": true,
            "selectionId": "36421|1157|17|0|0|0|0|0|0|2"
          }
        ],
        "marketId": "36421|1157|DC|15+16+17",
        "moreInfo": {
          "cs": "15+16+17"
        }
      },
      {
        "canonicalMarket": "OVER_UNDER",
        "rawName": "SCOMMESSE TOP | U/O GOAL 2,5",
        "period": "FULL_TIME",
        "line": 2.5,
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "UNDER",
            "rawName": "UNDER",
            "odds": 1.55,
            "rawOdds": "1.55",
            "isActive": true,
            "selectionId": "36421|1157|7989|250|0|0|0|0|0|1",
            "line": 2.5
          },
          {
            "canonicalOutcome": "OVER",
            "rawName": "OVER",
            "odds": 2.3,
            "rawOdds": "2.30",
            "isActive": true,
            "selectionId": "36421|1157|7989|250|0|0|0|0|0|2",
            "line": 2.5
          }
        ],
        "marketId": "36421|1157|7989|250|0|0|0|0|0",
        "moreInfo": {
          "cs": 7989
        }
      },
      {
        "canonicalMarket": "BOTH_TEAMS_TO_SCORE",
        "rawName": "SCOMMESSE TOP | GG/NG",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "YES",
            "rawName": "GG",
            "odds": 1.92,
            "rawOdds": "1.92",
            "isActive": true,
            "selectionId": "36421|1157|18|0|0|0|0|0|0|1"
          },
          {
            "canonicalOutcome": "NO",
            "rawName": "NG",
            "odds": 1.8,
            "rawOdds": "1.80",
            "isActive": true,
            "selectionId": "36421|1157|18|0|0|0|0|0|0|2"
          }
        ],
        "marketId": "36421|1157|18|0|0|0|0|0|0",
        "moreInfo": {
          "cs": 18
        }
      },
      {
        "canonicalMarket": "EUROPEAN_HANDICAP",
        "rawName": "1X2 HANDICAP | 1:0",
        "period": "FULL_TIME",
        "line": 1,
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME",
            "rawName": "1",
            "odds": 1.5,
            "rawOdds": "1.50",
            "isActive": true,
            "selectionId": "36421|1157|8|-100|0|0|0|0|0|1",
            "line": 1
          },
          {
            "canonicalOutcome": "DRAW",
            "rawName": "X",
            "odds": 3.6,
            "rawOdds": "3.60",
            "isActive": true,
            "selectionId": "36421|1157|8|-100|0|0|0|0|0|2",
            "line": 1
          },
          {
            "canonicalOutcome": "AWAY",
            "rawName": "2",
            "odds": 5.6,
            "rawOdds": "5.60",
            "isActive": true,
            "selectionId": "36421|1157|8|-100|0|0|0|0|0|3",
            "line": 1
          }
        ],
        "marketId": "36421|1157|8|-100|0|0|0|0|0",
        "moreInfo": {
          "cs": 8
        }
      },
      {
        "canonicalMarket": "CORNERS_OVER_UNDER",
        "rawName": "U/O CORNER | 5.5",
        "period": "FULL_TIME",
        "line": 5.5,
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "UNDER",
            "rawName": "UNDER",
            "odds": 4.9,
            "rawOdds": "4.90",
            "isActive": true,
            "selectionId": "36421|1157|975|550|0|0|0|0|0|1",
            "line": 5.5
          },
          {
            "canonicalOutcome": "OVER",
            "rawName": "OVER",
            "odds": 1.11,
            "rawOdds": "1.11",
            "isActive": true,
            "selectionId": "36421|1157|975|550|0|0|0|0|0|2",
            "line": 5.5
          }
        ],
        "marketId": "36421|1157|975|550|0|0|0|0|0",
        "moreInfo": {
          "cs": 975
        }
      },
      {
        "canonicalMarket": "ANYTIME_GOALSCORER",
        "rawName": "MARCATORE | Bernabe Adrian",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "YES",
            "rawName": "SI",
            "odds": 6.8,
            "rawOdds": "6.80",
            "isActive": true,
            "selectionId": "36421|1157|9901|1|7|0|0|0|0|1"
          },
          {
            "canonicalOutcome": "NO",
            "rawName": "NO",
            "odds": 0,
            "isActive": false,
            "selectionId": "36421|1157|9901|1|7|0|0|0|0|2"
          }
        ],
        "marketId": "36421|1157|9901|1|7|0|0|0|0",
        "moreInfo": {
          "cs": 9901,
          "player": "Bernabe Adrian",
          "playerId": 1298050
        }
      }
    ],
    "moreInfo": {
      "meetingCode": 21,
      "betsNumber": 5080,
      "betradarId": "71945318",
      "homeId": 19257,
      "awayId": 17192
    },
    "slug": "/it/scommesse/calcio/it-serie-a/parma-torino-202610192045",
    "sport": "soccer",
    "startTime": "2026-10-19T18:45:00.000Z"
  }
}

In-Play — Sets, Game Points & Serve

GET /api/eurobet-it/live-events?sport=tennis&limit=1
{
  "total": 19,
  "page": 1,
  "limit": 1,
  "totalPages": 19,
  "hasNextPage": true,
  "hasPrevPage": false,
  "sport": "tennis",
  "events": [
    {
      "eventId": "36426-48707",
      "away": "Dellavedova Matthew",
      "country": "Itf",
      "home": "Weber Arthur",
      "league": "ITF Cina",
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "T/T (ESCL. RITIRO)",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "1",
              "odds": 1.35,
              "rawOdds": "1.35",
              "isActive": true,
              "selectionId": "36426|48707|20540|0|0|0|0|0|0|1"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "2",
              "odds": 2.8,
              "rawOdds": "2.80",
              "isActive": true,
              "selectionId": "36426|48707|20540|0|0|0|0|0|0|2"
            }
          ],
          "marketId": "36426|48707|20540|0|0|0|0|0|0",
          "moreInfo": {
            "cs": 20540
          }
        },
        {
          "canonicalMarket": "SET_WINNER",
          "rawName": "T/T SET (ESCL. RITIRO) | T/T SET (ESCL. RITIRO) SET 2",
          "period": "SECOND_SET",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "1",
              "odds": 1.9,
              "rawOdds": "1.90",
              "isActive": true,
              "selectionId": "36426|48707|22368|2|0|0|0|0|0|1"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "2",
              "odds": 1.75,
              "rawOdds": "1.75",
              "isActive": true,
              "selectionId": "36426|48707|22368|2|0|0|0|0|0|2"
            }
          ],
          "marketId": "36426|48707|22368|2|0|0|0|0|0",
          "moreInfo": {
            "cs": 22368
          }
        },
        {
          "canonicalMarket": "SET_WINNER",
          "rawName": "T/T SET (ESCL. RITIRO) | SET 3",
          "period": "THIRD_SET",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "1",
              "odds": 2.25,
              "rawOdds": "2.25",
              "isActive": true,
              "selectionId": "36426|48707|22368|3|0|0|0|0|0|1"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "2",
              "odds": 1.52,
              "rawOdds": "1.52",
              "isActive": true,
              "selectionId": "36426|48707|22368|3|0|0|0|0|0|2"
            }
          ],
          "marketId": "36426|48707|22368|3|0|0|0|0|0",
          "moreInfo": {
            "cs": 22368
          }
        },
        {
          "canonicalMarket": "SET_BETTING",
          "rawName": "SET BETTING 3",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "OTHER",
              "rawName": "2-0",
              "odds": 1.75,
              "rawOdds": "1.75",
              "isActive": true,
              "selectionId": "36426|48707|51|0|0|0|0|0|0|1"
            },
            {
              "canonicalOutcome": "OTHER",
              "rawName": "2-1",
              "odds": 4.2,
              "rawOdds": "4.20",
              "isActive": true,
              "selectionId": "36426|48707|51|0|0|0|0|0|0|2"
            },
            {
              "canonicalOutcome": "OTHER",
              "rawName": "1-2",
              "odds": 2.9,
              "rawOdds": "2.90",
              "isActive": true,
              "selectionId": "36426|48707|51|0|0|0|0|0|0|3"
            },
            {
              "canonicalOutcome": "OTHER",
              "rawName": "0-2",
              "odds": 0,
              "isActive": false,
              "selectionId": "36426|48707|51|0|0|0|0|0|0|4"
            }
          ],
          "marketId": "36426|48707|51|0|0|0|0|0|0",
          "moreInfo": {
            "cs": 51
          }
        }
      ],
      "matchClock": {
        "period": "Set 2",
        "periodId": "SET_2",
        "running": true
      },
      "moreInfo": {
        "meetingCode": 690,
        "timeLive": "Set 2, Game 2",
        "betradarId": "999828391"
      },
      "slug": "/it/scommesse-live/tennis/cn-itf-cina/weber-arthur-dellavedova-matthew-202610160721",
      "sport": "tennis",
      "startTime": "2026-10-16T05:21:00.000Z",
      "periodScores": {
        "home": [
          7,
          0
        ],
        "away": [
          6,
          1
        ],
        "labels": [
          "1",
          "2"
        ]
      },
      "score": {
        "home": "1",
        "away": "0",
        "info": "0-0"
      },
      "statistics": {
        "sets": {
          "home": [
            7,
            0
          ],
          "away": [
            6,
            1
          ],
          "homeServe": true
        }
      }
    }
  ]
}

Racing — Win and Place Prices with Jockeys and Trainers

GET /api/eurobet-it/horse-racing/races/1509955
{
  "data": {
    "id": "1509955",
    "EW": "",
    "active": "true",
    "country": "United Kingdom",
    "horses": [
      {
        "id": "4224908",
        "number": "1",
        "name": "Woolisle",
        "jockey": "H Crouch",
        "trainer": "H Main",
        "active": true,
        "EW": {
          "status": "active",
          "fractional": "",
          "decimal": "14.5"
        },
        "markets": [
          {
            "rawName": "Place (2)",
            "decimal": 6.5
          },
          {
            "rawName": "Place (3)",
            "decimal": 4.15
          },
          {
            "rawName": "Place (4)",
            "decimal": 2.95
          }
        ]
      },
      {
        "id": "4102535",
        "number": "2",
        "name": "Vingegaard",
        "jockey": "Billy Loughnane",
        "trainer": "P T Midgley",
        "active": true,
        "EW": {
          "status": "active",
          "fractional": "",
          "decimal": "11.5"
        },
        "markets": [
          {
            "rawName": "Place (2)",
            "decimal": 5.3
          },
          {
            "rawName": "Place (3)",
            "decimal": 3.5
          },
          {
            "rawName": "Place (4)",
            "decimal": 2.55
          }
        ]
      },
      {
        "id": "4039445",
        "number": "3",
        "name": "Charlie Mason",
        "jockey": "Rossa Ryan",
        "trainer": "A W Carroll",
        "active": true,
        "EW": {
          "status": "active",
          "fractional": "",
          "decimal": "10.5"
        },
        "markets": [
          {
            "rawName": "Place (2)",
            "decimal": 4.95
          },
          {
            "rawName": "Place (3)",
            "decimal": 3.25
          },
          {
            "rawName": "Place (4)",
            "decimal": 2.45
          }
        ]
      }
    ],
    "isInPlay": "false",
    "meetingId": "177150",
    "name": "Haydock R7 Shape Engineering Handicap",
    "settled": false,
    "slug": "https://hts-eurobet.mstchannel.com/pages/race/1509955?cID=AC3FA1BC-BAF6-4CA1-9D03-2C6FA7FE73F1",
    "startDate": "2026-10-16T16:07:00.000Z"
  }
}

Why Use PulseScore for Eurobet Data

Weekend Boards of 200+ Markets

The weekend's top flights run 195 to 274 markets a fixture — the Brasileirão, the J1 League, Liga MX, the Eredivisie, the Bundesliga, LaLiga, Serie A and B, the Championship, Ligue 1 and the Premier League — with a 25-score correct score, every half market and corners on the marquee games. Every line is a market of its own with a canonical type.

Anytime, First and Last Goalscorer

On 205 fixtures of the top leagues Eurobet prices about 140 player markets each — anytime, first and last goalscorer, one market per player with the player's name and Eurobet's player ID in moreInfo. On a deep weekend board about three in five markets are goalscorer markets.

One Key Across Italy's Books

eventId is the ADM programme and event code, moreInfo.betradarId the Betradar match ID on every fixture and moreInfo.cs the ADM bet-type code — the catalogue Sisal and Eplay24 use too (the 1X2 is 3 and U/O goals 7989 on all three), so Eurobet lines up against the other Italian books market by market without matching names.

Canonical Markets Only

Every stored market maps to a canonical type: Eurobet's combos, bands, minute windows and specials are not collected, so there is no OTHER on any board, every selection carries a canonicalOutcome and line holds the home side's number — even though Eurobet prints its handicaps from the away side.

Horse and Harness Racing Cards

About two days of horse racing — 550 races from the USA, Chile, Turkey, Australia, the UK, Korea, Italy, Ireland and more — and Swedish, Italian, French and Danish trotting, every runner with jockey, trainer and status, and fixed win and place prices on the cards Eurobet prices.

REST Plus WebSocket Streaming

Poll the REST endpoints for prematch boards, leagues and racing cards, or subscribe over WebSocket for in-play pushes roughly every second. All 17 sports are subscribable on PRO, MAX and ULTRA plans, and one PulseScore API key works across Eurobet and every other bookmaker on the platform.

Frequently Asked Questions

What data does the Eurobet API provide?

PulseScore provides pre-match and live odds from Eurobet's Italian sportsbook (eurobet.it) across 17 sports, plus about two days of horse and harness racing cards. Events carry normalized market data with canonical market types and outcomes, decimal odds, the league and country, the ADM programme and event code as the eventId, the Betradar match ID, Eurobet's competition and team IDs and the eurobet.it page slug.

Which sports are covered?

Seventeen: Soccer, Basketball, Tennis, Ice Hockey, American Football, Handball, Volleyball, Rugby Union, Baseball, Australian Rules, Cricket, Darts, Boxing, Badminton, Table Tennis, Padel and Esports (League of Legends), plus horse and harness racing. Cricket, boxing, badminton and table tennis carry the winner only, and Eurobet's single rugby sport also holds the Rugby League World Cup. The smaller sports carry a handful of fixtures at a time, so call /sport-availability for what is on right now rather than hard-coding the list.

How deep are the Eurobet soccer boards?

Deep on the next days' fixtures. The weekend's top flights ran 195 to 274 markets a fixture — the Brasileirão up to 274, Liga MX 260, the J1 League 258, the Bundesliga 250, LaLiga 246, Serie A 236 and the Premier League 225 — about three in five of them goalscorer markets. Fixtures further out sit lower (the next Champions League matchday, four to five days ahead, at 26 to 84), and most other leagues at a flat 50 to 99. Thirty-four canonical market types are mapped and there is no OTHER.

What language is the board in?

Italian. Markets read 1X2, DC (double chance), U/O GOAL, GG/NG (both teams to score), 1X2 HANDICAP, RISULTATO ESATTO (correct score), SOMMA GOAL (exact goals), 1T/FINALE (half-time/full-time), SEGNA GOAL (first team to score), MARCATORE (goalscorer) and T/T (head-to-head); selections read 1, X and 2, UNDER and OVER, GG and NG, SI and NO, PARI and DISPARI. Team names use Italian exonyms — Bayern Monaco, Lipsia, Stoccarda, Siviglia, Sporting Lisbona — and countries are Italian (Inghilterra, Germania, Spagna). Read canonicalMarket and canonicalOutcome rather than the raw labels.

How do Eurobet's handicap lines work?

line always holds the home side's number. On two-way handicaps — basketball, American football, baseball, rugby, tennis games and sets, volleyball points and the hockey puck line — the HOME selection carries the home line and the AWAY selection the opposite, and Eurobet prints the away side's number: T/T HANDICAP | -6.5 is the home side's +6.5. On three-way handicaps a:b is the score the home side starts from: 1X2 HANDICAP | 1:0 is the home side's +1. Trust line, not the number in rawName.

What is the Eurobet eventId?

The ADM programme and event code as a string — <programme>-<event>, such as 36421-1157. Sisal numbers its events the same way, and about three quarters of the soccer fixtures both books list carry the same eventId on both. Every prematch event also carries moreInfo.betradarId, the Betradar match ID, which is the reliable join key: it is Eplay24's eventId and Sisal's moreInfo.betradarId. marketId and selectionId are built from the eventId and the ADM codes and are unique across the whole board.

Can I compare Eurobet with Sisal and Eplay24 market by market?

Yes. Each market's moreInfo.cs is the ADM bet-type code — the catalogue Sisal (moreInfo.cs) and Eplay24 (moreInfo.betTypeId) use too: the 1X2 is 3 and U/O goals 7989 on all three books. With moreInfo.betradarId for the event and the code plus line for the market, the three Italian books line up without matching team or market names.

What racing is included?

About two days of horse racing — 550 races at the snapshot from 16 countries, led by the USA, Chile, Turkey, Australia and the UK — and harness racing from Sweden, Italy, France and Denmark, each runner with number, name, jockey, trainer and status. Fixed win prices (EW.decimal) and place prices (Place (2) to Place (4)) fill on the cards Eurobet prices — the day's UK races and the Australian and Korean cards at the snapshot — while the other cards are listed without prices.

Is live in-play data available?

Yes — /api/eurobet-it/live-events over HTTP and a WebSocket for streaming. Live documents keep the prematch eventId and carry the in-play board, the score as strings (the sets won on tennis, volleyball and padel, with the game points on tennis), the match clock with a machine period code, per-period scores and set statistics. Eurobet publishes no push feed, so its in-play list is polled about every 8 seconds; live retention is 120 seconds.

Does the Eurobet API include results?

No. Eurobet publishes no results or archive section and its in-play feed does not say when most matches end, so there is no /results route on this book: a match leaves /live-events as soon as Eurobet takes it off its in-play list. For final scores of the same matches, join on moreInfo.betradarId with the results archive of Sisal or Eplay24.

How do I connect to the Eurobet WebSocket?

Open wss://api.pulsescore.net/api/eurobet-it/ws/live?key=YOUR_KEY&sport=soccer. The sport parameter is kebab-case (ice-hockey, table-tennis, american-football, australian-rules) and all 17 sports are valid. The server sends a connected frame with your plan and the valid sport list, then pushes live events roughly every second. WebSocket access requires PRO, MAX or ULTRA.

How often is the data updated?

Every competition is re-listed with its top markets every 5 to 30 minutes, more often as its next match nears, and each fixture's full board is re-read about every 5 minutes in the last half hour before kick-off, then every 15 and 30 minutes, hourly within a day and every two hours further out. In play, the list is read about every 8 seconds and each match's board about once a minute, pushed over WebSocket roughly every second. Prematch fixtures leave at the scheduled start, live events as soon as Eurobet drops them, and racing cards about an hour after the result.

Can I use this data commercially?

Yes. PulseScore plans cover commercial use — odds comparison sites, trading models, in-play dashboards and internal tooling. Rate limits and WebSocket connection counts scale with the plan, and one API key works across Eurobet and every other bookmaker on the platform.

Start Using the Eurobet API Today

Free tier available. No credit card required. Get your API key in 30 seconds.