888sport Data API

888sport API for UK Pre-Match, Live, Racing & Results Data

Access 888sport's sportsbook through one API — the Premier League, the Championship, League One and League Two, LaLiga, the Bundesliga, Serie A, Ligue 1, the Champions League, MLS, the NBA, the NFL, the NHL, ATP, WTA and ITF tennis and table tennis across 18 sports, plus horse and greyhound cards from Britain, Ireland, Australia, the USA and France. Every price comes as a fraction, a decimal and an American line, the Premier League round runs to 274–320 markets and the NFL week to 175–274 with player props, and every market has a canonical type. Socket-fed in-play boards, 30 days of results with the book's own grades, REST and WebSocket, one API key.

What an 888sport API Response Looks Like

GET /api/888sport-uk/soccer/events/8420243
{
  "data": {
    "sport": "soccer",
    "country": "England",
    "league": "English Premier League",
    "eventId": "8420243",
    "slug": "/football/england/english-premier-league/chelsea-vs-man-utd-e-8420243/",
    "home": "Chelsea",
    "away": "Man Utd",
    "live": false,
    "startTime": "2026-10-31T12:30:00.000Z",
    "markets": [
      {
        "canonicalMarket": "MATCH_RESULT",
        "rawName": "Match Winner",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME",
            "rawName": "Chelsea",
            "odds": 1.833,
            "isActive": true,
            "selectionId": "16871433168",
            "rawOdds": "1.833",
            "fractional": "5/6",
            "american": "-120"
          },
          {
            "canonicalOutcome": "DRAW",
            "rawName": "Draw",
            "odds": 3.75,
            "isActive": true,
            "selectionId": "16871433167",
            "rawOdds": "3.750",
            "fractional": "11/4",
            "american": "+275"
          },
          {
            "canonicalOutcome": "AWAY",
            "rawName": "Man Utd",
            "odds": 3.8,
            "isActive": true,
            "selectionId": "16871433166",
            "rawOdds": "3.800",
            "fractional": "14/5",
            "american": "+280"
          }
        ],
        "marketId": "1632241"
      },
      {
        "canonicalMarket": "ASIAN_HANDICAP",
        "rawName": "Handicap 2-Way",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME",
            "rawName": "Chelsea (-0.5)",
            "odds": 1.833,
            "isActive": true,
            "selectionId": "16871433063",
            "rawOdds": "1.833",
            "fractional": "5/6",
            "american": "-120",
            "line": -0.5
          },
          {
            "canonicalOutcome": "AWAY",
            "rawName": "Man Utd (+0.5)",
            "odds": 1.95,
            "isActive": true,
            "selectionId": "16871433062",
            "rawOdds": "1.950",
            "fractional": "19/20",
            "american": "-105",
            "line": 0.5
          }
        ],
        "marketId": "1619557@-0.5",
        "line": -0.5
      },
      {
        "canonicalMarket": "OVER_UNDER",
        "rawName": "Total Goals Over/Under",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "OVER",
            "rawName": "Over (2.5)",
            "odds": 1.6,
            "isActive": true,
            "selectionId": "16871433187",
            "rawOdds": "1.600",
            "fractional": "3/5",
            "american": "-167",
            "line": 2.5
          },
          {
            "canonicalOutcome": "UNDER",
            "rawName": "Under (2.5)",
            "odds": 2.3,
            "isActive": true,
            "selectionId": "16871433182",
            "rawOdds": "2.300",
            "fractional": "13/10",
            "american": "+130",
            "line": 2.5
          }
        ],
        "marketId": "1323275@2.5",
        "line": 2.5
      },
      {
        "canonicalMarket": "BOTH_TEAMS_TO_SCORE",
        "rawName": "Both Teams to Score",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "YES",
            "rawName": "Yes",
            "odds": 1.533,
            "isActive": true,
            "selectionId": "16871432798",
            "rawOdds": "1.533",
            "fractional": "8/15",
            "american": "-188"
          },
          {
            "canonicalOutcome": "NO",
            "rawName": "No",
            "odds": 2.4,
            "isActive": true,
            "selectionId": "16871432797",
            "rawOdds": "2.400",
            "fractional": "7/5",
            "american": "+140"
          }
        ],
        "marketId": "8"
      },
      {
        "canonicalMarket": "CORNERS_OVER_UNDER",
        "rawName": "Total Corners Over/Under",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "OVER",
            "rawName": "Over (10.5)",
            "odds": 2,
            "isActive": true,
            "selectionId": "16885141554",
            "rawOdds": "2.000",
            "fractional": "1/1",
            "american": "+100",
            "line": 10.5
          },
          {
            "canonicalOutcome": "UNDER",
            "rawName": "Under (10.5)",
            "odds": 1.7,
            "isActive": true,
            "selectionId": "16885141543",
            "rawOdds": "1.700",
            "fractional": "7/10",
            "american": "-143",
            "line": 10.5
          }
        ],
        "marketId": "1328189@10.5",
        "line": 10.5
      }
    ],
    "moreInfo": {
      "tournamentId": "115506"
    },
    "updatedAt": "2026-10-30T06:07:02.110Z"
  }
}

