Betpoint Data API

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

Access Betpoint's Italian sportsbook through one API — Serie A to Serie D, the Premier League, LaLiga, the Bundesliga, Ligue 1, the Champions, Europa and Conference Leagues, the MLS and the Brasileirão, the NBA and the Euroleague, the NFL, the NHL and the KHL, ATP, WTA, Challenger and ITF tennis and more across 16 sports, plus horse and harness racing. 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 top flights run to 100–129 markets weeks ahead, with Asian handicaps and quarter-line totals. REST and WebSocket, one API key.

What a Betpoint API Response Looks Like

GET /api/betpoint-it/soccer/events/36431-1001
{
  "data": {
    "eventId": "36431-1001",
    "away": "Roma",
    "country": "ITALIA",
    "home": "Napoli",
    "league": "SERIE A",
    "live": false,
    "markets": [
      {
        "canonicalMarket": "MATCH_RESULT",
        "rawName": "1X2 FINALE",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME",
            "rawName": "1",
            "odds": 2.82,
            "rawOdds": "2.82",
            "isActive": true,
            "selectionId": "36431-1001-3-0-1"
          },
          {
            "canonicalOutcome": "DRAW",
            "rawName": "X",
            "odds": 3.3,
            "rawOdds": "3.30",
            "isActive": true,
            "selectionId": "36431-1001-3-0-2"
          },
          {
            "canonicalOutcome": "AWAY",
            "rawName": "2",
            "odds": 2.52,
            "rawOdds": "2.52",
            "isActive": true,
            "selectionId": "36431-1001-3-0-3"
          }
        ],
        "marketId": "36431-1001-3-0",
        "moreInfo": {
          "cs": 3,
          "ia": 0
        }
      },
      {
        "canonicalMarket": "DOUBLE_CHANCE",
        "rawName": "DOPPIA CHANCE",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME_DRAW",
            "rawName": "1X",
            "odds": 1.45,
            "rawOdds": "1.45",
            "isActive": true,
            "selectionId": "36431-1001-28319-0-1"
          },
          {
            "canonicalOutcome": "HOME_AWAY",
            "rawName": "12",
            "odds": 1.29,
            "rawOdds": "1.29",
            "isActive": true,
            "selectionId": "36431-1001-28319-0-2"
          },
          {
            "canonicalOutcome": "DRAW_AWAY",
            "rawName": "X2",
            "odds": 1.38,
            "rawOdds": "1.38",
            "isActive": true,
            "selectionId": "36431-1001-28319-0-3"
          }
        ],
        "marketId": "36431-1001-28319-0",
        "moreInfo": {
          "cs": 28319,
          "ia": 0
        }
      },
      {
        "canonicalMarket": "OVER_UNDER",
        "rawName": "U/O 2.5",
        "period": "FULL_TIME",
        "line": 2.5,
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "UNDER",
            "rawName": "UNDER",
            "odds": 1.9,
            "rawOdds": "1.90",
            "isActive": true,
            "selectionId": "36431-1001-7989-250-1",
            "line": 2.5
          },
          {
            "canonicalOutcome": "OVER",
            "rawName": "OVER",
            "odds": 1.8,
            "rawOdds": "1.80",
            "isActive": true,
            "selectionId": "36431-1001-7989-250-2",
            "line": 2.5
          }
        ],
        "marketId": "36431-1001-7989-250",
        "moreInfo": {
          "cs": 7989,
          "ia": 250
        }
      },
      {
        "canonicalMarket": "OVER_UNDER",
        "rawName": "U/O COMPOSTA (2.50:3.00)",
        "period": "FULL_TIME",
        "line": 2.75,
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "UNDER",
            "rawName": "UNDER",
            "odds": 1.68,
            "rawOdds": "1.68",
            "isActive": true,
            "selectionId": "36431-1001-18233-19661050-1",
            "line": 2.75
          },
          {
            "canonicalOutcome": "OVER",
            "rawName": "OVER",
            "odds": 2.05,
            "rawOdds": "2.05",
            "isActive": true,
            "selectionId": "36431-1001-18233-19661050-2",
            "line": 2.75
          }
        ],
        "marketId": "36431-1001-18233-19661050",
        "moreInfo": {
          "cs": 18233,
          "ia": 19661050
        }
      },
      {
        "canonicalMarket": "ASIAN_HANDICAP",
        "rawName": "T/T H 1 (0:0)",
        "period": "FULL_TIME",
        "line": 1,
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME",
            "rawName": "1",
            "odds": 1.2,
            "rawOdds": "1.20",
            "isActive": true,
            "selectionId": "36431-1001-27985-65536-1",
            "line": 1
          },
          {
            "canonicalOutcome": "AWAY",
            "rawName": "2",
            "odds": 4,
            "rawOdds": "4.00",
            "isActive": true,
            "selectionId": "36431-1001-27985-65536-2",
            "line": -1
          }
        ],
        "marketId": "36431-1001-27985-65536",
        "moreInfo": {
          "cs": 27985,
          "ia": 65536
        }
      },
      {
        "canonicalMarket": "BOTH_TEAMS_TO_SCORE",
        "rawName": "GOL/NO GOL",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "YES",
            "rawName": "GOAL",
            "odds": 1.62,
            "rawOdds": "1.62",
            "isActive": true,
            "selectionId": "36431-1001-18-0-1"
          },
          {
            "canonicalOutcome": "NO",
            "rawName": "NOGOAL",
            "odds": 2.18,
            "rawOdds": "2.18",
            "isActive": true,
            "selectionId": "36431-1001-18-0-2"
          }
        ],
        "marketId": "36431-1001-18-0",
        "moreInfo": {
          "cs": 18,
          "ia": 0
        }
      },
      {
        "canonicalMarket": "EUROPEAN_HANDICAP",
        "rawName": "1X2 H 1",
        "period": "FULL_TIME",
        "line": -1,
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME",
            "rawName": "1",
            "odds": 5.8,
            "rawOdds": "5.80",
            "isActive": true,
            "selectionId": "36431-1001-8-100-1",
            "line": -1
          },
          {
            "canonicalOutcome": "DRAW",
            "rawName": "X",
            "odds": 4.6,
            "rawOdds": "4.60",
            "isActive": true,
            "selectionId": "36431-1001-8-100-2",
            "line": -1
          },
          {
            "canonicalOutcome": "AWAY",
            "rawName": "2",
            "odds": 1.39,
            "rawOdds": "1.39",
            "isActive": true,
            "selectionId": "36431-1001-8-100-3",
            "line": -1
          }
        ],
        "marketId": "36431-1001-8-100",
        "moreInfo": {
          "cs": 8,
          "ia": 100
        }
      }
    ],
    "moreInfo": {
      "competitionId": 21,
      "disciplineCode": 1,
      "betradarId": "71945340"
    },
    "slug": "https://scommesse.betpoint.it/Prematch/index.html?app=10&tipoView=desktop&skin=BPP&conc=15131&vhf=false&tipotag=12#/CercaQuote/1/21/36431/1001",
    "sport": "soccer",
    "startTime": "2026-10-24T16:00:00.000Z"
  }
}

