Winamax DE Data API

Winamax DE API for German Pre-Match, Live & Results Data

Access Winamax's German sportsbook through one API — Bundesliga, 2. Bundesliga, DEL, BBL and the German handball and volleyball leagues alongside the Premier League, LaLiga, NHL, NBA, MLB and the Top 14, across 13 sports. The board is German end to end, every market carries a canonical type and a Sportradar-style market ID, every selection a decimal price, and every live event per-period scores. REST and WebSocket, one API key.

What a Winamax DE API Response Looks Like

GET /api/winamax-de/soccer/leagues/Bundesliga/events?limit=3
{
  "total": 40,
  "events": [
    {
      "eventId": "72513212",
      "away": "1. FC Köln",
      "country": "Deutschland",
      "home": "Hamburger SV",
      "league": "Bundesliga",
      "live": false,
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "Ergebnis",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "HSV",
              "odds": 2.6,
              "isActive": true,
              "selectionId": "2150987819"
            },
            {
              "canonicalOutcome": "DRAW",
              "rawName": "Unentschieden",
              "odds": 3.65,
              "isActive": true,
              "selectionId": "2150987820"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "Köln",
              "odds": 2.45,
              "isActive": true,
              "selectionId": "2150987821"
            }
          ],
          "marketId": "1|type=prematch"
        },
        {
          "canonicalMarket": "OVER_UNDER",
          "rawName": "Anzahl Tore",
          "period": "FULL_TIME",
          "line": 1,
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "OVER",
              "rawName": "Über 1",
              "odds": 1.04,
              "isActive": true,
              "selectionId": "2151000944",
              "line": 1
            },
            {
              "canonicalOutcome": "UNDER",
              "rawName": "Unter 1",
              "odds": 12.5,
              "isActive": true,
              "selectionId": "2151000945",
              "line": 1
            }
          ],
          "marketId": "18|total=1"
        }
      ],
      "moreInfo": {
        "site": "/sportwetten/match/72513212",
        "tournamentId": 42,
        "srTournamentId": "sr:tournament:35",
        "round": "4. S."
      },
      "slug": "/sportwetten/match/72513212",
      "sport": "soccer",
      "startTime": "2026-09-19T13:30:00.000Z",
      "updatedAt": "2026-09-19T11:34:39.957Z"
    },
    {
      "eventId": "72513210",
      "away": "1. FSV Mainz 05",
      "country": "Deutschland",
      "home": "Borussia Mönchengladbach",
      "league": "Bundesliga",
      "live": false,
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "Ergebnis",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "M'Gladbach",
              "odds": 3,
              "isActive": true,
              "selectionId": "2150980616"
            },
            {
              "canonicalOutcome": "DRAW",
              "rawName": "Unentschieden",
              "odds": 3.9,
              "isActive": true,
              "selectionId": "2150980617"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "Mainz 05",
              "odds": 2.1,
              "isActive": true,
              "selectionId": "2150980618"
            }
          ],
          "marketId": "1|type=prematch"
        },
        {
          "canonicalMarket": "OVER_UNDER",
          "rawName": "Anzahl Tore",
          "period": "FULL_TIME",
          "line": 2,
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "OVER",
              "rawName": "Über 2",
              "odds": 1.21,
              "isActive": true,
              "selectionId": "2150991720",
              "line": 2
            },
            {
              "canonicalOutcome": "UNDER",
              "rawName": "Unter 2",
              "odds": 4.4,
              "isActive": true,
              "selectionId": "2150991721",
              "line": 2
            }
          ],
          "marketId": "18|total=2"
        }
      ],
      "moreInfo": {
        "site": "/sportwetten/match/72513210",
        "tournamentId": 42,
        "srTournamentId": "sr:tournament:35",
        "round": "4. S."
      },
      "slug": "/sportwetten/match/72513210",
      "sport": "soccer",
      "startTime": "2026-09-19T13:30:00.000Z",
      "updatedAt": "2026-09-19T11:34:39.957Z"
    },
    {
      "eventId": "72513208",
      "away": "SC Freiburg",
      "country": "Deutschland",
      "home": "Eintracht Frankfurt",
      "league": "Bundesliga",
      "live": false,
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "Ergebnis",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "Frankfurt",
              "odds": 2.45,
              "isActive": true,
              "selectionId": "2150987830"
            },
            {
              "canonicalOutcome": "DRAW",
              "rawName": "Unentschieden",
              "odds": 3.8,
              "isActive": true,
              "selectionId": "2150987831"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "Freiburg",
              "odds": 2.5,
              "isActive": true,
              "selectionId": "2150987832"
            }
          ],
          "marketId": "1|type=prematch"
        },
        {
          "canonicalMarket": "OVER_UNDER",
          "rawName": "Anzahl Tore",
          "period": "FULL_TIME",
          "line": 1,
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "OVER",
              "rawName": "Über 1",
              "odds": 1.04,
              "isActive": true,
              "selectionId": "2151000285",
              "line": 1
            },
            {
              "canonicalOutcome": "UNDER",
              "rawName": "Unter 1",
              "odds": 14.5,
              "isActive": true,
              "selectionId": "2151000286",
              "line": 1
            }
          ],
          "marketId": "18|total=1"
        }
      ],
      "moreInfo": {
        "site": "/sportwetten/match/72513208",
        "tournamentId": 42,
        "srTournamentId": "sr:tournament:35",
        "round": "4. S."
      },
      "slug": "/sportwetten/match/72513208",
      "sport": "soccer",
      "startTime": "2026-09-19T13:30:00.000Z",
      "updatedAt": "2026-09-19T11:34:39.957Z"
    }
  ]
}