Racing Cards — Fractional Prices & Each-Way Terms

GET /api/888sport-uk/horse-racing/races/8486361
{
  "data": {
    "id": "8486361",
    "settled": false,
    "isInPlay": "false",
    "active": "true",
    "name": "13:10 Wetherby",
    "EW": "EW: 1/5 odds 3 places",
    "startDate": "2026-10-31T13:10:00.000Z",
    "horses": [
      {
        "id": "16884855748",
        "name": "Palamon",
        "jockey": "Harry Skelton",
        "trainer": "D Skelton",
        "active": true,
        "EW": {
          "status": "active",
          "fractional": "9/4",
          "decimal": "3.250"
        },
        "number": "1"
      },
      {
        "id": "16884855745",
        "name": "Ladronne",
        "jockey": "Oscar Palmer",
        "trainer": "J Parkinson & S Smith",
        "active": true,
        "EW": {
          "status": "active",
          "fractional": "22/1",
          "decimal": "23.000"
        },
        "number": "2"
      },
      {
        "id": "16884855747",
        "name": "Geryville",
        "jockey": "C O'Farrell",
        "trainer": "Micky Hammond",
        "active": true,
        "EW": {
          "status": "active",
          "fractional": "16/1",
          "decimal": "17.000"
        },
        "number": "3"
      },
      {
        "id": "16884855741",
        "name": "Marty Mcfly",
        "jockey": "Danny Mcmenamin",
        "trainer": "A M Thomson",
        "active": true,
        "EW": {
          "status": "active",
          "fractional": "10/1",
          "decimal": "11.000"
        },
        "number": "4"
      }
    ],
    "onlySP": false,
    "slug": "/horse-racing/uk-and-ireland/wetherby/wetherby-1310-e-8486361/",
    "meetingId": "23165",
    "country": "GB",
    "region": "UK & Ireland",
    "updatedAt": "2026-10-30T06:08:17.014Z"
  }
}

In-Play — Score, Sets & a Socket-Fed Board

GET /api/888sport-uk/live-events?sport=tennis&limit=1
{
  "total": 11,
  "page": 1,
  "limit": 1,
  "totalPages": 11,
  "hasNextPage": true,
  "hasPrevPage": false,
  "sport": "tennis",
  "events": [
    {
      "eventId": "8485453",
      "away": "Seong Chan Hong",
      "country": "South Korea",
      "home": "Terence Atmane",
      "league": "ATP Challenger Seoul",
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "Which player will win the match?",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "AWAY",
              "rawName": "Seong Chan Hong",
              "odds": 2.75,
              "isActive": true,
              "selectionId": "16884730632",
              "rawOdds": "2.75",
              "fractional": "7/4",
              "american": "+200"
            },
            {
              "canonicalOutcome": "HOME",
              "rawName": "Terence Atmane",
              "odds": 1.4,
              "isActive": true,
              "selectionId": "16884730631",
              "rawOdds": "1.4",
              "fractional": "2/5",
              "american": "-275"
            }
          ],
          "marketId": "11904"
        },
        {
          "canonicalMarket": "TOTAL_GAMES",
          "rawName": "Total",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "OVER",
              "rawName": "Over (22.5)",
              "odds": 1.727,
              "isActive": true,
              "selectionId": "16884768366",
              "rawOdds": "1.727",
              "fractional": "8/11",
              "american": "-125",
              "line": 22.5
            },
            {
              "canonicalOutcome": "UNDER",
              "rawName": "Under (22.5)",
              "odds": 2,
              "isActive": true,
              "selectionId": "16884768367",
              "rawOdds": "2",
              "fractional": "1/1",
              "american": "-110",
              "line": 22.5
            }
          ],
          "marketId": "106@22.5",
          "line": 22.5
        },
        {
          "canonicalMarket": "GAME_HANDICAP",
          "rawName": "Game Handicap",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "Terence Atmane  (-3.5)",
              "odds": 2.1,
              "isActive": true,
              "selectionId": "16884768362",
              "rawOdds": "2.1",
              "fractional": "11/10",
              "american": "+100",
              "line": -3.5
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "Seong Chan Hong  (+3.5)",
              "odds": 1.667,
              "isActive": true,
              "selectionId": "16884768356",
              "rawOdds": "1.667",
              "fractional": "4/6",
              "american": "-138",
              "line": 3.5
            }
          ],
          "marketId": "1312054@-3.5",
          "line": -3.5
        }
      ],
      "matchClock": {
        "period": "1SET",
        "periodId": "1"
      },
      "moreInfo": {
        "matchStatus": "1SET",
        "tournamentId": "552379"
      },
      "slug": "/inplay/match_markets/8485453-ipe-8485453/",
      "sport": "tennis",
      "startTime": "2026-10-30T06:13:00.000Z",
      "updatedAt": "2026-10-30T06:14:46.171Z",
      "periodScores": {
        "home": [
          1,
          0,
          0
        ],
        "away": [
          1,
          0,
          0
        ],
        "labels": [
          "S1",
          "S2",
          "S3"
        ]
      },
      "score": {
        "home": "0",
        "away": "0",
        "info": "0-0 0-15"
      },
      "statistics": {
        "sets": {
          "home": [
            1,
            0,
            0
          ],
          "away": [
            1,
            0,
            0
          ],
          "homeServe": false
        }
      }
    }
  ]
}

