Eplay24 Data API

Eplay24 API for Italian Pre-Match, Live & Player-Prop Data

Access Eplay24's Italian sportsbook through one API — Serie A and B, the Premier League, LaLiga, the Bundesliga, Ligue 1 and the Champions, Europa and Conference League, the Copa Libertadores and MLS, the Euroleague and the NBA, the NHL and the KHL, ATP and WTA tennis and more across 11 sports, plus the day's horse racing cards. Every event is keyed on its Betradar match ID, every market carries a canonical type and every selection a decimal price, and the European matchdays run to hundreds of markets with goalscorer, shots and fouls props. REST and WebSocket, one API key.

What an Eplay24 API Response Looks Like

GET /api/eplay24-it/soccer/events/71945312
{
  "data": {
    "eventId": "71945312",
    "away": "LAZIO",
    "home": "JUVENTUS",
    "league": "Serie A",
    "live": false,
    "markets": [
      {
        "canonicalMarket": "MATCH_RESULT",
        "rawName": "esito finale 1x2",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME",
            "rawName": "1",
            "odds": 1.68,
            "isActive": true,
            "selectionId": "d8643d3a-8080-1094-1810-9fbf97ff48d7",
            "rawOdds": "1.68"
          },
          {
            "canonicalOutcome": "DRAW",
            "rawName": "X",
            "odds": 3.85,
            "isActive": true,
            "selectionId": "70d0925a-c237-f0f2-1e5e-753b62df80ed",
            "rawOdds": "3.85"
          },
          {
            "canonicalOutcome": "AWAY",
            "rawName": "2",
            "odds": 5.1,
            "isActive": true,
            "selectionId": "e1ae8fa1-f7ec-74fb-1224-418f7bafb744",
            "rawOdds": "5.10"
          }
        ],
        "marketId": "7ec8cbec-5c4b-fee2-2830-8fd9f2a7baf3",
        "moreInfo": {
          "betTypeId": 3
        }
      },
      {
        "canonicalMarket": "DOUBLE_CHANCE",
        "rawName": "Doppia Chance",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME_DRAW",
            "rawName": "1X",
            "odds": 1.17,
            "isActive": true,
            "selectionId": "31a89678-730c-1e27-435b-8222a6064a2a",
            "rawOdds": "1.17"
          },
          {
            "canonicalOutcome": "DRAW_AWAY",
            "rawName": "X2",
            "odds": 2.1,
            "isActive": true,
            "selectionId": "dbb1b113-0ed5-a53c-1a4b-1ced1e3e3251",
            "rawOdds": "2.10"
          },
          {
            "canonicalOutcome": "HOME_AWAY",
            "rawName": "12",
            "odds": 1.26,
            "isActive": true,
            "selectionId": "67cfbf78-cf79-e051-2680-87e49666c6e0",
            "rawOdds": "1.26"
          }
        ],
        "marketId": "4bf4cffb-22c0-4176-b404-b85ba29745cb",
        "moreInfo": {
          "betTypeId": 1000000
        }
      },
      {
        "canonicalMarket": "OVER_UNDER",
        "rawName": "u/o 2.5",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "UNDER",
            "rawName": "UNDER",
            "odds": 1.83,
            "isActive": true,
            "selectionId": "edca0549-8d2a-47bc-a0cf-c83796df6fbe",
            "rawOdds": "1.83",
            "line": 2.5
          },
          {
            "canonicalOutcome": "OVER",
            "rawName": "OVER",
            "odds": 1.87,
            "isActive": true,
            "selectionId": "fb0e9c76-5298-44dd-bf9d-a7337b2b0bf5",
            "rawOdds": "1.87",
            "line": 2.5
          }
        ],
        "marketId": "2a666f0c-f5f3-4748-8587-ff1e173ac9a0",
        "line": 2.5,
        "moreInfo": {
          "betTypeId": 7989
        }
      },
      {
        "canonicalMarket": "OVER_UNDER",
        "rawName": "U/O 2.0 ASIATICO INTERO",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "UNDER",
            "rawName": "UNDER",
            "odds": 2.62,
            "isActive": true,
            "selectionId": "2b567a0f-1a25-fd0d-a15a-e9107705d3bf",
            "rawOdds": "2.62",
            "line": 2
          },
          {
            "canonicalOutcome": "OVER",
            "rawName": "OVER",
            "odds": 1.43,
            "isActive": true,
            "selectionId": "cffc1f2e-3ba4-cfb8-3c75-7d1e8924d8df",
            "rawOdds": "1.43",
            "line": 2
          }
        ],
        "marketId": "4682c5aa-ed9b-d761-d114-93587f5647b6",
        "line": 2,
        "moreInfo": {
          "betTypeId": 20247
        }
      },
      {
        "canonicalMarket": "EUROPEAN_HANDICAP",
        "rawName": "1x2 handicap -1",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "HOME",
            "rawName": "1",
            "odds": 1.16,
            "isActive": true,
            "selectionId": "ca25799d-8e18-4075-9090-d04e46b37111",
            "rawOdds": "1.16",
            "line": 1
          },
          {
            "canonicalOutcome": "DRAW",
            "rawName": "X",
            "odds": 6.25,
            "isActive": true,
            "selectionId": "c4823cd6-e19e-43cb-b758-5107423c6483",
            "rawOdds": "6.25",
            "line": 1
          },
          {
            "canonicalOutcome": "AWAY",
            "rawName": "2",
            "odds": 12.5,
            "isActive": true,
            "selectionId": "92443133-6499-4e37-815e-6a47091d415f",
            "rawOdds": "12.50",
            "line": 1
          }
        ],
        "marketId": "b9d77aea-14c7-41a5-b21a-1de9ac0d9341",
        "line": 1,
        "moreInfo": {
          "betTypeId": 8
        }
      },
      {
        "canonicalMarket": "BOTH_TEAMS_TO_SCORE",
        "rawName": "G/NG",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "YES",
            "rawName": "G",
            "odds": 1.87,
            "isActive": true,
            "selectionId": "0aa8aed7-f434-d65e-8c43-f256f34e7f86",
            "rawOdds": "1.87"
          },
          {
            "canonicalOutcome": "NO",
            "rawName": "NG",
            "odds": 1.83,
            "isActive": true,
            "selectionId": "a6d6e835-ee26-c427-ba05-c4ac812b0b86",
            "rawOdds": "1.83"
          }
        ],
        "marketId": "f422496f-6855-1a16-8cdf-4ad2299f6d23",
        "moreInfo": {
          "betTypeId": 18
        }
      },
      {
        "canonicalMarket": "ANYTIME_GOALSCORER",
        "rawName": "MARCATORE |Celik, Zeki (Juventus)",
        "period": "FULL_TIME",
        "isActive": true,
        "selections": [
          {
            "canonicalOutcome": "YES",
            "rawName": "SI",
            "odds": 11,
            "isActive": true,
            "selectionId": "f433c419-279c-cec4-d8f8-0e9c259e5b8c",
            "rawOdds": "11.00"
          }
        ],
        "marketId": "536e306a-7f21-457f-951c-0fdd7f1dee86",
        "moreInfo": {
          "betTypeId": 9901,
          "player": "Celik, Zeki"
        }
      }
    ],
    "moreInfo": {
      "groupId": 33,
      "sportId": 1
    },
    "slug": "/scommesse/prematch/calcio/1/palinsesto/serie-a/evento/juventus-vs-lazio/71945312",
    "sport": "soccer",
    "startTime": "2026-10-18T18:45:00.000Z",
    "country": "Italia"
  }
}

