NEO.bet Data API

NEO.bet API for Pre-Match, Live & Results Data

Access pre-match and live odds from NEO.bet's German sportsbook across 18 sports — Soccer, Tennis, Ice Hockey, Basketball, Handball and more. Canonical market types next to the book's own market codes, ISO-2 countries, 104 soccer leagues across 73 countries, a 30-day results archive with a settlement scraper and a final filter, REST plus a real-time WebSocket feed. One API key for all bookmakers.

What a NEO.bet API Response Looks Like

GET /api/neobet/soccer/events?page=1&limit=5
{
  "total": 1193,
  "page": 1,
  "limit": 5,
  "totalPages": 239,
  "hasNextPage": true,
  "events": [
    {
      "sport": "soccer",
      "country": "DE",
      "league": "Bundesliga",
      "eventId": "NEO|FB-3973528",
      "home": "TSG Hoffenheim",
      "away": "VfB Stuttgart",
      "live": false,
      "startTime": "2026-09-12T13:30:00.000Z",
      "slug": "/de/Sportwetten/2026-09-12-TSG-Hoffenheim-vs-VfB-Stuttgart-3973528-FB-NEO",
      "moreInfo": {
        "countryLabel": "Deutschland",
        "leagueLabel": "Bundesliga",
        "tier": "2",
        "tradingType": "Regular",
        "status": "Pregame",
        "marketCount": 302,
        "bettingTypes": 291,
        "metadata": { "Arena": "SNP Arena (Sinsheim)", "Capacity": 30150, "TV": "" }
      },
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "Goal_RT_HC3W(0.0)",
          "marketId": "Goal_RT_HC3W(0.0)",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "1",
              "odds": 2.32,
              "isActive": true,
              "selectionId": "Goal_RT_HC3W(0.0)|1"
            },
            {
              "canonicalOutcome": "DRAW",
              "rawName": "X",
              "odds": 3.95,
              "isActive": true,
              "selectionId": "Goal_RT_HC3W(0.0)|X"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "2",
              "odds": 2.7,
              "isActive": true,
              "selectionId": "Goal_RT_HC3W(0.0)|2"
            }
          ]
        },
        {
          "canonicalMarket": "OVER_UNDER",
          "rawName": "Goal_RT_OU(2.5)",
          "marketId": "Goal_RT_OU(2.5)",
          "period": "FULL_TIME",
          "isActive": true,
          "line": 2.5,
          "selections": [
            {
              "canonicalOutcome": "OVER",
              "rawName": "Over",
              "odds": 1.36,
              "line": 2.5,
              "isActive": true,
              "selectionId": "Goal_RT_OU(2.5)|+"
            },
            {
              "canonicalOutcome": "UNDER",
              "rawName": "Under",
              "odds": 2.92,
              "line": 2.5,
              "isActive": true,
              "selectionId": "Goal_RT_OU(2.5)|-"
            }
          ]
        }
      ]
    }
  ]
}

In-Play — Score, Clock, Period Points & Settlement

GET /api/neobet/live-events?sport=soccer&limit=1
{
  "total": 12,
  "page": 1,
  "limit": 1,
  "sport": "soccer",
  "events": [
    {
      "sport": "soccer",
      "country": "SK",
      "league": "Cup",
      "eventId": "NEO|FB-4044856",
      "home": "SK Novohrad Lucenec",
      "away": "KFC Komarno",
      "startTime": "2026-09-08T14:00:00.000Z",
      "score": { "home": "0", "away": "0" },
      "matchClock": {
        "period": "HT2",
        "periodId": "HT2",
        "running": true,
        "minute": 59,
        "second": 19,
        "minutesLeftInPeriod": 30
      },
      "periodScores": {
        "home": [0, 0],
        "away": [0, 0],
        "labels": ["HT1", "HT2"]
      },
      "statistics": {
        "football": {
          "home": { "yellowCards": 0, "redCards": 0, "corners": 0 },
          "away": { "yellowCards": 0, "redCards": 0, "corners": 0 }
        }
      },
      "settlement": {
        "source": "neobet",
        "state": "in_play",
        "final": false,
        "inPlay": true,
        "lastSeenAt": "2026-09-08T15:18:13.518Z"
      },
      "moreInfo": {
        "countryLabel": "Slowakei",
        "leagueLabel": "Cup",
        "status": "Running",
        "section": "HT2",
        "marketCount": 31,
        "points": {
          "RT":  { "Goal": ["0", "0"], "Card": ["0", "0"], "RedCard": ["0", "0"] },
          "HT1": { "Goal": ["0", "0"], "Card": ["0", "0"], "RedCard": ["0", "0"] },
          "HT2": { "Goal": ["0", "0"], "Card": ["0", "0"] }
        }
      },
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "Goal_RT_HC3W(0.0)",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            { "canonicalOutcome": "HOME", "rawName": "1", "odds": 12.5, "isActive": true },
            { "canonicalOutcome": "DRAW", "rawName": "X", "odds": 3.3, "isActive": true },
            { "canonicalOutcome": "AWAY", "rawName": "2", "odds": 1.33, "isActive": true }
          ]
        },
        {
          "canonicalMarket": "DRAW_NO_BET",
          "rawName": "Goal_RT_HC2W(0.0)",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            { "canonicalOutcome": "HOME", "rawName": "1", "odds": 9, "isActive": true },
            { "canonicalOutcome": "AWAY", "rawName": "2", "odds": 1, "isActive": true }
          ]
        }
      ]
    }
  ]
}

