Integration GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Odds Comparison Fundamentals

Every Odds Comparison v2 payload, in every package, is built from the same four building blocks: a sport event (or a future), its markets, the books offering each market, and each book's outcomes carrying the actual odds. This page explains that model once, so the scenario pages can focus on their workflows.



The Market Model

Each level nests inside the one above, and the chips on the right are the key fields carried at that level:

The Odds Comparison Market ModelEvent, markets, books, outcomes
Sport event: the game, with its competitors and start timesr:sport_event:statusstart_time
Market: one entry per offered market instance; the same ID can repeat with different namessr:market:nameis_live
Book: one entry per bookmaker pricing this market, flipping to removed when it comes downsr📖removedexternal_market_id
Outcome: the selections, each carrying every odds format plus its opening price and linesr:outcome:typeodds_decimal / american / fractionopen_odds_*handicap | total
The same containment applies in every package. Player Props adds a player grouping above the markets; Futures replaces the sport event with a dated outright market.

A market payload nests as follows:

  • sport_event: the game, with start_time (UTC), start_time_confirmed, a status (for example not_started), and the two competitors with qualifier of home or away and, for US sports, a rotation_number
  • markets: one entry per offered market instance, each with an sr:market: ID, a display name, and an is_live flag
  • books: inside each market, one entry per bookmaker currently or previously offering it, with the sr:book: ID, the bookmaker's own IDs for the event and market (external_sport_event_id, external_market_id), and a removed flag
  • outcomes: inside each book, the selections. Each outcome carries an sr:outcome: ID, a type, the odds in all three formats, the opening odds in all three formats, the bookmaker's own outcome ID (external_outcome_id), and a removed flag

Here is one complete market from an MLB game, trimmed to the winner market (the full response carries 27 markets):