In-Play — Score, Periods & Sets

GET /api/eplay24-it/live-events?sport=tennis&limit=1
{
  "total": 25,
  "page": 1,
  "limit": 1,
  "totalPages": 25,
  "hasNextPage": true,
  "hasPrevPage": false,
  "sport": "tennis",
  "events": [
    {
      "eventId": "75373634",
      "away": "BARTUNKOVA, NIKOLA",
      "country": "WTA",
      "home": "PAOLINI, JASMINE",
      "league": "Wuhan (WTA1000)",
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "T/T Match (Escl.Ritiro)",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "1",
              "odds": 1.36,
              "isActive": true,
              "selectionId": "026f74ca-30a7-c7db-a3b2-01bae0d794f7",
              "rawOdds": "1.36"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "2",
              "odds": 3,
              "isActive": true,
              "selectionId": "19417776-2db9-29ed-7856-5fbc90215042",
              "rawOdds": "3.00"
            }
          ],
          "marketId": "83179747-1807-7a5e-ce9d-a7c544327174",
          "moreInfo": {
            "betTypeId": 20540
          }
        },
        {
          "canonicalMarket": "SET_WINNER",
          "rawName": "T/T Set 2 (Escl.Ritiro)",
          "period": "SECOND_SET",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "1",
              "odds": 1.95,
              "isActive": true,
              "selectionId": "7fc354be-2208-4561-78f2-c18a2bd81ee2",
              "rawOdds": "1.95"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "2",
              "odds": 1.82,
              "isActive": true,
              "selectionId": "765b543e-9805-daeb-7397-79a1be66396d",
              "rawOdds": "1.82"
            }
          ],
          "marketId": "85e8c7eb-9b0e-d298-1ed6-eaaeab5ca300",
          "moreInfo": {
            "betTypeId": 22368
          }
        },
        {
          "canonicalMarket": "TOTAL_GAMES",
          "rawName": "U/O 27.5 GIOCHI",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "UNDER",
              "rawName": "UNDER",
              "odds": 1.84,
              "isActive": true,
              "selectionId": "fae4d53d-54ac-98dd-2a94-0e0f1478a575",
              "rawOdds": "1.84",
              "line": 27.5
            },
            {
              "canonicalOutcome": "OVER",
              "rawName": "OVER",
              "odds": 1.84,
              "isActive": true,
              "selectionId": "75d67799-3037-e5d5-a977-d07a5fee35ef",
              "rawOdds": "1.84",
              "line": 27.5
            }
          ],
          "marketId": "7869409f-9ddc-e4ec-21f1-ae11479d687c",
          "line": 27.5,
          "moreInfo": {
            "betTypeId": 983
          }
        }
      ],
      "matchClock": {
        "period": "2° set",
        "periodId": "S2",
        "minute": 0,
        "running": true
      },
      "moreInfo": {
        "groupId": -2150,
        "sportId": 5,
        "betradarId": 75373634
      },
      "settlement": {
        "source": "eplay24",
        "state": "in_play",
        "final": false,
        "inPlay": true,
        "lastSeenAt": "2026-10-14T06:41:21.160Z"
      },
      "slug": "/scommesse/live/tennis/5/wuhan-wta1000/evento/paolini-jasmine-vs-bartunkova-nikola/75373634",
      "sport": "tennis",
      "startTime": "2026-10-14T05:25:00.000Z",
      "periodScores": {
        "home": [
          7,
          0
        ],
        "away": [
          6,
          0
        ],
        "labels": [
          "S1",
          "S2"
        ]
      },
      "score": {
        "home": "1",
        "away": "0",
        "info": "0,0"
      },
      "statistics": {
        "sets": {
          "home": [
            7,
            0
          ],
          "away": [
            6,
            0
          ]
        }
      }
    }
  ]
}