Why Use PulseScore for NEO.bet Data

18 Sports, One German Board

Pre-match and live odds from NEO.bet's German sportsbook across Soccer, Tennis, Ice Hockey, Basketball, Handball, American Football, Baseball, Rugby League, Rugby Union, Volleyball, Darts, Australian Rules and Boxing, with season and tournament boards for Cycling, Formula 1, Motorsports, Golf and Snooker. Every one of the 18 is subscribable on the WebSocket.

Canonical Markets Next to the Book's Own Codes

NEO.bet prices on machine codes — Goal_RT_HC3W(0.0) is the three-way line, Goal_RT_OU(2.5) the total — and the feed keeps them in rawName and marketId. Every market also carries canonicalMarket and every selection canonicalOutcome, so you match markets across bookmakers without parsing a single code. Country is an ISO-2 code; the German display labels ride along in moreInfo.

104 Soccer Leagues Across 73 Countries

Around 1,200 soccer fixtures averaging 57 markets and peaking at 207 — Bundesliga and 2. Bundesliga, the Premier League, LaLiga, Serie A, Ligue 1 and Ligue 2, Eredivisie, the A-League and K-League 1, the European club competitions and national cups down to the Icelandic and Czech ones. American football goes deeper still, at 133 markets per game on average.

Fixture Lists Embedded in Leagues

League documents embed the competition's fixtures — from one to a few dozen — each with a trimmed one-market board, so a single /leagues call reads a whole competition's schedule. Outright boards live with the fixtures and are flagged with moreInfo.tradingType: Outright and an empty away, so they filter out in one condition.

Live WebSocket Streaming

Real-time push of every in-play event for the chosen sport, broadcast every ~1 second across all 18 sports. Live documents carry the running score, per-period scores, a points map keyed by NEO.bet's own period codes (HT1, HT2, Q1, SET1GAME10), cards and corners on soccer, and a settlement block that flips to final the moment a match ends. Basketball in-play boards reach 400 markets. PRO, MAX, and ULTRA plans only.

Settled Results With a Final Filter

Every match that goes in-play is mirrored into a 30-day archive, and when it ends the book's settlement scraper overwrites the row with the settled result — settlement.final true, plus how many markets and selections were settled. The collection is indexed on it, so /results takes final=true or final=false directly, alongside sport, league, country and team filters.

Frequently Asked Questions

What data does the NEO.bet API provide?

PulseScore provides pre-match and live odds from NEO.bet's German sportsbook (neo.bet) across 18 sports, plus a 30-day results archive fed by the book's settlement scraper. Each event includes normalized market data with canonical market types and selections carrying decimal odds, alongside NEO.bet's own market codes.

Which sports are covered?

Eighteen: Soccer, Tennis, Ice Hockey, Basketball, Handball, American Football, Baseball, Rugby League, Rugby Union, Volleyball, Darts, Australian Rules, Boxing, Cycling, Formula 1, Golf, Motorsports and Snooker. Each exposes /leagues, /leagues/:league/events, /events and /events/:eventId, and all 18 are subscribable on the WebSocket. Cycling, Formula 1, motorsports, golf and snooker are outright-only at the moment; fixtures appear as competitions start.

Is the feed in German?

Partly. The display labels are German — moreInfo.countryLabel (Deutschland, Island, Katar), moreInfo.leagueLabel and the outright board titles (Saisonwetten 2026/27) — but the fields you filter on are not: league is the feed's competition name (Bundesliga, Premier League, K-League 1, Challenger Genoa) and country is an ISO-2 code (DE, IS, KR). Market names are the book's machine codes (Goal_RT_HC3W(0.0), Goal_RT_OU(2.5)) and every market and selection also carries a canonical type, so nothing needs translating.

How are the market codes structured?