In-Play — Score, Clock & Goalscorer Markets

GET /api/betpoint-it/live-events?sport=soccer&limit=1
{
  "total": 29,
  "page": 1,
  "limit": 1,
  "totalPages": 29,
  "hasNextPage": true,
  "hasPrevPage": false,
  "sport": "soccer",
  "events": [
    {
      "eventId": "36431-7192",
      "away": "Sunderland",
      "home": "Lech Poznan",
      "league": "EUROPA LEAGUE",
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "1X2 FINALE",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "1",
              "odds": 17,
              "rawOdds": "17.00",
              "isActive": true,
              "selectionId": "36431-7192-3-0-1"
            },
            {
              "canonicalOutcome": "DRAW",
              "rawName": "X",
              "odds": 5.2,
              "rawOdds": "5.20",
              "isActive": true,
              "selectionId": "36431-7192-3-0-2"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "2",
              "odds": 1.2,
              "rawOdds": "1.20",
              "isActive": true,
              "selectionId": "36431-7192-3-0-3"
            }
          ],
          "marketId": "36431-7192-3-0",
          "moreInfo": {
            "cs": 3,
            "ia": 0
          }
        },
        {
          "canonicalMarket": "OVER_UNDER",
          "rawName": "U/O 2.5",
          "period": "FULL_TIME",
          "line": 2.5,
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "UNDER",
              "rawName": "UNDER",
              "odds": 1.6,
              "rawOdds": "1.60",
              "isActive": true,
              "selectionId": "36431-7192-7989-250-1",
              "line": 2.5
            },
            {
              "canonicalOutcome": "OVER",
              "rawName": "OVER",
              "odds": 2.15,
              "rawOdds": "2.15",
              "isActive": true,
              "selectionId": "36431-7192-7989-250-2",
              "line": 2.5
            }
          ],
          "marketId": "36431-7192-7989-250",
          "moreInfo": {
            "cs": 7989,
            "ia": 250
          }
        },
        {
          "canonicalMarket": "BOTH_TEAMS_TO_SCORE",
          "rawName": "GOL/NO GOL",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "YES",
              "rawName": "GOAL",
              "odds": 2.2,
              "rawOdds": "2.20",
              "isActive": true,
              "selectionId": "36431-7192-18-0-1"
            },
            {
              "canonicalOutcome": "NO",
              "rawName": "NOGOAL",
              "odds": 1.6,
              "rawOdds": "1.60",
              "isActive": true,
              "selectionId": "36431-7192-18-0-2"
            }
          ],
          "marketId": "36431-7192-18-0",
          "moreInfo": {
            "cs": 18,
            "ia": 0
          }
        },
        {
          "canonicalMarket": "ANYTIME_GOALSCORER",
          "rawName": "Fofana Malick (SUN) MARCATORE",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "YES",
              "rawName": "SI",
              "odds": 5.6,
              "rawOdds": "5.60",
              "isActive": true,
              "selectionId": "36431-7192-9901-131089-1"
            }
          ],
          "marketId": "36431-7192-9901-131089",
          "moreInfo": {
            "cs": 9901,
            "ia": 131089,
            "player": "Fofana Malick"
          }
        },
        {
          "canonicalMarket": "PLAYER_TO_SCORE_2_PLUS",
          "rawName": "Fofana Malick (SUN) SEGNA DOPPIETTA",
          "period": "FULL_TIME",
          "line": 2,
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "YES",
              "rawName": "SI",
              "odds": 80,
              "rawOdds": "80.00",
              "isActive": true,
              "selectionId": "36431-7192-14135-131089-1",
              "line": 2
            }
          ],
          "marketId": "36431-7192-14135-131089",
          "moreInfo": {
            "cs": 14135,
            "ia": 131089,
            "player": "Fofana Malick"
          }
        }
      ],
      "matchClock": {
        "running": true,
        "period": "2nd Half",
        "periodId": "PART_2",
        "minute": 57,
        "second": 36
      },
      "moreInfo": {
        "competitionId": 153,
        "disciplineCode": 1,
        "betradarId": "74172994",
        "periodText": "2° tempo",
        "stato": 1
      },
      "slug": "https://scommesse.betpoint.it/Live/index.html?app=11&tipoView=desktop&skin=BPP&conc=15131&vhf=false&tipotag=12#/SingleEventPageNew/1_36431_7192",
      "sport": "soccer",
      "startTime": "2026-10-22T16:45:00.000Z",
      "periodScores": {
        "home": [
          0,
          0
        ],
        "away": [
          1,
          0
        ],
        "labels": [
          "1",
          "2"
        ]
      },
      "score": {
        "home": "0",
        "away": "1"
      }
    }
  ]
}