Racing — the Day's Cards with Runners and Jockeys

GET /api/eplay24-it/horse-racing/races/36421.1499
{
  "data": {
    "id": "36421.1499",
    "active": "true",
    "country": "GB",
    "horses": [
      {
        "id": "1",
        "number": "1",
        "name": "Chevere",
        "active": false,
        "EW": {
          "status": "unknown",
          "fractional": "",
          "decimal": ""
        },
        "jockey": "Callum Rodriguez"
      },
      {
        "id": "2",
        "number": "2",
        "name": "Eagles Eternal",
        "active": false,
        "EW": {
          "status": "unknown",
          "fractional": "",
          "decimal": ""
        },
        "jockey": "Rhys Elliott"
      },
      {
        "id": "3",
        "number": "3",
        "name": "Blake's Lass",
        "active": false,
        "EW": {
          "status": "unknown",
          "fractional": "",
          "decimal": ""
        },
        "jockey": "T Eaves"
      },
      {
        "id": "4",
        "number": "4",
        "name": "Enriched",
        "active": false,
        "EW": {
          "status": "unknown",
          "fractional": "",
          "decimal": ""
        },
        "jockey": "Saffie Osborne"
      }
    ],
    "isInPlay": "false",
    "meetingId": "36421",
    "name": "NOTTINGHAM R1",
    "onlySP": true,
    "settled": false,
    "slug": "/scommesse/ippica",
    "startDate": "2026-10-14T12:19:00.000Z"
  }
}

Why Use PulseScore for Eplay24 Data

European Matchdays in the Hundreds

The Champions League matchday ran 626 to 872 markets a fixture and the Europa League 538 to 673, while Serie A, LaLiga, the Bundesliga, Ligue 1 and the Premier League are priced at 243 to 364 markets four to five days ahead — corners, cards, Asian whole-goal totals, a 26-score correct score and half markets on every one. Every line is a market of its own with a canonical type.

Goalscorer, Shots and Fouls Props

On the European cups and the big leagues about two-thirds of the board is player markets: anytime, first and last goalscorer, two or more and hat-trick, assists, score-or-assist, score-or-carded, shots and shots on target by rung, and fouls committed and won — each with the player in moreInfo.player and the rung in line.

Keyed on the Betradar Match ID

Eplay24's eventId is the Betradar match ID — the same number Sisal carries as moreInfo.betradarId — on every soccer fixture and nearly every other event, and it runs unchanged through the prematch, live and results feeds, so Eplay24 joins any Sportradar-keyed source without name matching. Only ITF tennis carries Eplay24's own negative IDs.

Canonical Markets on an Italian Board

Eplay24's board is in Italian — esito finale 1x2, Doppia Chance, G/NG, Ris. Esatto, SI and NO, PARI and DISPARI — with Italian team names such as BAYERN MONACO and SIVIGLIA. Every market carries a canonicalMarket and every selection a canonicalOutcome, and line always holds the home side's number, even though Eplay24 prints its handicaps from the away side.

