Mozzart Data API

Mozzart API for Pre-Match, Live Odds & Results

Access odds from Mozzart, the Belgrade-founded sportsbook that leads the Balkans and runs boards across Africa, over 12 sports — around 100 markets on a typical soccer match, deep basketball, handball and tennis boards, and a busy esports feed. The Serbian board comes through verbatim with canonical market types beside it, plus paginated REST endpoints, a real-time WebSocket feed with live statistics, and a 30-day results archive. One API key for all bookmakers.

What a Mozzart API Response Looks Like

GET /api/mozzart/soccer/events?page=1&limit=5
{
  "total": 542,
  "page": 1,
  "limit": 5,
  "totalPages": 109,
  "hasNextPage": true,
  "events": [
    {
      "sport": "soccer",
      "league": "Engleska 1",
      "eventId": "994748",
      "home": "Leeds",
      "away": "Brentford",
      "live": false,
      "startTime": "2026-08-30T13:00:00.000Z",
      "slug": "/en/kladjenje/sport/1/match/994748",
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "Konačan ishod",
          "period": "FULL_TIME",
          "isActive": true,
          "marketId": "2:FULL_TIME",
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "1",
              "odds": 2.6,
              "isActive": true,
              "selectionId": "270073851",
              "moreInfo": {
                "fullId": 1001002001,
                "description": "Lids će pobediti na meču"
              }
            },
            {
              "canonicalOutcome": "DRAW",
              "rawName": "X",
              "odds": 3.3,
              "isActive": true,
              "selectionId": "270073658",
              "moreInfo": {
                "fullId": 1001002002,
                "description": "Meč će se završiti nerešenim rezultatom"
              }
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "2",
              "odds": 2.75,
              "isActive": true,
              "selectionId": "270073857",
              "moreInfo": {
                "fullId": 1001002003,
                "description": "Brentford će pobediti na meču"
              }
            }
          ],
          "moreInfo": { "gameId": 2 }
        },
        {
          "canonicalMarket": "OVER_UNDER",
          "rawName": "Ukupno golova na meču",
          "period": "FULL_TIME",
          "line": 2.5,
          "isActive": true,
          "marketId": "30:FULL_TIME@2.5",
          "selections": [
            {
              "canonicalOutcome": "UNDER",
              "rawName": "0-2",
              "odds": 1.85,
              "line": 2.5,
              "isActive": true,
              "selectionId": "270073664",
              "moreInfo": {
                "fullId": 1001030002,
                "description": "Zbir golova na meču će biti najviše 2"
              }
            },
            {
              "canonicalOutcome": "OVER",
              "rawName": "3+",
              "odds": 1.89,
              "line": 2.5,
              "isActive": true,
              "selectionId": "273068980",
              "moreInfo": {
                "fullId": 1001030001,
                "description": "Zbir golova na meču će biti najmanje 3"
              }
            }
          ],
          "moreInfo": { "gameId": 30 }
        }
        /* ... 127 more markets */
      ],
      "moreInfo": {
        "sportId": 1,
        "competitionId": 4187,
        "source": "board",
        "matchNumber": 20834,
        "totalOddsCount": 452,
        "originMatchId": 9922032,
        "lbMatchId": 72221222,
        "status": "Nije počeo",
        "phase": "Liga"
      }
    }
  ]
}

Live Events — Score, Clock & Statistics