{
  "generated_at": "2026-07-20T16:32:58+00:00",
  "sport_event": {
    "id": "sr:sport_event:63301085",
    "start_time": "2026-07-21T00:05:00+00:00",
    "start_time_confirmed": true,
    "status": "not_started",
    "competitors": [
      {
        "id": "sr:competitor:3627",
        "name": "Chicago Cubs",
        "country": "USA",
        "country_code": "USA",
        "abbreviation": "CHC",
        "qualifier": "home",
        "rotation_number": 922
      },
      {
        "id": "sr:competitor:3648",
        "name": "Detroit Tigers",
        "country": "USA",
        "country_code": "USA",
        "abbreviation": "DET",
        "qualifier": "away",
        "rotation_number": 921
      }
    ]
  },
  "markets": [
    {
      "id": "sr:market:251",
      "name": "winner (incl. extra innings)",
      "is_live": false,
      "books": [
        {
          "id": "sr:book:17324",
          "name": "MGM",
          "removed": false,
          "external_sport_event_id": "19803922",
          "external_market_id": "1542773883",
          "outcomes": [
            {
              "id": "sr:outcome:4",
              "type": "home",
              "odds_decimal": "1.870",
              "odds_american": "-115",
              "odds_fraction": "87/100",
              "open_odds_decimal": "1.870",
              "open_odds_american": "-115",
              "open_odds_fraction": "87/100",
              "external_outcome_id": "2253398329",
              "removed": false
            },
            {
              "id": "sr:outcome:5",
              "type": "away",
              "odds_decimal": "1.950",
              "odds_american": "-105",
              "odds_fraction": "20/21",
              "open_odds_decimal": "1.950",
              "open_odds_american": "-105",
              "open_odds_fraction": "20/21",
              "external_outcome_id": "2253398328",
              "removed": false
            }
          ]
        },
        {
          "id": "sr:book:18149",
          "name": "DraftKings",
          "removed": false,
          "external_sport_event_id": "34413809",
          "external_market_id": "1_85555146",
          "outcomes": [
            {
              "id": "sr:outcome:4",
              "type": "home",
              "odds_decimal": "1.877",
              "odds_american": "-114",
              "odds_fraction": "877/1000",
              "open_odds_decimal": "1.870",
              "open_odds_american": "-115",
              "open_odds_fraction": "87/100",
              "external_outcome_id": "0ML85555146_1",
              "removed": false
            },
            {
              "id": "sr:outcome:5",
              "type": "away",
              "odds_decimal": "1.952",
              "odds_american": "-105",
              "odds_fraction": "119/125",
              "open_odds_decimal": "1.952",
              "open_odds_american": "-105",
              "open_odds_fraction": "119/125",
              "external_outcome_id": "0ML85555146_3",
              "removed": false
            }
          ]
        },
        {
          "id": "sr:book:18186",
          "name": "FanDuel",
          "removed": false,
          "external_sport_event_id": "35841674",
          "external_market_id": "42.593016238",
          "outcomes": [
            {
              "id": "sr:outcome:4",
              "type": "home",
              "odds_decimal": "1.893",
              "odds_american": "-112",
              "odds_fraction": "893/1000",
              "open_odds_decimal": "1.926",
              "open_odds_american": "-108",
              "open_odds_fraction": "463/500",
              "external_outcome_id": "29166",
              "removed": false
            },
            {
              "id": "sr:outcome:5",
              "type": "away",
              "odds_decimal": "1.962",
              "odds_american": "-104",
              "odds_fraction": "481/500",
              "open_odds_decimal": "1.926",
              "open_odds_american": "-108",
              "open_odds_fraction": "463/500",
              "external_outcome_id": "29159",
              "removed": false
            }
          ]
        },
        {
          "id": "sr:book:25080",
          "name": "consensus",
          "removed": false,
          "outcomes": [
            {
              "id": "sr:outcome:4",
              "type": "home",
              "odds_decimal": "1.877",
              "odds_american": "-114",
              "odds_fraction": "877/1000",
              "open_odds_decimal": "1.926",
              "open_odds_american": "-108",
              "open_odds_fraction": "463/500",
              "external_outcome_id": "29166",
              "removed": false
            },
            {
              "id": "sr:outcome:5",
              "type": "away",
              "odds_decimal": "1.954",
              "odds_american": "-105",
              "odds_fraction": "477/500",
              "open_odds_decimal": "1.926",
              "open_odds_american": "-108",
              "open_odds_fraction": "463/500",
              "external_outcome_id": "29159",
              "removed": false
            }
          ]
        },
        {
          "id": "sr:book:27447",
          "name": "BetRivers",
          "removed": false,
          "external_sport_event_id": "1024788135",
          "external_market_id": "2670685555",
          "outcomes": [
            {
              "id": "sr:outcome:4",
              "type": "home",
              "odds_decimal": "1.910",
              "odds_american": "-110",
              "odds_fraction": "10/11",
              "open_odds_decimal": "1.910",
              "open_odds_american": "-110",
              "open_odds_fraction": "10/11",
              "external_outcome_id": "4265584995",
              "removed": false
            },
            {
              "id": "sr:outcome:5",
              "type": "away",
              "odds_decimal": "1.940",
              "odds_american": "-106",
              "odds_fraction": "47/50",
              "open_odds_decimal": "1.930",
              "open_odds_american": "-108",
              "open_odds_fraction": "93/100",
              "external_outcome_id": "4265584996",
              "removed": false
            }
          ]
        },
        {
          "id": "sr:book:28901",
          "name": "Bet365.US.NJ",
          "removed": false,
          "external_sport_event_id": "198179484",
          "external_market_id": "198179484-1096",
          "outcomes": [
            {
              "id": "sr:outcome:4",
              "type": "home",
              "odds_decimal": "1.820",
              "odds_american": "-122",
              "odds_fraction": "41/50",
              "open_odds_decimal": "1.820",
              "open_odds_american": "-122",
              "open_odds_fraction": "41/50",
              "external_outcome_id": "1730171000",
              "removed": false
            },
            {
              "id": "sr:outcome:5",
              "type": "away",
              "odds_decimal": "1.910",
              "odds_american": "-110",
              "odds_fraction": "10/11",
              "open_odds_decimal": "1.910",
              "open_odds_american": "-110",
              "open_odds_fraction": "10/11",
              "external_outcome_id": "1730170998",
              "removed": false
            }
          ]
        },
        {
          "id": "sr:book:32219",
          "name": "WilliamHillNewJersey",
          "removed": false,
          "external_sport_event_id": "627a61ed-4b9f-4ed2-a328-896b0e3d903a",
          "external_market_id": "519355b5-9e6a-3fd3-8a71-1d2c6fe668f5",
          "outcomes": [
            {
              "id": "sr:outcome:4",
              "type": "home",
              "odds_decimal": "1.870",
              "odds_american": "-115",
              "odds_fraction": "87/100",
              "open_odds_decimal": "1.870",
              "open_odds_american": "-115",
              "open_odds_fraction": "87/100",
              "external_outcome_id": "d0f324ca-5f78-3966-b3cf-a6fe468e8205",
              "removed": false
            },
            {
              "id": "sr:outcome:5",
              "type": "away",
              "odds_decimal": "1.952",
              "odds_american": "-105",
              "odds_fraction": "119/125",
              "open_odds_decimal": "1.952",
              "open_odds_american": "-105",
              "open_odds_fraction": "119/125",
              "external_outcome_id": "9821c272-d8a8-39e8-a679-9ae1189231c5",
              "removed": false
            }
          ]
        },
        {
          "id": "sr:book:40316",
          "name": "TheScore",
          "removed": false,
          "external_sport_event_id": "d0e0432a-9219-4884-b90e-720c34df0dab",
          "external_market_id": "c61a8bf6-2087-4b7a-b514-9318e9c07093",
          "outcomes": [
            {
              "id": "sr:outcome:4",
              "type": "home",
              "odds_decimal": "1.870",
              "odds_american": "-115",
              "odds_fraction": "87/100",
              "open_odds_decimal": "1.910",
              "open_odds_american": "-110",
              "open_odds_fraction": "10/11",
              "external_outcome_id": "164ee45b-dabb-4bb4-8bb7-44153b4caa2b",
              "removed": false
            },
            {
              "id": "sr:outcome:5",
              "type": "away",
              "odds_decimal": "1.950",
              "odds_american": "-105",
              "odds_fraction": "20/21",
              "open_odds_decimal": "1.910",
              "open_odds_american": "-110",
              "open_odds_fraction": "10/11",
              "external_outcome_id": "49135a11-9789-4e99-ad2a-97f9795b714c",
              "removed": false
            }
          ]
        }
      ]
    }
  ]
}