rawName and marketId hold NEO.bet's own code — Goal_RT_HC3W(0.0) is the three-way line, Goal_RT_OU(2.5) the 2.5 total, Goal_HT1_OU(0.5) the first-half total, Goal_RT_TeamOU(0.5,Home) a team total. Selection rawNames are the short labels (1 / X / 2, Over / Under) and selectionId is marketId|rawName. You never have to parse the codes: canonicalMarket (MATCH_RESULT, OVER_UNDER, ASIAN_HANDICAP, EUROPEAN_HANDICAP, DOUBLE_CHANCE, BOTH_TEAMS_TO_SCORE, CORRECT_SCORE, WINNING_MARGIN, ANYTIME_GOALSCORER and more) and canonicalOutcome (HOME / DRAW / AWAY / OVER / UNDER / YES / NO) are on every market and selection, and lined markets carry a numeric line.

How deep are the market boards?

Soccer fixtures average 57 markets and peak at 207 — three-way line, double chance, draw no bet, Asian and European handicaps, totals and team totals for the match and both halves, both teams to score, correct score, half-time result, winning margin, first team to score, odd/even, win-to-nil and a goalscorer card. American football is the deepest per game at 133 markets on average and 282 on marquee fixtures. Baseball averages 57, basketball and ice hockey 13, handball 3 and tennis 3. moreInfo.marketCount reports the book's full board rather than the number of markets in the document.

Where are the outright markets?

Outright and futures boards are stored with the fixtures of their sport and flagged explicitly: away is an empty string, home carries the German competition title (Saisonwetten 2026/27), moreInfo.tradingType is Outright instead of Regular, and the board is a single OTHER market with a Rank_ code listing every entrant. Filter on moreInfo.tradingType or a non-empty away for fixtures only. On soccer 72 of roughly 1,200 documents are outrights; on American football 14 of 30.

What do league documents contain?

The competition name, the ISO-2 country, the sport and a leagueId of the form soccer:AU:A-League — and the competition's fixtures embedded in the events array, from one to a few dozen per league, each with a trimmed one-market board. That makes /leagues a cheap way to read a whole competition's fixture list; /leagues/:league/events returns the full odds.

Does NEO.bet support live in-play data?

Yes. Live in-play events are available via REST (/live-events, /live-events/sports, /live-events/events/:eventId) and via WebSocket at wss://api.pulsescore.net/api/neobet/ws/live. Live documents carry the running score, per-period scores, moreInfo.points keyed by period, a settlement block and a match clock that uses NEO.bet's own period codes — HT1 and HT2 for the halves, Q1 to Q4 on basketball, SET1 on volleyball, and on tennis down to the game (SET1GAME10). Soccer counts up with minute and second and down with minutesLeftInPeriod while a half is under way; cards and corners ride along in statistics.football. Finished matches stay in the feed for up to two minutes with settlement.final true, so filter on settlement.inPlay for matches still running. Soccer and tennis dominate the in-play slate, with basketball boards of up to 400 markets.

Is there a WebSocket feed for live events?

Yes. PRO, MAX, and ULTRA plans get access to wss://api.pulsescore.net/api/neobet/ws/live, which pushes every in-play event for the subscribed sport every ~1 second. Pass key and sport as query parameters, with sport in kebab-case (ice-hockey, formula-1) — the WebSocket rejects the underscore form with close code 4004. All 18 sports are subscribable; a sport with nothing in play simply pushes count: 0. PRO supports 1 concurrent connection, MAX supports 3, ULTRA supports 6.

Does the API include match results?

Yes, and with a real settlement. Every match that goes in-play is mirrored into a 30-day archive as it runs, and when it ends NEO.bet's settlement scraper overwrites the row with the settled result: settlement.source becomes neobet-results, settlement.final is true, and settledMarkets, totalMarkets, settledSelections and totalSelections tell you how much of the board was settled. Because the collection is indexed on settlement.final, /api/neobet/results takes a final=true or final=false query parameter — no paging and filtering client-side. Results also filter by sport, league, country (ISO-2) and team, and /results/sports, /results/countries and /results/leagues expose the exact filter values. Note that periodScores on results is a map keyed by period code (RT, HT1, MATCH) with string values, not the arrays the live feed uses.

Can I access NEO.bet alongside other bookmakers with the same key?

Yes. A single API key gives you access to every bookmaker included in your plan — NEO.bet, AdmiralBet, Betano, Bwin, Tipsport, Bet365, PS3838, Betfair, and more. No need for separate keys or accounts.

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.

How do I authenticate with the API?

Sign up for a free account, generate an API key from your dashboard, and pass it via the X-Secret header. The same key works for every bookmaker API.

Start Using the NEO.bet API Today

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