ID Handling
Odds Comparison uses Sportradar's URN identifier scheme (sr: IDs) across every package. This page covers the ID families you will handle, which of them are stable across products, and how to translate them to the GUID-based League Specific APIs (NFL, MLB, NBA, and the other US-style APIs) when you join odds to stats and schedules.
The URN Families
| Prefix | Identifies | Example |
|---|---|---|
sr:sport: | A sport | sr:sport:3 (Baseball) |
sr:competition: | A league or competition | sr:competition:109 (MLB) |
sr:category: | A category grouping competitions, usually a country | sr:category:43 (USA, American Football) |
sr:sport_event: | A single game | sr:sport_event:63301085 |
sr:competitor: | A team | sr:competitor:3627 (Chicago Cubs) |
sr:player: | A player | sr:player:848589 |
sr:book: | A bookmaker | sr:book:18149 (DraftKings) |
sr:market: | A market type (prematch and props) | sr:market:251 |
sr:iscreen_market: | A futures market | sr:iscreen_market:2761 (MLB World Series) |
sr:outcome: | An outcome type | sr:outcome:4 (home) |
Note the two market ID families: prematch and player prop markets use sr:market:, while futures markets use sr:iscreen_market:. They are different ID spaces; do not join one against the other.
IDs Are Consistent Across the Odds APIs
The same sport event carries the same sr:sport_event: ID in every Odds Comparison package and in the Probabilities API. For example, one MLB game returned data under the identical ID sr:sport_event:63301085 from all three of these feeds:
GET https://api.sportradar.com/oddscomparison-prematch/trial/v2/en/sport_events/sr:sport_event:63301085/sport_event_markets.jsonGET https://api.sportradar.com/oddscomparison-player-props/trial/v2/en/sport_events/sr:sport_event:63301085/players_props.jsonGET https://api.sportradar.com/probabilities/trial/v1/en/sport_events/sr:sport_event:63301085/probabilities.jsonDiscover an event once, then reuse its ID across packages. Competitor, player, competition, and book IDs are equally shared. Older Odds Comparison URLs wrote the same event identifier with an sr:match: prefix; the numeric ID is identical.
Translating to League Specific (GUID) IDs
Sportradar's League Specific APIs (NFL, MLB, NBA, NHL, and others) identify entities with GUIDs. Each Odds Comparison package carries five mappings feeds that pair the URN with its GUID so you can join odds to those products:
- Competition Mappings
- Competitor Mappings
- Player Mappings
- Sport Event Mappings
- Stage Mappings
Sport Event Mappings entries appear 14 days before an event, once odds are available for it.
GET https://api.sportradar.com/oddscomparison-prematch/trial/v2/en/competitions/mappings.json
x-api-key: YOUR_API_KEY{
"generated_at": "2026-07-20T16:30:21+00:00",
"mappings": [
{
"external_id": "64e90d00-9ea0-4c91-8292-e78414439d54",
"id": "sr:competition:8"
},
{
"external_id": "ea97fe54-4712-4bd7-b643-8409887f9f61",
"id": "sr:competition:16"
},
{
"external_id": "fdc32c0e-2a6a-4bbe-b855-41fef6369bfe",
"id": "sr:competition:17"
},
{
"external_id": "cd24a25b-3fc0-48fd-9c54-f793d51af976",
"id": "sr:competition:23"
}
]
}The response is trimmed here to the first four rows. In each mapping, id is the URN and external_id is the GUID used by the League Specific APIs.
Mappings feeds are paginatedMappings feeds return 1000 rows per page. The Player Mappings feed, for example, reports
X-Max-Results: 115218: over 115 pages. Walkstartin increments of 1000 untilX-Resultdrops below 1000, and cache the result; mappings change far less often than odds.
{
"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"
}
]
}The Same GUIDs Appear in the Probabilities API
The Probabilities API exposes each competition's GUIDs directly in a uuids field on its competition records. Those values match the external_id values from the Odds Comparison mappings feeds; for MLB, the Competition Mappings GUID 2fa448bc-fc17-4d3d-be03-e60e080fdc26 is one of the comma-separated values in the Probabilities uuids field for sr:competition:109. Whichever product you start from, you end up with the same join keys.
Bookmaker-Side IDs
Inside every market, each book carries the bookmaker's own identifiers alongside the Sportradar ones:
external_sport_event_id: the event in the bookmaker's systemexternal_market_id: the market in the bookmaker's systemexternal_outcome_id: the selection in the bookmaker's system
Their formats vary by bookmaker (integers, GUIDs, and composite strings all occur). Treat them as opaque strings, and use them when you need to reference a price back to the originating sportsbook's own catalog.
Practical Rules
- Persist URNs as your primary keys; they are stable across packages, tiers, and the Probabilities API
- Fetch and cache the mappings feeds once per day rather than per request
- Join to League Specific APIs via
external_idGUIDs; join across odds products via URNs directly - Never parse meaning out of an ID's numeric part; treat IDs as opaque
Updated 28 days ago