Market IDs and Market Names

A market ID identifies a market type; the name identifies the instance. The same sr:market: ID can appear multiple times in one response with different names. In the payload above, sr:market:1123 appears nine times: once each as 1st inning - winner through 9th inning - winner. Group and deduplicate by the pair of id and name, never by id alone.



Odds Formats and Line Values

Every outcome carries the price in all three formats simultaneously, so you never convert:

  • odds_decimal: global standard; the total return per unit staked (below 2.000 the selection is the favorite)
  • odds_american: US standard; negative values show the stake needed to win 100, positive values the winnings on a 100 stake
  • odds_fraction: UK standard; winnings relative to stake

The opening price is preserved beside the current price in all three formats (open_odds_decimal, open_odds_american, open_odds_fraction), so line movement since open is always visible in a single response.

Markets with a line carry it on each outcome:

  • Handicap and spread outcomes carry handicap and open_handicap
  • Total outcomes carry total and open_total

In this handicap market, the line held at 1.5 while the home price shortened from -182 to -175:

{
  "markets": [
    {
      "id": "sr:market:256",
      "name": "handicap (incl. extra innings)",
      "is_live": false,
      "books": [
        {
          "id": "sr:book:17324",
          "name": "MGM",
          "removed": false,
          "external_sport_event_id": "19803922",
          "external_market_id": "1542773886",
          "outcomes": [
            {
              "id": "sr:outcome:1714",
              "type": "home_handicap",
              "odds_decimal": "1.570",
              "odds_american": "-175",
              "odds_fraction": "4/7",
              "open_odds_decimal": "1.550",
              "open_odds_american": "-182",
              "open_odds_fraction": "11/20",
              "handicap": "1.5",
              "open_handicap": "1.5",
              "external_outcome_id": "2253398335",
              "removed": false
            },
            {
              "id": "sr:outcome:1715",
              "type": "away_handicap",
              "odds_decimal": "2.450",
              "odds_american": "+145",
              "odds_fraction": "29/20",
              "open_odds_decimal": "2.500",
              "open_odds_american": "+150",
              "open_odds_fraction": "3/2",
              "handicap": "-1.5",
              "open_handicap": "-1.5",
              "external_outcome_id": "2253398334",
              "removed": false
            }
          ]
        }
      ]
    }
  ]
}


