Bet Insights is a module that provides unique, real-time (live) and pre-match insights for specific sporting events. These insights are generated based on match data supplied by Sportradar and can help users make more informed betting decisions.
Virtual Stadium Bet Insights extends the capabilities of the Sportradar Bet Insights widget, integrating seamlessly with your Virtual Stadium to display contextual betting information.
To enable Bet Insights within your Virtual Stadium widget, set the enableBetInsights property to true when initializing the widget:
enableBetInsights boolean optional
Enables the Bet Insights component.
SIR('addWidget', '#sr-vs-widget', 'virtualStadium', {
enableBetInsights: true,
...restProps
});For a channel to have Bet Insights functionality, it must have set Sportradar entity id.
Bet Insights requires adapter registration to function properly. See the appropriate adapter type based on your integration needs:
When a user selects an outcome, the widget invokes your onAction callback. Virtual Stadium emits two action types for the same click:
| Action type | Payload | Notes |
|---|---|---|
BetInsightsOutcome | ExternalOutcome | Legacy shape — same fields as before |
addSelectionsToBetSlip | { selections, markets?, events? } | V2 selection bag; events is a single-element array for one click |
Validate availability and re-price against your platform before adding to the bet slip — the odds in the payload are a snapshot only. See Handling Selections and Odds for the shared selection flow.
onAction (type: string, data: object) => void optional
Callback function triggered when specific events occur in the widget.
Parameters:
type string required
Action type: "BetInsightsOutcome" or "addSelectionsToBetSlip".
data ExternalOutcome or V2 selection bag required
For BetInsightsOutcome, see ExternalOutcome object below. For addSelectionsToBetSlip, data.selections contains adapter v2 SelectionOutcome entries; optional events and markets bags carry hydrated adapter context.
Handling Bet Insight Actions:
function onAction(type
forceExternalSelections)Set forceExternalSelections: true on the Virtual Stadium widget when your bet slip expects bookmaker (external) selection IDs instead of UF ids. See forceExternalSelections in the quick start for prerequisites.
Bet Insights runs inside the embedded insights widget; Virtual Stadium passes the prop through. For V2 UF selections, when forceExternalSelections is true and a mapper is available (adapter selectionUfToExternal or F3 via adapterDataSource: 'f3'), the widget emits external outcome/market/event ids in callbacks. If mapping is unavailable or fails, the payload uses UF ids (type: 'uf'). Selections that are already external pass through unchanged. V1 adapter integrations keep the previous behavior.
Payload type (on the ExternalOutcome object) is 'uf' or 'external' — not the onAction type string.
Behaviour documented here matches the widgets production branch and MR 15948 (BETS-30613):
| Source | What it proves |
|---|---|
virtualStadium/props.ts | forceExternalSelections prop passed to embedded Bet Insights |
components/betInsights/index.tsx | Prop forwarded to insights widget |
betInsights/model/insightsState.ts | UF→external mapping gate and fallback on outcome click |
utils/itemClickHelpers/mapExternalOutcomeClick.ts | Shared mapping helpers with Flash Bet |
utils/itemClickHelpers/addSelectionsBags.ts | V2 addSelectionsToBetSlip bag shape |
The ExternalOutcome object contains the data returned when a user selects an outcome in Bet Insights.
externalEvent Event required
Event information including teams, date, and venue. See Event object for details.
externalOutcome Outcome required
The selected outcome data. See Outcome object for details.
externalMarket Market required
The market containing the outcome. See Market object for details.
type string required
Selection identifier type: 'uf' or 'external'. When forceExternalSelections is enabled and external ids are available, this is 'external'. This is not the onAction type (BetInsightsOutcome).
ExternalOutcome Example:
Represents a single sporting event (e.g., match, race, or stage).
id string required
Unique identifier for the event.
srEventId string | number optional
Sportradar event identifier.
externalId string | number | null optional
Your external system identifier for the event.
Event Example:
{
"id": "sr:match:12345",
"srEventId": "sr:match:12345",
"externalId": null
}The Market object represents a betting market within individual bets.
id string | number required
Unique identifier for the market.
status object optional
Current status of the market. The available statuses are: active, deactivated suspended, settled or canceled.
name string required
Display name of the market (e.g., "Match Winner", "Total Goals").
visualTypeId string | number optional
The visual type identifier for the market.
specifier object optional
Market specifier configuration with value and displayedValue properties.
outcomes Outcome[] required
Array of possible outcomes for this market. See Outcome object for details.
srMarket object optional
Sportradar market information.
odds OddsObject optional
Odds information for the market.
Market Example:
The Outcome object represents a possible result or selection within a market.
id string | number required
Unique identifier for the outcome.
name string required
Display name of the outcome (e.g., "Team A", "Draw", "Under 2.5").
odds string | number optional
Odds for this outcome.
oddsDecimal number optional
Decimal representation of odds.
status object optional
Current status of the outcome.
Outcome Example:
{
"id": "4",
"name": "Player A",
"odds": "6.00"
{
"externalEvent": {
"id": "sr:match:12345",
"srEventId": "sr:match:12345",
"externalId": null
},
"externalOutcome": {
"id": "4",
"name": "Player A",
"odds": "6.00",
"oddsDecimal": 6,
"status": {
"isActive": true
}
},
"externalMarket": {
"id": "202",
"status": {
"isActive": true
},
"specifier": {
"value": "setnr=2",
"displayedValue": "2"
},
"name": "2nd set - winner",
"outcomes": [
{
"id": "4",
"name": "Player A",
"odds": "6.00",
"oddsDecimal": 6,
"status": {
"isActive": true
}
},
{
"id": "5",
"name": "Player B",
"odds": "1.08",
"oddsDecimal": 1.08,
"status": {
"isActive": true
}
}
]
},
"type": "uf"
}When forceExternalSelections: true and external ids are available, "type": "external" and outcome/market/event id fields contain bookmaker identifiers. See External selection IDs.
{
"id": "202",
"status": {
"status": "active"
},
"specifier": {
"value": "setnr=2",
"displayedValue": "2"
},
"name": "2nd set - winner",
"outcomes": [
{
"id": "4",
"name": "Player A",
"odds": "6.00",
"oddsDecimal": 6,
"status": {
"isActive": true
}
},
{
"id": "5",
"name": "Player B",
"odds": "1.08",
"oddsDecimal": 1.08,
"status": {
"isActive": true
}
}
]
}