Results — Graded by the Book, Market by Market

GET /api/888sport-uk/results?sport=soccer&league=Italian%20Serie%20A&country=Italy&limit=1
{
  "total": 4,
  "page": 1,
  "limit": 1,
  "totalPages": 4,
  "hasNextPage": true,
  "hasPrevPage": false,
  "results": [
    {
      "eventId": "8426905",
      "away": "Atalanta",
      "country": "Italy",
      "home": "Fiorentina",
      "league": "Italian Serie A",
      "matchClock": {
        "period": "ENDED",
        "minute": 90,
        "second": 0,
        "periodId": "ENDED",
        "running": false
      },
      "moreInfo": {
        "matchStatus": "ENDED",
        "tournamentId": "558958",
        "ended": true
      },
      "score": {
        "home": "2",
        "away": "2"
      },
      "slug": "/inplay/match_markets/8426905-ipe-8426905/",
      "sport": "soccer",
      "startTime": "2026-10-29T19:45:00.000Z",
      "updatedAt": "2026-10-29T22:16:28.298Z",
      "settledOpportunities": [
        {
          "market": "OVER_UNDER",
          "period": "FULL_TIME",
          "outcome": "OVER",
          "selection": "Over (4.5)",
          "result": "LOST",
          "line": 4.5
        },
        {
          "market": "OVER_UNDER",
          "period": "FULL_TIME",
          "outcome": "UNDER",
          "selection": "Under (4.5)",
          "result": "WON",
          "line": 4.5
        },
        {
          "market": "OVER_UNDER",
          "period": "SECOND_HALF",
          "outcome": "OVER",
          "selection": "Over (3.5)",
          "result": "LOST",
          "line": 3.5
        },
        {
          "market": "OVER_UNDER",
          "period": "SECOND_HALF",
          "outcome": "UNDER",
          "selection": "Under (3.5)",
          "result": "WON",
          "line": 3.5
        },
        {
          "market": "HOME_OVER_UNDER",
          "period": "FULL_TIME",
          "outcome": "UNDER",
          "selection": "Under (2.5)",
          "result": "WON",
          "line": 2.5
        },
        {
          "market": "AWAY_CARDS_OVER_UNDER",
          "period": "SECOND_HALF",
          "outcome": "UNDER",
          "selection": "Under (2.5)",
          "result": "WON",
          "line": 2.5
        },
        {
          "market": "LAST_GOALSCORER",
          "period": "FULL_TIME",
          "outcome": "OTHER",
          "selection": "Nicola Zalewski",
          "result": "WON"
        },
        {
          "market": "HOME_CARDS_OVER_UNDER",
          "period": "FULL_TIME",
          "outcome": "UNDER",
          "selection": "Under (4.5)",
          "result": "WON",
          "line": 4.5
        }
      ],
      "settlement": {
        "source": "888sport",
        "state": "final",
        "final": true,
        "inPlay": false,
        "lastSeenAt": "2026-10-29T22:16:00.000Z",
        "settledSelections": 111,
        "settledMarkets": 34,
        "reason": "status",
        "finalAt": "2026-10-29T22:16:28.000Z"
      }
    }
  ]
}

Why Use PulseScore for 888sport Data

Fractional, Decimal and American Prices

888sport is a British book that also quotes US odds: every open selection carries the fraction the site shows (5/4, 4/6, 150/1), the American line (+125, -150) and the decimal odds, so you can display UK or US prices without converting them. Racing runners carry the fraction and the decimal.

Up to 330 Markets a Match

The weekend's Premier League round runs to 274–320 markets and Friday's LaLiga, Bundesliga, Ligue 1 and Championship games to 265–330, with 888's Impact Sub player books, player shots, cards and corners. The NFL week carries 175–274 markets of player yards and touchdown scorers, tonight's NBA games up to 176.