In-Play — Score, Match Clock & Per-Period Scores

GET /api/winamax-de/live-events?sport=soccer&limit=1
{
  "total": 57,
  "page": 1,
  "limit": 1,
  "totalPages": 57,
  "hasNextPage": true,
  "hasPrevPage": false,
  "sport": "soccer",
  "events": [
    {
      "eventId": "73441646",
      "away": "Tondela",
      "country": "Portugal",
      "home": "Imortal DC",
      "league": "Taca de Portugal",
      "markets": [
        {
          "canonicalMarket": "MATCH_RESULT",
          "rawName": "Ergebnis",
          "period": "FULL_TIME",
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "HOME",
              "rawName": "Imortal DC",
              "odds": 0,
              "isActive": false,
              "selectionId": "2176283551"
            },
            {
              "canonicalOutcome": "DRAW",
              "rawName": "Unentschieden",
              "odds": 1000,
              "isActive": true,
              "selectionId": "2176283552"
            },
            {
              "canonicalOutcome": "AWAY",
              "rawName": "Tondela",
              "odds": 1,
              "isActive": true,
              "selectionId": "2176283553"
            }
          ],
          "marketId": "1|type=live"
        },
        {
          "canonicalMarket": "OVER_UNDER",
          "rawName": "Anzahl Tore",
          "period": "FULL_TIME",
          "line": 6.5,
          "isActive": true,
          "selections": [
            {
              "canonicalOutcome": "OVER",
              "rawName": "Über 6,5",
              "odds": 1.68,
              "isActive": true,
              "selectionId": "2176290754",
              "line": 6.5
            },
            {
              "canonicalOutcome": "UNDER",
              "rawName": "Unter 6,5",
              "odds": 2.05,
              "isActive": true,
              "selectionId": "2176290755",
              "line": 6.5
            }
          ],
          "marketId": "18|total=6.5"
        }
      ],
      "matchClock": {
        "minute": 72,
        "second": 34,
        "period": "2. HZ",
        "periodId": "7",
        "running": true
      },
      "moreInfo": {
        "site": "/sportwetten/match/73441646",
        "tournamentId": 207,
        "srTournamentId": "sr:tournament:336",
        "periodName": "2. HZ"
      },
      "periodScores": {
        "home": [
          1,
          0
        ],
        "away": [
          3,
          2
        ],
        "labels": [
          "1",
          "2"
        ]
      },
      "score": {
        "home": "1",
        "away": "5"
      },
      "settlement": {
        "source": "winamax",
        "state": "in_play",
        "final": false,
        "inPlay": true,
        "lastSeenAt": "2026-09-19T11:36:11.180Z"
      },
      "slug": "/sportwetten/match/73441646",
      "sport": "soccer",
      "startTime": "2026-09-19T10:00:00.000Z",
      "statistics": {
        "sets": {
          "home": [
            1,
            0
          ],
          "away": [
            3,
            2
          ]
        }
      },
      "updatedAt": "2026-09-19T11:36:11.680Z"
    }
  ]
}