The removed Flag

removed appears at two levels and is the market lifecycle signal:

  • Book level ("removed": true on a book): the bookmaker has suspended or taken down the whole market. The last known odds remain in the payload. Once an event goes live and the pre-match market comes down, that retained price is effectively the closing line; in-play prices continue in the Live Odds package (see Tracking Live Odds).
  • Outcome level ("removed": true on an outcome): that selection was suspended or removed while the rest of the market remains available.

An outcome flagged removed while showing decimal odds of 1.00 indicates a selection the bookmaker never actually offered; the Prematch FAQ covers this case.

In this example from a player props payload, one book has taken a market down while others still price it:

{
  "players_props": [
    {
      "player": {
        "id": "sr:player:848589",
        "name": "Swanson, Dansby",
        "competitor_id": "sr:competitor:3627"
      },
      "markets": [
        {
          "id": "sr:market:9005",
          "name": "total doubles (incl. extra innings)",
          "is_live": false,
          "books": [
            {
              "id": "sr:book:32219",
              "name": "WilliamHillNewJersey",
              "removed": true,
              "external_sport_event_id": "627a61ed-4b9f-4ed2-a328-896b0e3d903a",
              "external_market_id": "cf134bc7-665c-3510-88f1-fa8002ef3a54",
              "outcomes": [
                {
                  "id": "sr:outcome:12",
                  "type": "over",
                  "odds_decimal": "5.000",
                  "odds_american": "+400",
                  "odds_fraction": "4/1",
                  "open_odds_decimal": "5.000",
                  "open_odds_american": "+400",
                  "open_odds_fraction": "4/1",
                  "total": "0.5",
                  "open_total": "0.5",
                  "external_outcome_id": "a2df9397-7c94-3023-bf28-bcd500fdf505",
                  "removed": true
                },
                {
                  "id": "sr:outcome:13",
                  "type": "under",
                  "odds_decimal": "1.133",
                  "odds_american": "-752",
                  "odds_fraction": "133/1000",
                  "open_odds_decimal": "1.133",
                  "open_odds_american": "-752",
                  "open_odds_fraction": "133/1000",
                  "total": "0.5",
                  "open_total": "0.5",
                  "external_outcome_id": "d0010047-5be8-39c9-b56a-edff0d9ee348",
                  "removed": true
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

⚠️

Removed does not mean deleted

Markets and outcomes are not dropped from the payload when a bookmaker pulls them; they stay, flagged removed="true", retaining the last odds. Filter on the flag when displaying live boards, and use the retained values when you need closing lines.



The Consensus Book

consensus (sr:book:25080) is a calculated consensus line delivered alongside the individual bookmakers as a book of its own. Use it when you need a single representative price per market rather than a per-bookmaker comparison. It appears first in the Books feed of packages configured with it.



Bookmaker ID Universes

The Books feed lists every bookmaker configured for your key on that package, but not every book prices every market. In the winner-market example above, two books price the market; other configured books do not appear inside that market's books array. Treat the per-market books list, not the global Books feed, as the source of which bookmakers offer a given market.



Event Availability

Sport events appear in the schedule and odds feeds when odds become available for them, so a Daily Schedules response is the day's slate with odds, not the league's full fixture list. Events carry a status field (not_started before the game) and stay in the feeds for two weeks after they complete. If you need every fixture regardless of odds availability, source the schedule from the corresponding Sportradar sport API and join by ID through the mappings feeds (see ID Handling).


Did this page help you?