Racing — Win and Place Prices with Jockeys and Trainers

GET /api/betpoint-it/horse-racing/races/1512220
{
  "data": {
    "id": "1512220",
    "EW": "",
    "active": "true",
    "country": "Turkey",
    "horses": [
      {
        "id": "1226991",
        "number": "1",
        "name": "Kral Karaca",
        "jockey": "N.AVCI",
        "trainer": "M.A.PAKEL",
        "active": true,
        "EW": {
          "status": "active",
          "fractional": "",
          "decimal": "2.37"
        },
        "markets": [
          {
            "rawName": "Place (2)",
            "decimal": 1.5
          },
          {
            "rawName": "Place (3)",
            "decimal": 1.22
          }
        ]
      },
      {
        "id": "1226993",
        "number": "2",
        "name": "Zafer Yildizi",
        "jockey": "Y.GÖKÇE",
        "trainer": "M.YAPAROGLU",
        "active": true,
        "EW": {
          "status": "active",
          "fractional": "",
          "decimal": "4.33"
        },
        "markets": [
          {
            "rawName": "Place (2)",
            "decimal": 2.1
          },
          {
            "rawName": "Place (3)",
            "decimal": 1.47
          }
        ]
      },
      {
        "id": "1226988",
        "number": "3",
        "name": "Kurushan",
        "jockey": "Ö.F.ÖZEN",
        "trainer": "Z.TURGUL",
        "active": true,
        "EW": {
          "status": "active",
          "fractional": "",
          "decimal": "3.5"
        },
        "markets": [
          {
            "rawName": "Place (2)",
            "decimal": 1.85
          },
          {
            "rawName": "Place (3)",
            "decimal": 1.35
          }
        ]
      }
    ],
    "isInPlay": "false",
    "meetingId": "177430",
    "name": "Izmir R7 Race 7 - Handicap 15",
    "onlySP": true,
    "settled": false,
    "slug": "https://hts-betpoint.mstchannel.com/pages/race/1512220?cID=522328EA-C271-4CBA-8A36-12D1735BEBE1",
    "startDate": "2026-10-22T18:00:00.000Z"
  }
}

