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
| Feed | Purpose |
|---|---|
| Books | The bookmakers configured for your key |
| Sports | Sport IDs and their type |
| Sport Competitions | Competitions with props coverage (player_props flag) |
| Sport Event Player Props | All prop markets for one event, grouped by player |
| Player Props Change Log | Events whose prop odds changed in the last five minutes |
| Player Mappings | URN 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
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 inLast, Firstform, and the player'scompetitor_id - Outcome
typevalues pair asoverandunder; each carries the prop line intotalwith the opening line inopen_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
totalas 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
totalandodds_americanacross the books array - Player pages: join props to season statistics via Player Mappings GUIDs
Updated 20 days ago