Results — 30 Days of In-Play History

GET /api/winamax-de/results?sport=soccer&limit=20
{
  "total": 70,
  "page": 1,
  "limit": 20,
  "totalPages": 4,
  "hasNextPage": true,
  "hasPrevPage": false,
  "results": [
    {
      "eventId": "72341174",
      "away": "Mansfield Town",
      "country": "England",
      "home": "Burton Albion",
      "league": "League One",
      "matchClock": {
        "minute": 5,
        "second": 50,
        "period": "1. HZ",
        "periodId": "6",
        "running": true
      },
      "moreInfo": {
        "site": "/sportwetten/match/72341174",
        "tournamentId": 3,
        "srTournamentId": "sr:tournament:24",
        "round": "7. S.",
        "periodName": "1. HZ"
      },
      "periodScores": {
        "home": [
          0
        ],
        "away": [
          0
        ],
        "labels": [
          "1"
        ]
      },
      "score": {
        "home": "0",
        "away": "0"
      },
      "settlement": {
        "source": "winamax",
        "state": "in_play",
        "final": false,
        "inPlay": true,
        "lastSeenAt": "2026-09-19T11:36:04.334Z"
      },
      "slug": "/sportwetten/match/72341174",
      "sport": "soccer",
      "startTime": "2026-09-19T11:30:00.000Z",
      "statistics": {
        "sets": {
          "home": [
            0
          ],
          "away": [
            0
          ]
        }
      },
      "updatedAt": "2026-09-19T11:36:04.834Z"
    },
    {
      "eventId": "69456612",
      "away": "Wuxi Wuguo",
      "country": "China",
      "home": "Nanjing City",
      "league": "League One",
      "matchClock": {
        "minute": 5,
        "second": 36,
        "period": "1. HZ",
        "periodId": "6",
        "running": true
      },
      "moreInfo": {
        "site": "/sportwetten/match/69456612",
        "tournamentId": 3583,
        "srTournamentId": "sr:tournament:782",
        "round": "24. S.",
        "periodName": "1. HZ"
      },
      "periodScores": {
        "home": [
          0
        ],
        "away": [
          0
        ],
        "labels": [
          "1"
        ]
      },
      "score": {
        "home": "0",
        "away": "0"
      },
      "settlement": {
        "source": "winamax",
        "state": "in_play",
        "final": false,
        "inPlay": true,
        "lastSeenAt": "2026-09-19T11:35:56.020Z"
      },
      "slug": "/sportwetten/match/69456612",
      "sport": "soccer",
      "startTime": "2026-09-19T11:30:00.000Z",
      "statistics": {
        "sets": {
          "home": [
            0
          ],
          "away": [
            0
          ]
        }
      },
      "updatedAt": "2026-09-19T11:35:56.521Z"
    },
    {
      "eventId": "69456616",
      "away": "Foshan Nanshi FC",
      "country": "China",
      "home": "Dingnan Ganilan FC",
      "league": "League One",
      "matchClock": {
        "minute": 5,
        "second": 53,
        "period": "1. HZ",
        "periodId": "6",
        "running": true
      },
      "moreInfo": {
        "site": "/sportwetten/match/69456616",
        "tournamentId": 3583,
        "srTournamentId": "sr:tournament:782",
        "round": "24. S.",
        "periodName": "1. HZ"
      },
      "periodScores": {
        "home": [
          0
        ],
        "away": [
          0
        ],
        "labels": [
          "1"
        ]
      },
      "score": {
        "home": "0",
        "away": "0"
      },
      "settlement": {
        "source": "winamax",
        "state": "in_play",
        "final": false,
        "inPlay": true,
        "lastSeenAt": "2026-09-19T11:35:58.570Z"
      },
      "slug": "/sportwetten/match/69456616",
      "sport": "soccer",
      "startTime": "2026-09-19T11:30:00.000Z",
      "statistics": {
        "sets": {
          "home": [
            0
          ],
          "away": [
            0
          ]
        }
      },
      "updatedAt": "2026-09-19T11:35:58.603Z"
    }
  ]
}