GET /api/mozzart/live-events?sport=soccer&limit=1
{
  "total": 39,
  "page": 1,
  "limit": 1,
  "sport": "soccer",
  "events": [
    {
      "sport": "soccer",
      "league": "Australija 2 Kvinslend liga",
      "eventId": "1012478",
      "home": "Lions",
      "away": "Peninsula",
      "startTime": "2026-08-30T07:00:00.000Z",
      "slug": "/en/kladjenje/sport/1/match/1012478",
      "score": {
        "home": "1",
        "away": "1"
      },
      "matchClock": {
        "period": "Prvo poluvreme",
        "periodId": "PERIOD_1",
        "minute": 34,
        "second": 47
      },
      "statistics": {
        "football": {
          "home": { "yellowCards": 0, "redCards": 0, "corners": 0 },
          "away": { "yellowCards": 0, "redCards": 0, "corners": 1 }
        }
      },
      "moreInfo": {
        "sportId": 1,
        "competitionId": 3769,
        "source": "page",
        "matchNumber": 17119,
        "totalOddsCount": 166,
        "lbMatchId": 73849462,
        "status": "Prvo poluvreme"
      },
      "markets": [
        {
          "canonicalMarket": "OVER_UNDER",
          "rawName": "Ukupno golova",
          "period": "FULL_TIME",
          "line": 3.5,
          "isActive": true,
          "marketId": "30:FULL_TIME@3.5",
          "selections": [
            { "canonicalOutcome": "UNDER", "rawName": "manje", "odds": 2.3, "line": 3.5, "isActive": true, "selectionId": "272906571" },
            { "canonicalOutcome": "OVER", "rawName": "više", "odds": 1.55, "line": 3.5, "isActive": true, "selectionId": "272906566" }
          ],
          "moreInfo": { "gameId": 30, "sovType": "MARGIN" }
        }
        /* ... 43 more markets */
      ]
    }
  ]
}

Match Results — Scores Kept for 30 Days

GET /api/mozzart/results?sport=tennis&page=1&limit=5
{
  "total": 16,
  "page": 1,
  "limit": 5,
  "totalPages": 4,
  "hasNextPage": false,
  "results": [
    {
      "sport": "tennis",
      "league": "CHL Como (q)",
      "eventId": "1016589",
      "home": "Nedic Andrej",
      "away": "Garbero Filippo Francesco",
      "startTime": "2026-08-30T08:00:00.000Z",
      "slug": "/en/kladjenje/sport/5/match/1016589",
      "score": {
        "home": "0",
        "away": "0",
        "info": "40-30"
      },
      "matchClock": {
        "period": "1. set",
        "periodId": "PERIOD_1"
      },
      "statistics": {
        "sets": {
          "home": [2],
          "away": [0],
          "homeServe": true
        }
      },
      "moreInfo": {
        "sportId": 5,
        "competitionId": 8856,
        "source": "page",
        "matchNumber": 18582,
        "totalOddsCount": 16,
        "lbMatchId": 74171300,
        "status": "1. set"
      }
    }
  ]
}

Why Use PulseScore for Mozzart Data

12 Sports With Full Market Coverage

Pre-match odds from Mozzart across 12 sports — Soccer, Basketball, Tennis, Table Tennis, Volleyball, Handball, Ice Hockey, Baseball, American Football, Darts, Futsal, and Esports — with paginated league and event endpoints and the complete market list for every fixture.

Around 100 Markets Per Soccer Match

Mozzart runs one of the deepest soccer boards in the Balkans: a typical fixture carries ~100 markets and past 450 individual prices — team totals, exact-goals ladders, half-time/full-time, correct score, corners, cards, player goals, and Mozzart's own kombinazzije combination bets — all mapped onto the same canonical market types every other bookmaker on PulseScore uses.

The Serbian Board, Verbatim

League and market names arrive exactly as Mozzart prints them — 'Engleska 1', 'Nemačka 1 W', 'Konačan ishod', 'Dupla šansa', 'Mozzart šansa' — and every single selection ships a plain-Serbian moreInfo.description spelling the bet out ('Zbir golova na meču će biti najmanje 3'). Alongside it sit canonicalMarket, canonicalOutcome and period, so you can render the operator's own wording without ever parsing it.

Live Scores, Clock & Statistics

Live events carry the current score, a match clock with the Serbian period label ('Prvo poluvreme', 'HT', '3. set', '4. četvrtina') plus a language-neutral periodId (PERIOD_1…PERIOD_5, EXTRA_TIME_1) and minute/second on clocked sports, and — where published — a statistics block: yellow cards, red cards and corners for soccer and eSoccer, per-set point arrays and the current server for tennis, table tennis and volleyball.

Live WebSocket Streaming

Real-time push of every in-play event for the chosen sport, broadcast roughly every second with live scores, the match clock, and statistics. All 12 sports are subscribable, including Mozzart's busy esports board — eSoccer, eBasketball, eIce Hockey, League of Legends, Dota 2 and Counter-Strike 2. PRO, MAX, and ULTRA plans only.