Why Use PulseScore for Betpoint Data

100–129 Markets Weeks Ahead

Betpoint sets depth per competition and keeps it: the Conference, Europa and Champions League, Serie A, the Bundesliga, the Premier League, LaLiga, Ligue 1 and the Championship run 100 to 129 markets a fixture, the Champions League matchday two weeks out included. Every line is a market of its own with a canonical type.

Asian Handicaps and Quarter Lines

Unlike most Italian books, Betpoint prices Asian handicaps on whole, half and quarter lines and totals on whole-goal and quarter lines (U/O COMPOSTA, stored as 2.75) beside the classic half-goal ladder, on about 850 soccer fixtures, plus corners on 288.

One Key Across Italy's Books

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

In-Play Goalscorer Markets

The deep in-play boards on the top European matches add anytime goalscorer, two or more and hat-trick markets for every player, up to 217 markets a match, with the running score, the match clock to the second and per-period scores.

Horse and Harness Racing

Horse racing two days ahead — more than 400 races from the USA, Chile, Turkey, Italy, Ireland, France, Korea and more — and Swedish, Italian, French, Danish and German trotting, every runner with jockey, trainer and status, and fixed win and place prices as each card nears the off.

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 16 sports are subscribable on PRO, MAX and ULTRA plans, and one PulseScore API key works across Betpoint and every other bookmaker on the platform.

Frequently Asked Questions

What data does the Betpoint API provide?

PulseScore provides pre-match and live odds from Betpoint's Italian sportsbook (betpoint.it) across 16 sports, plus horse and harness racing two days ahead. 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, Betpoint's competition code and the betpoint.it link.

Which sports are covered?

Sixteen: Soccer, Basketball, Tennis, Ice Hockey, American Football, Handball, Volleyball, Rugby Union, Baseball, Australian Rules, Cricket, Darts, Boxing, Badminton, Table Tennis and Esports (League of Legends), plus horse and harness racing. Cricket, badminton, table tennis and esports carry the winner only, and Betpoint's single rugby sport also holds the Rugby League World Cup. Futsal appears in play only. 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 Betpoint soccer boards?

Deep, and set per competition: the Conference League, Europa League, Champions League, Serie A, the Bundesliga, the Premier League, LaLiga, Ligue 1 and the Championship run 100 to 129 markets a fixture, and that depth holds weeks ahead. Most other leagues sit at fixed tiers of about 87, 58, 39 or 23 markets. Thirty-three canonical market types are mapped, including Asian handicaps, whole- and quarter-line totals and corners, and there is no OTHER; the full-time correct score and player markets are not on the prematch board.