Why Use PulseScore for Winamax DE Data

A German Board, Canonically Mapped

Market names come through exactly as winamax.de prints them — Ergebnis, Doppelte Chance, Anzahl Tore, Tordifferenz (Handicap), Genaues Ergebnis, Schießen beide Mannschaften ein Tor?, Torschütze — with German country names and the comma decimals of the selections (Über 2,5). Every market also carries a canonicalMarket and every selection a canonicalOutcome, so a MATCH_RESULT / HOME price lines up with the same market on Winamax France, bwin DE or any other book on PulseScore without translating a word.

Sportradar IDs on Every Event and Market

Each event carries moreInfo.srTournamentId (sr:tournament:35 for the Bundesliga) next to Winamax's own numeric tournament ID and the round, and every marketId is written in Sportradar form — 1|type=prematch for the 1X2, 18|total=2.5 for a totals line, 223|hcp=-6.5 for a spread, 199|variant=sr:correct_score:below:5-5 for a correct score. If you already key other feeds on Sportradar IDs, Winamax DE lines up with them without a name-matching step.

Match-Day Boards Worth Polling

Winamax DE lists fixtures weeks ahead as a one-market 1X2 header and prices the full board on match day: Bundesliga, LaLiga and Serie A fixtures ran 109 markets on a Saturday afternoon, BBL basketball up to 181, ice hockey a uniform 40 across the SHL, Liiga and National League, darts 47 with the 180s board priced line by line. The header tells you the schedule; the board arrives when the market does.

Per-Period Scores on Every Live Sport

Live documents carry periodScores with home and away arrays and matching labels on every sport — goals per half on soccer, points per quarter on basketball, runs per inning on baseball, points per set on tennis and volleyball — plus a score, a match clock with the German period label and a numeric periodId, statistics.sets with the serve on tennis, and a settlement block. Live soccer boards average 58 markets and peak past 90.

30-Day Results Mirror With a Country on Every Row

Every match that goes in play is written to the results archive and updated in place for 30 days with the last score, match clock and per-period scores the board published. Every row carries a country, so the country filter and /results/countries cover the whole archive, and the settlement block tells you whether the row is still live or has been marked final.

REST Plus WebSocket Streaming

Poll the REST endpoints for pre-match boards, leagues and results, or subscribe over WebSocket for in-play pushes roughly every second. All 13 sports are subscribable on PRO, MAX and ULTRA plans, and one PulseScore API key works across Winamax DE and every other bookmaker on the platform.

Frequently Asked Questions

What data does the Winamax DE API provide?

PulseScore provides pre-match and live odds from Winamax Germany (winamax.de), the GGL-licensed German edition of Winamax, across 13 sports, with a 30-day results archive. Events carry normalized market data with canonical market types and outcomes, decimal odds, the league and country, Sportradar tournament and market IDs, and the winamax.de match-page slug.