Horse and Greyhound Cards

Today's and tomorrow's horse racing from Britain, Ireland, the USA, Australia, France, Japan and South America, and greyhounds from British, Irish and Australian tracks: runners with saddle cloth or trap, jockey and trainer, fractional and decimal prices, each-way terms and the placings after the result.

Socket-Fed In-Play Boards

In-play prices come from 888sport's own price socket and are written within half a second, with the score, the clock, period scores, per-set and per-game scores on tennis, volleyball and table tennis, and the grades of every market the book has settled so far.

Results Graded by the Book

888sport settles markets as the match is played, and every grade is stored with the final score: the selections the book marked won or lost, up to 323 on a soccer match, kept for 30 days and filterable by sport, league, country and team.

REST Plus WebSocket Streaming

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

Frequently Asked Questions

What data does the 888sport API provide?

Pre-match odds for 18 sports with every market's canonical type, horse and greyhound racing cards, in-play boards with the score and clock, and 30 days of results with 888sport's own grades — via REST, plus a WebSocket for live events. Every open price carries the fraction, the decimal and the American line.

Which sports are covered?

Soccer, tennis, basketball, ice hockey, American football, handball, volleyball, esports, baseball, rugby union, rugby league, cricket, darts, boxing, MMA, snooker, table tennis and Australian rules, plus horse racing and greyhounds as race cards. Badminton appears in play only. Small sports carry few events at a time — call /sport-availability for what is on.

How deep are the 888sport soccer boards?

The weekend's Premier League round carries 274–320 markets and Friday's top-flight games up to 330, with Impact Sub player books, player shots, cards and corners. The rest of the top flights' weekend carries 118–153, next week's rounds 112–133, League One and League Two 88–105. There are 38 canonical types on soccer; about a third of the markets, mostly combos, Nth goal and the Impact Sub books, are OTHER.

What are Impact Sub markets?

Impact Sub is 888sport's player product on the Premier League, the EFL, LaLiga, Serie A and the Bundesliga: if your player is substituted, the bet moves to the player who comes on. Those books (Impact Sub Player to Score, First Goalscorer, 2 Goals or More, Hat-trick, Shown a Card, to Assist) are kept as OTHER because they are not comparable with a plain goalscorer market; leagues without Impact Sub carry the plain goalscorer books at their canonical types.

Are fractional and American odds included?

Yes. Every selection carries fractional (the fraction 888sport.com shows, such as 5/4 or 4/6), the decimal odds as a number and rawOdds as a decimal string, and every open selection also carries american (+125, -150). Racing runners carry the fraction and the decimal under EW: { fractional, decimal }.

Is horse racing included?

Yes. /api/888sport-uk/horse-racing/races lists today's and tomorrow's horse races from Britain, Ireland, the USA, Australia, France, Japan, South Africa and South America, and /api/888sport-uk/greyhounds/races British, Irish and Australian greyhound cards. Each card has the runners with saddle cloth or trap, jockey and trainer, the fixed price as a fraction and a decimal, the each-way terms and, after the race, the placings. Cards without fixed prices yet are flagged onlySP: true.

Do live events keep the prematch event ID?

No. 888sport opens a separate event for the match in play, usually the prematch ID plus or minus one, so /live-events and /results are keyed by the in-play eventId. Join them to the prematch board on moreInfo.tournamentId, the team names and startTime.

Is live in-play data available?

Yes — /api/888sport-uk/live-events over HTTP and a WebSocket for streaming. Prices come from 888sport's price socket, with the score as strings, the match clock, period scores, per-set scores and the grades of every market the book has settled so far. 888sport keeps listing some matches after they end; those read matchClock.period ENDED with every market inactive, so filter on markets.isActive.

Does the 888sport API include results?

Yes. Every match 888sport takes in play is kept for 30 days with its last score, clock and statistics, and with the book's own grades where it published them — up to 323 graded selections on a soccer match. Matches whose end never came through stay without settlement.final, so check it before treating a score as final. /results/sports, /results/countries and /results/leagues list what is stored.

How do I connect to the 888sport WebSocket?

Open wss://api.pulsescore.net/api/888sport-uk/ws/live?key=YOUR_KEY&sport=soccer. The sport parameter is kebab-case (ice-hockey, american-football, table-tennis, rugby-union) and all 18 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?

888sport pushes price changes on its socket, and a changed prematch board is written within a second; boards are also re-read every 10 minutes in the last two hours before the start, then every 30 to 45 minutes, and a fixture is closed in place at kick-off. In play, a changed match is written within half a second and frames go out over WebSocket roughly every second. Racing cards ride the socket in the last three hours and are re-read every 5 minutes in the last hour.

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 888sport (UK) and every other bookmaker on the platform.

Start Using the 888sport API Today

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