What language is the board in?

Italian, in capitals. Markets read 1X2 FINALE, DOPPIA CHANCE, U/O 2.5, GOL/NO GOL (both teams to score), 1X2 H 1 (European handicap), T/T H -1 (0:0) (Asian handicap), U/O COMPOSTA (quarter-line total), SOMMA GOL (exact goals), PARZIALE/FINALE (half-time/full-time), SEGNA GOL 1 (first team to score) and TESTA A TESTA or VINCITORE PARTITA (the winner); selections read 1, X and 2, UNDER and OVER, GOAL and NOGOAL, SI and NO, PARI and DISPARI. Leagues are mostly country plus tier (BRASILE 1, GERMANIA 2) and countries Italian (INGHILTERRA, GERMANIA, SPAGNA). Read canonicalMarket and canonicalOutcome rather than the raw labels.

How do Betpoint's handicap lines work?

line always holds the home side's number. On the T/T H and 1X2 H handicaps — basketball, American football, baseball, ice hockey, handball, rugby, volleyball, tennis games and sets, and soccer's European, half and corner handicaps — Betpoint prints the away side's number: T/T H 1.5 (INCL. OT) is the home side's -1.5 and 1X2 H 1 the home side's -1. Soccer's Asian handicap T/T H -1.5 (0:0) prints the home side's own number. On a two-way handicap the AWAY selection carries the opposite line. Trust line, not the number in rawName.

What is the Betpoint eventId?

The ADM programme and event code as a string — <programme>-<event>, such as 36431-1001. Sisal and Eurobet number their events the same way, and about half of the soccer fixtures each shares with Betpoint carry the same eventId on both books. Every fixture except ITF tennis and Betpoint's fantasy matchups also carries moreInfo.betradarId, the Betradar match ID, which is the reliable join key: it is Eplay24's eventId and Sisal's and Eurobet'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 Betpoint with Sisal, Eurobet and Eplay24 market by market?

Yes. Each market's moreInfo.cs is the ADM bet-type code and moreInfo.ia its line information, the same catalogue Sisal (moreInfo.cs), Eurobet (moreInfo.cs) and Eplay24 (moreInfo.betTypeId) use: the 1X2 is 3, U/O goals 7989 and GG/NG 18 on every book. Betpoint's marketId has Sisal's form, <eventId>-<cs>-<ia>. With moreInfo.betradarId for the event and the code plus line for the market, the four Italian books line up without matching team or market names.

What racing is included?

Horse racing two days ahead — 415 races at the snapshot from 16 countries, led by the USA, Chile, Turkey and Italy — and harness racing from Sweden, Italy, France, Denmark and Germany, 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 Betpoint prices, as each card nears the off; the rest are listed without prices.

Is live in-play data available?

Yes — /api/betpoint-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 the set sports), the match clock to the second with a machine period code, per-period scores and set statistics, and on the top European matches anytime goalscorer, two-or-more and hat-trick markets. Betpoint publishes no push feed, so its in-play lists are polled every 20 to 30 seconds; live retention is 120 seconds.

Does the Betpoint API include results?

No. Betpoint publishes no results and its in-play feed does not say when matches end, so there is no /results route on this book: a match leaves /live-events as soon as Betpoint takes it off its in-play lists. 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 Betpoint WebSocket?

Open wss://api.pulsescore.net/api/betpoint-it/ws/live?key=YOUR_KEY&sport=soccer. The sport parameter is kebab-case (ice-hockey, table-tennis, american-football, australian-rules) and all 16 prematch 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?

Each competition's board is re-read every 10 minutes when its next match is within two hours, every 15 to 20 minutes within a day and every 30 minutes further out. In play, the lists are read every 20 to 30 seconds and the deep boards every 90 seconds, pushed over WebSocket roughly every second. Prematch fixtures are closed at kick-off, live events as soon as Betpoint drops them, and racing cards are re-read every minute in the last two hours before the off.

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 Betpoint and every other bookmaker on the platform.

Start Using the Betpoint API Today

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