In-Play Scores and a Results Archive

Live documents carry the score, the game points on tennis, an Italian period label with a machine period code, per-period scores and set statistics, and every match Eplay24 lists in play stays in a 30-day results archive under the same eventId — settled from the book's own end label or, on tennis, table tennis and volleyball, from the sets.

REST Plus WebSocket Streaming

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

Frequently Asked Questions

What data does the Eplay24 API provide?

PulseScore provides pre-match and live odds from Eplay24's Italian sportsbook (eplay24.it) across 11 sports, the day's horse racing cards and a 30-day results archive of every match Eplay24 lists in play. Events carry normalized market data with canonical market types and outcomes, decimal odds, the league and country, Eplay24's competition and sport IDs, the eplay24.it page slug and an eventId that is the Betradar match ID.

Which sports are covered?

Eleven: Soccer, Basketball, Tennis, Ice Hockey, Handball, Volleyball, American Football, Baseball, Rugby Union, Cricket and Table Tennis, plus horse racing. Cricket and table tennis carry the winner only, and Eplay24'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 Eplay24 soccer boards?

Deep on the big competitions, days ahead. The Champions League matchday ran 626 to 872 markets a fixture, the Europa League 538 to 673, MLS up to 688, and Serie A, Ligue 1, LaLiga, the Bundesliga and the Premier League 243 to 364 four to five days out — about two-thirds of it player markets. Second tiers climb to around 200 for their next game, and most other leagues sit at a flat 73 to 80. Fifty canonical market types are mapped and OTHER is 0.1% of the soccer board.

What language is the board in?

Italian. Markets read esito finale 1x2, Doppia Chance, u/o 2.5, U/O 2.0 ASIATICO INTERO, G/NG, Ris. Esatto, SOMMA GOAL and TESTA A TESTA (head-to-head); selections read 1, X and 2, G and NG, SI and NO, PARI and DISPARI. Team names are upper case with Italian exonyms — BAYERN MONACO, LIPSIA, SIVIGLIA, STELLA ROSSA, BALTIMORA RAVENS — and countries are Italian (Inghilterra, Germania, Stati Uniti). Read canonicalMarket and canonicalOutcome rather than the raw labels.

How do Eplay24's handicap lines work?

line always holds the home side's number: on two-way handicaps the HOME selection carries the home line and the AWAY selection the opposite, and on the three-way European handicap the home line sits on all three outcomes. Eplay24 prints the away side's number instead — T/T HANDICAP 8.5 PUNTI on basketball is the home side's -8.5, and 1x2 handicap -1 on soccer the home side's +1 — so trust line, not the number in rawName.

What is the Eplay24 eventId?

The Betradar match ID, as a numeric string — on every soccer fixture and nearly every other event — and the same in the prematch, live and results feeds. ITF tennis matches carry negative IDs, Eplay24's own numbering. marketId and selectionId are template IDs that repeat on every fixture (the soccer 1X2 has the same marketId everywhere) and are unique only inside one event, so key a price on eventId plus marketId plus selectionId.

What racing is included?

The day's horse racing cards — 88 races at the snapshot from France, the UK, Ireland, the USA and Chile — with each runner's number, name, jockey and status, the start time as an ISO string and the race's betting status. Fixed win and place prices fill EW.decimal and markets only on races Eplay24 prices at fixed odds, and none was at the snapshot (onlySP true on all 88), so treat the feed as race cards.

Is live in-play data available?

Yes — /api/eplay24-it/live-events over HTTP and a WebSocket for streaming. Live documents keep the prematch eventId and carry the in-play board, a score with the numbers as strings (plus the game points on tennis), an Italian period label with a machine period code, per-period scores and set statistics. Eplay24 publishes no push feed, so its board is polled about every 8 seconds; live retention is 120 seconds.

How do I tell finished matches in the results?

Read settlement.state: 'final' when Eplay24 showed the end (reason 'status') or when a tennis, table tennis or volleyball match left the in-play list already decided by sets (reason 'purged'); 'unresolved' when a match left in its closing stretch without an end label; 'abandoned' when it left before that; 'in_play' while it runs. There is no ?final= filter on this book; ?country= takes Eplay24's Italian country names and, on tennis, the tour.

How do I connect to the Eplay24 WebSocket?

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

Prematch boards are re-read every minute for matches about to start and up to every 35 minutes for matches days away; in-play boards about every 8 seconds, pushed over WebSocket roughly every second. Prematch fixtures leave at the scheduled start, live events 120 seconds after their last refresh, racing cards within an hour of the result, and results are retained for 30 days.

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

Start Using the Eplay24 API Today

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