30-Day Results Mirror

The results feed mirrors Mozzart's in-play board: every event that goes live is stored with the last score, match clock and statistics the board published and kept for 30 days. Filter by sport, league, or team name to settle bets, grade models, or backfill your own database across soccer, tennis, esports, table tennis, volleyball, baseball and basketball.

Frequently Asked Questions

What data does the Mozzart API provide?

PulseScore provides pre-match odds, live in-play odds, and match results from Mozzart (mozzartbet.com), the Belgrade-founded operator that is the largest sportsbook across Serbia and the Balkans and also runs boards throughout Africa, across 12 sports. Each event includes normalized market data with canonical market types, selections, and decimal odds, plus the raw Serbian market and outcome names exactly as Mozzart displays them.

What sports are covered?

The 12 sports Mozzart publishes markets for: Soccer, Basketball, Tennis, Table Tennis, Volleyball, Handball, Ice Hockey, Baseball, American Football, Darts, Futsal, and Esports. Every sport exposes /leagues, /leagues/:league/events, /events (paginated), and /events/:eventId and can be subscribed to over WebSocket. Esports currently publishes its leagues and a busy in-play board rather than pre-match fixtures, so its /events endpoint can legitimately come back empty.

How are leagues and outcomes named?

In Serbian (Latin script) — this is the raw operator board, kept verbatim. League names are usually country plus tier: 'Engleska 1', 'Nemačka 1', 'Argentina 1 - Klausura', with a W suffix for women's competitions ('Danska 1 W') and a (q) suffix for qualifiers; international brands keep their own names ('MLB', 'WNBA', 'Evroliga'), and tennis draws are prefixed by tour code (GSM / GSW for the men's and women's Grand Slams, CHL for Challengers, UTR for UTR events). There is no country field — the country is folded into the league name. Market rawName values are Mozzart's own labels such as 'Konačan ishod', 'Dupla šansa', 'Ukupno golova na meču', 'Hendikep' and 'Poluvreme - Kraj', including branded specials like 'Mozzart šansa' and the kombinazzije combination markets; selections are named '1', 'X', '2', '1X', 'više' / 'manje' and so on, each with a plain-Serbian moreInfo.description. The canonical fields — canonicalMarket, canonicalOutcome, and period — are identical across every bookmaker on PulseScore.

Does it include match results?

Yes. /api/mozzart/results mirrors Mozzart's in-play board: every event that goes live is stored with the last score, match clock, and statistics the board published and kept for 30 days. Entries are snapshots rather than a settlement record — read matchClock.periodId to see how far a match had progressed. Filter by sport, league, or team (exact name, case-insensitive), look up a single result with /results/events/:eventId, or discover covered sports with /results/sports. Soccer, esports, tennis, table tennis, and volleyball results also carry a statistics block.

How are the markets structured?

All markets use a canonical format: each market has a type (e.g., MATCH_RESULT, OVER_UNDER, ASIAN_HANDICAP), period (FULL_TIME, FIRST_HALF, FIRST_SET), and selections with decimal odds and handicap lines where applicable. Mozzart also exposes a composite marketId encoding the board's game id, period and line ('30:FULL_TIME@2.5'), and moreInfo with gameId, side, sovType and player on player markets. The same structure is shared across all sports and all bookmakers on PulseScore — write your integration once.

Is there a free tier?

Yes. The BASIC plan is free and includes 500 API requests per month. Upgrade to PRO, MAX, or ULTRA for unlimited requests.

Does the Mozzart API support live in-play data?

Yes. Live in-play events are available via REST (/api/mozzart/live-events, /live-events/sports, /live-events/events/:eventId) and via WebSocket at wss://api.pulsescore.net/api/mozzart/ws/live. The WebSocket pushes every in-play event for the subscribed sport roughly every second, including the live score, a match clock with the Serbian period label and a language-neutral periodId, and statistics — cards and corners for soccer and eSoccer, per-set point arrays and the current server for tennis, table tennis, and volleyball. PRO, MAX, and ULTRA plans only.

Start Using the Mozzart API Today

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