Integration GuidesDocs
Coverage MatrixDocumentationChange LogLog InContact Us
Integration Guides

Retrieving Player Props

This integration scenario retrieves player prop markets (player-level betting markets such as total bases, strikeouts, or receptions) using the Sport Event Player Props feed and its companions.

This scenario is commonly used to:

  • Display prop markets per player alongside game odds
  • Compare a player's line and price across sportsbooks
  • Track prop line movement against opening values
  • Join prop markets to player statistics through ID mappings


Overview

The Player Props package mirrors the Prematch structure with one addition: markets nest under the player they belong to. A response for a game groups players_props per player, each carrying that player's markets, books, and outcomes; alongside it, a players_markets section carries event-scoped player markets. Props are pre-match markets, and a player's markets appear once that player is active on a team roster.

Sport Competitions (player_props flag) → Sport Event Player Props → Player Props Change Log loop



Relevant Feeds

FeedPurpose
BooksThe bookmakers configured for your key
SportsSport IDs and their type
Sport CompetitionsCompetitions with props coverage (player_props flag)
Sport Event Player PropsAll prop markets for one event, grouped by player
Player Props Change LogEvents whose prop odds changed in the last five minutes
Player MappingsURN to GUID translation for players

Daily Sport Player Props (by sport and date) and Competition Player Props (by competition) provide batched pulls of the same payload shape.



High-Level Workflow

Player Props LoopConfirm coverage, pull per event, batch when needed, refresh what moved
CoverageSport Competitionsfilter player_props=true
Event propsSport Event Player Propsmarkets grouped per player
Batch (optional)Daily Sport Player PropsCompetition Player Propsthe daily feed pages one event at a time
Refresh loopPlayer Props Change Log→re-pull only the events it lists
Cadences come from Update Frequencies; the change-log loop is on Monitoring Odds Changes, and the window is five minutes.


Integration Steps


1. Confirm Props Coverage

The player_props flag on Sport Competitions identifies the competitions with prop coverage:

GET https://api.sportradar.com/oddscomparison-player-props/trial/v2/en/sports/sr:sport:3/competitions.json
x-api-key: YOUR_API_KEY
{
  "generated_at": "2026-07-20T16:30:26+00:00",
  "competitions": [
    {
      "id": "sr:competition:109",
      "name": "MLB",
      "gender": "men",
      "markets": true,
      "futures": true,
      "player_props": true,
      "category": {
        "id": "sr:category:16",
        "name": "USA",
        "country_code": "USA"
      }
    }
  ]
}

2. Pull Props for an Event

Sport Event Player Props takes the same sr:sport_event: ID used across the other odds APIs. The full response for this game carries 21 players with up to eight markets each; the snippet is trimmed to one player and one market with two books:

GET https://api.sportradar.com/oddscomparison-player-props/trial/v2/en/sport_events/sr:sport_event:63301085/players_props.json
x-api-key: YOUR_API_KEY
{
  "generated_at": "2026-07-20T16:33:06+00:00",
  "sport_event_players_props": {
    "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
        }
      ]
    },
    "players_props": [
      {
        "player": {
          "id": "sr:player:848589",
          "name": "Swanson, Dansby",
          "competitor_id": "sr:competitor:3627"
        },
        "markets": [
          {
            "id": "sr:market:926",
            "name": "total bases (incl. extra innings)",
            "is_live": false,
            "books": [
              {
                "id": "sr:book:25080",
                "name": "consensus",
                "removed": false,
                "outcomes": [
                  {
                    "id": "sr:outcome:12",
                    "type": "over",
                    "odds_decimal": "1.617",
                    "odds_american": "-162",
                    "odds_fraction": "617/1000",
                    "open_odds_decimal": "1.617",
                    "open_odds_american": "-162",
                    "open_odds_fraction": "617/1000",
                    "total": "0.5",
                    "open_total": "0.5",
                    "external_outcome_id": "1d817ef9-d44c-3cfe-9011-0c801fdfa4e5",
                    "removed": false
                  },
                  {
                    "id": "sr:outcome:13",
                    "type": "under",
                    "odds_decimal": "2.210",
                    "odds_american": "+121",
                    "odds_fraction": "121/100",
                    "open_odds_decimal": "2.210",
                    "open_odds_american": "+121",
                    "open_odds_fraction": "121/100",
                    "total": "0.5",
                    "open_total": "0.5",
                    "external_outcome_id": "7f3ae50c-74fb-37dd-99f8-3e674ebde221",
                    "removed": false
                  }
                ]
              },
              {
                "id": "sr:book:32219",
                "name": "WilliamHillNewJersey",
                "removed": false,
                "external_sport_event_id": "627a61ed-4b9f-4ed2-a328-896b0e3d903a",
                "external_market_id": "93b0289d-2ca1-39e6-b6a5-c292303f9809",
                "outcomes": [
                  {
                    "id": "sr:outcome:12",
                    "type": "over",
                    "odds_decimal": "1.617",
                    "odds_american": "-162",
                    "odds_fraction": "617/1000",
                    "open_odds_decimal": "1.617",
                    "open_odds_american": "-162",
                    "open_odds_fraction": "617/1000",
                    "total": "0.5",
                    "open_total": "0.5",
                    "external_outcome_id": "1d817ef9-d44c-3cfe-9011-0c801fdfa4e5",
                    "removed": false
                  },
                  {
                    "id": "sr:outcome:13",
                    "type": "under",
                    "odds_decimal": "2.210",
                    "odds_american": "+121",
                    "odds_fraction": "121/100",
                    "open_odds_decimal": "2.210",
                    "open_odds_american": "+121",
                    "open_odds_fraction": "121/100",
                    "total": "0.5",
                    "open_total": "0.5",
                    "external_outcome_id": "7f3ae50c-74fb-37dd-99f8-3e674ebde221",
                    "removed": false
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}
<?xml version="1.0" ?>
<sport_event_players_props xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.sportradar.com/sportsapi/oddscomparison-player-props/v2" generated_at="2026-07-20T16:33:10+00:00" xsi:schemaLocation="http://schemas.sportradar.com/sportsapi/oddscomparison-player-props/v2 https://schemas.sportradar.com/sportsapi/oddscomparison-player-props/v2/schemas/sport_event_players_props.xsd">
  <sport_event id="sr:sport_event:63301085" start_time="2026-07-21T00:05:00+00:00" start_time_confirmed="true" status="not_started">
    <competitors>
      <competitor id="sr:competitor:3627" name="Chicago Cubs" country="USA" country_code="USA" abbreviation="CHC" qualifier="home" rotation_number="922"/>
      <competitor id="sr:competitor:3648" name="Detroit Tigers" country="USA" country_code="USA" abbreviation="DET" qualifier="away" rotation_number="921"/>
    </competitors>
  </sport_event>
  <players_props>
    <player_props>
      <player id="sr:player:848589" name="Swanson, Dansby" competitor_id="sr:competitor:3627"/>
      <markets>
        <market id="sr:market:926" name="total bases (incl. extra innings)" is_live="false">
          <books>
            <book id="sr:book:25080" name="consensus" removed="false">
              <outcomes>
                <outcome id="sr:outcome:12" type="over" odds_decimal="1.617" odds_american="-162" odds_fraction="617/1000" open_odds_decimal="1.617" open_odds_american="-162" open_odds_fraction="617/1000" total="0.5" open_total="0.5" external_outcome_id="1d817ef9-d44c-3cfe-9011-0c801fdfa4e5" removed="false"/>
                <outcome id="sr:outcome:13" type="under" odds_decimal="2.210" odds_american="+121" odds_fraction="121/100" open_odds_decimal="2.210" open_odds_american="+121" open_odds_fraction="121/100" total="0.5" open_total="0.5" external_outcome_id="7f3ae50c-74fb-37dd-99f8-3e674ebde221" removed="false"/>
              </outcomes>
            </book>
            <book id="sr:book:32219" name="WilliamHillNewJersey" removed="false" external_sport_event_id="627a61ed-4b9f-4ed2-a328-896b0e3d903a" external_market_id="93b0289d-2ca1-39e6-b6a5-c292303f9809">
              <outcomes>
                <outcome id="sr:outcome:12" type="over" odds_decimal="1.617" odds_american="-162" odds_fraction="617/1000" open_odds_decimal="1.617" open_odds_american="-162" open_odds_fraction="617/1000" total="0.5" open_total="0.5" external_outcome_id="1d817ef9-d44c-3cfe-9011-0c801fdfa4e5" removed="false"/>
                <outcome id="sr:outcome:13" type="under" odds_decimal="2.210" odds_american="+121" odds_fraction="121/100" open_odds_decimal="2.210" open_odds_american="+121" open_odds_fraction="121/100" total="0.5" open_total="0.5" external_outcome_id="7f3ae50c-74fb-37dd-99f8-3e674ebde221" removed="false"/>
              </outcomes>
            </book>
          </books>
        </market>
        <!-- ... additional markets omitted for brevity ... -->
      </markets>
    </player_props>
    <!-- ... additional players omitted for brevity ... -->
  </players_props>
</sport_event_players_props>

Reading a prop market:

  • The player object carries the sr:player: ID, the name in Last, First form, and the player's competitor_id
  • Outcome type values pair as over and under; each carries the prop line in total with the opening line in open_total
  • All three odds formats plus opening odds appear exactly as in prematch markets
  • A book's line can differ from another book's line for the same market; compare on total as well as price

3. Batch Pulls by Date or Competition

For a whole slate, Daily Sport Player Props returns the same payload per event for a sport and UTC date, returning one sport event per page; iterate with the start parameter, using the X-Max-Results header as the page count. Competition Player Props batches by competition instead.


4. Keep Props Fresh with the Change Log

The Player Props Change Log lists the events whose prop odds changed in its five-minute window, with the change moment in player_props_odds_change:

GET https://api.sportradar.com/oddscomparison-player-props/trial/v2/en/players_props_changelog.json
x-api-key: YOUR_API_KEY
{
  "generated_at": "2026-07-20T16:30:28+00:00",
  "status": {
    "from": 1784564728,
    "to": 1784565028
  },
  "changes": [
    {
      "type": "sport_event",
      "id": "sr:sport_event:63303061",
      "player_props_odds_change": 1784565025
    },
    {
      "type": "sport_event",
      "id": "sr:sport_event:63302901",
      "player_props_odds_change": 1784565025
    },
    {
      "type": "sport_event",
      "id": "sr:sport_event:63301693",
      "player_props_odds_change": 1784565024
    },
    {
      "type": "sport_event",
      "id": "sr:sport_event:72529074",
      "player_props_odds_change": 1784565022
    }
  ]
}

Re-pull Sport Event Player Props only for the returned IDs. The window and polling rules match the prematch change log; see Monitoring Odds Changes.


5. Handle Suspended Props

Books and outcomes flip to removed: true rather than disappearing, and an outcome at decimal 1.00 with removed: true was never offered (common on under selections). Once an event starts, its players_props list empties, since props are pre-match markets, so an empty list for a started or completed event is expected rather than an error. This example shows one book's market taken down while the rest of the payload stays priced:

{
  "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
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

6. Join Props to Player Data

Use Player Mappings to translate sr:player: IDs to the GUIDs used by the League Specific stat APIs. The feed returns 1000 rows per page (over 115,000 mappings in total); walk start and cache the table daily. See ID Handling.

{
  "generated_at": "2026-07-20T16:33:17+00:00",
  "mappings": [
    {
      "external_id": "036f914a-aad0-4ff1-9771-54f9e963d1b8",
      "id": "sr:player:996277"
    },
    {
      "external_id": "252f4b13-6abb-45dc-ae85-f822b817cb51",
      "id": "sr:player:1605464"
    },
    {
      "external_id": "31a50d54-ef46-47a8-863c-6f4d4e5aa184",
      "id": "sr:player:607928"
    },
    {
      "external_id": "3f64e9a6-6e1e-499b-aec8-764c99f634b2",
      "id": "sr:player:857970"
    }
  ]
}


Common Use Cases

  • Props board per game: step 2 per event from your slate, rendered player by player
  • Best-line shopping: for each player market, compare total and odds_american across the books array
  • Player pages: join props to season statistics via Player Mappings GUIDs

Did this page help you?