Odds API by market / Bundesliga

Bundesliga Moneyline API

Live h2h odds across every book that posts it, in one REST call — and, unlike any other odds API, every one of those outcomes settled against the official result once play ends.

No credit card. 1,000 requests / day on the free tier.

What Bundesliga moneyline is

The straight win market: one price per side, no handicap. Soccer and some three-way sports add a Draw outcome, so the outcomes array is two entries for US sports and three where a draw is possible.

How we settle it. Settled off the final score. Three-way markets grade the Draw leg explicitly rather than pushing.

94
books quoting it on the next event
12/12
of the next Bundesliga events carry it right now
6,486
outcomes settled in the last 21 days

Every number on this page is measured against the live API, never copied from a spec sheet. Last measured 14 November 2026.

Books posting Bundesliga moneyline

Measured live, not listed from a spec. Coverage moves — a book that has not put its board up yet will not appear until it does, which is exactly what this list is for.

AdmiralBetAdmiralBet DEBet25Bet99Bet9jabet-at-homeBetclicBetclic PTBetfair ExchangeBetikaBetMGMBetOnline.agBetr AUBetRiversBetUSBetway ZABookMaker.euBovadaCodereCodere MXCourtsideDanske SpilDraftKingsElabeteplay24EurobetFanDuelFliffFortuna CZFortuna PLGenybetGermania SportHard Rock BetHeritage SportsInterwettenJazz SportsJouez SportKalshiLadbrokesLadbrokes BELiveScore BetLowVig.agLV BETMarca ApuestasMaxBetMeridianbetMerkurbetsMerkurXtipMise-o-jeuMozzart BetNetBet RONovigOlyBetPaddy PowerPalmerbetPame StoiximaPinnaclePlacardPlayAlbertaPMUPolymarketPolymarket USPSKSazkaSBOBETSoccerbetSolverdeSportiumSportna loterijaSportPesaSportyBet NGSportzinoStoiximanStrendusSTSSupabetsSuperSportSX BetSynot TipTe ApuestotheScore BetThrillzzTipicotipp3TippmixTonyBetTotalbetTOTOUnibetVeikkausWilliam Hill ITWinamaxWplayYouWager

Line shopping across all of them is one request — every book arrives in the same bookmakers array, not one call per book. Add ?bookmakers= to narrow it, or use /best-line for the best price per line already ranked.

Recently settled Bundesliga moneyline outcomes

These are real rows out of the API, not an illustration. Each one was a price on a board before the event and carries the actual figure it was graded against afterwards. No other odds API returns that last column — they stop at the price.

6,486 moneyline outcomes settled in the last 21 days across 108 books. The 12 most recent:

BetActualResult
Draw—lost
Hoffenheim—won
Draw—lost
Hoffenheim—won
Schalke 04—lost
Schalke 04—lost
Borussia Dortmund—won
Draw—lost
Eintracht Frankfurt—lost
Draw—lost
Schalke 04—lost
TSG Hoffenheim—won

Hit rate, last 21 days

33.3% of 6486 settled moneyline legs hit (2162 yes, 4324 no). Counted on the YES side only — books that price this two-way contribute their Over leg, not both. That is the base rate across the whole priced field, not a per-player figure.

Per-player hit rates and L5 / L10 / L20 splits live on /trends.

Live response

Captured from the real endpoint on Cologne @ Bayern Munich, trimmed to one book and three outcomes so the shape stays readable. The full response carries every book and every line, alternates included, in the same call.

{
  "home_team_key": "bayern",
  "away_team_key": "koln",
  "home_team_id": "espn.soccer:132",
  "away_team_id": "espn.soccer:122",
  "home_team_logo_url": "https://a.espncdn.com/i/teamlogos/soccer/500/132.png",
  "away_team_logo_url": "https://a.espncdn.com/i/teamlogos/soccer/500/122.png",
  "id": "684082",
  "sport_key": "soccer_bundesliga",
  "home_team": "Bayern Munich",
  "away_team": "Cologne",
  "commence_time": "2026-11-20T19:30:00Z",
  "live": false,
  "is_outright": false,
  "tournament": null,
  "tour": null,
  "last_update": "2026-11-14T15:56:10.226323Z",
  "merged_from_event_ids": null,
  "bookmakers": [
    {
      "key": "admiralbet",
      "title": "AdmiralBet",
      "last_update": "2026-11-14T15:55:15.254216Z",
      "link": null,
      "app_link": null,
      "pregame_only": false,
      "book_event_id": null,
      "markets": [
        {
          "key": "h2h",
          "description": "1X2",
          "last_update": "2026-11-14T15:55:15.254216Z",
          "period": null,
          "suspended_at": null,
          "team": null,
          "line_type": "main",
          "outcomes": [
            {
              "name": "Bayern Munich",
              "description": "",
              "price": -1250,
              "point": null,
              "book_updated_at": null,
              "book_version": null,
              "payout_multiplier": null,
              "dfs_odds_type": null,
              "last_change_at": "2026-11-14T10:19:28.919636Z",
              "last_seen_at": "2026-11-14T15:55:15.254216Z",
              "liquidity": null,
              "liquidity_updated_at": null,
              "line_gap": null,
              "book_outcome_id": null,
              "outcome_id": null,
              "player_id": null,
              "side": "home"
            },
            {
              "name": "FC Koln",
              "description": "",
              "price": 1875,
              "point": null,
              "book_updated_at": null,
              "book_version": null,
              "payout_multiplier": null,
              "dfs_odds_type": null,
              "last_change_at": "2026-11-14T10:19:28.919636Z",
              "last_seen_at": "2026-11-14T15:55:15.254216Z",
              "liquidity": null,
              "liquidity_updated_at": null,
              "line_gap": null,
              "book_outcome_id": null,
              "outcome_id": null,
              "player_id": null,
              "side": "away"
            },
            {
              "name": "Draw",
              "description": "",
              "price": 925,
              "point": null,
              "book_updated_at": null,
              "book_version": null,
              "payout_multiplier": null,
              "dfs_odds_type": null,
              "last_change_at": "2026-11-13T09:57:17.885320Z",
              "last_seen_at": "2026-11-14T15:55:15.254216Z",
              "liquidity": null,
              "liquidity_updated_at": null,
              "line_gap": null,
              "book_outcome_id": null,
              "outcome_id": null,
              "player_id": null,
              "side": "draw"
            }
          ]
        }
      ]
    }
  ]
}

The response shape is the-odds-api compatible — events, bookmakers, markets, outcomes — so migrating is usually a base URL change.

Try it

1. List Bundesliga events to get an event id:

curl "https://api.prop-line.com/v1/sports/soccer_bundesliga/events?apiKey=YOUR_API_KEY"

2. Pull moneyline for one game across every book — this exact URL works right now:

curl "https://api.prop-line.com/v1/sports/soccer_bundesliga/events/684082/odds?apiKey=YOUR_API_KEY&markets=h2h"

3. After the game, get the graded outcomes with the actual stat:

curl "https://api.prop-line.com/v1/sports/soccer_bundesliga/events/684082/results?apiKey=YOUR_API_KEY"

Steps 1 and 2 run on the free tier. Step 3 — prop resolution — starts on Hobby at $9/mo. See pricing.

Get your free Bundesliga odds API key

1,000 requests / day. No credit card. The same key covers every sport and every market — not just this one.

Free tier includes 1,000 requests/day. Upgrade anytime.