How is Winamax DE different from the Winamax API?

They are two separately priced books. Winamax DE is the German-licensed sportsbook with a German-language board, German country names, 13 sports including darts, and the German leagues — Bundesliga, 2. Bundesliga, 3. Liga, DEL, BBL and the handball and volleyball Bundesligas. Winamax (winamax.fr) is the French ANJ-licensed book with a French board and 16 sports. Both share the same document shape and Sportradar-style IDs, so the same client code reads either.

Which sports are covered?

Thirteen: Soccer, Basketball, Ice Hockey, Handball, Tennis, Volleyball, Baseball, Darts, Rugby Union, Rugby League, American Football, Boxing and Australian Rules. There is no racing and no esports on this book. Call /sport-availability for what is on right now rather than hard-coding the list.

Why do some fixtures have only one market?

Winamax DE prices in two stages. Every fixture is listed weeks ahead as a one-market header — the 1X2 (Ergebnis) with marketId 1|type=prematch — and the full board is published on match day. On a Saturday snapshot, that afternoon's Bundesliga, LaLiga and Serie A fixtures carried 109 markets each while every fixture from Sunday on sat at one. Poll the event again as kick-off approaches, or subscribe to the WebSocket once it goes in play.

Are the market and selection IDs stable?

marketId is a Sportradar-style market type plus specifier, not a per-event key: 1|type=prematch is the 1X2 on every fixture, 18|total=2.5 is the 2.5 goals line on every fixture that has one. Key a market on eventId plus marketId; the same marketId never repeats inside one event. selectionId is globally unique — 6,345 distinct across 6,345 soccer selections on the snapshot — so use it when you want one key that never collides.

Are the market names in German?

Yes, exactly as winamax.de prints them: Ergebnis, Sieger, Doppelte Chance, Anzahl Tore, Genaues Ergebnis, Torschütze, Halbzeit/reg. Spielzeit, with Ja/Nein and Über/Unter selections and a comma decimal in selection labels (Über 2,5). Country names are German too (Deutschland, Spanien, Südkorea). Every market also carries a language-independent canonicalMarket and every selection a canonicalOutcome, and the numeric line sits on the market, so nothing needs parsing.

How do I get only finished matches from the results endpoint?

Read settlement.final client-side. Winamax DE's results collection has no settlement.final index, so unlike some books there is no ?final= query parameter here. The archive is a 30-day mirror of the live feed: rows are written from the first in-play sighting and updated in place, so a row can be a mid-match snapshot the feed stopped refreshing. settlement.lastSeenAt tells you when it was last touched.

Is live in-play data available?

Yes — /api/winamax-de/live-events over HTTP and a WebSocket for streaming. Live documents carry the in-play board, a score with the numbers as strings, a match clock with the German period label and a numeric periodId, per-period scores on every sport, statistics.sets and a settlement block. Live retention is 120 seconds, so documents that stop being refreshed drop out, and a suspended market keeps its last odds with isActive false.

How do I connect to the Winamax DE WebSocket?

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

Live events are pushed roughly every second over WebSocket and expire 120 seconds after their last refresh over HTTP. Pre-match boards and leagues carry a one-hour freshness window, and results are retained for 30 days. Every document carries createdAt and updatedAt timestamps so you can measure freshness yourself.

How do I join Winamax DE events to other bookmakers?

Join on the canonical fields. canonicalMarket, canonicalOutcome and period mean the same thing on every book PulseScore serves, so a soccer MATCH_RESULT / HOME price from Winamax DE lines up with the same market from bwin DE, Merkur Bets or Winamax France. Match the fixture on home, away and startTime, or on moreInfo.srTournamentId if your other feeds carry Sportradar tournament IDs — Winamax's eventId is its own numeric ID and is the same on the Winamax FR and DE books for the same fixture.

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

Start Using the Winamax DE API Today

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