Flash Bet presents users with betting markets derived from live match events. Each betting market is displayed for a limited duration (default: 20 seconds, configurable by contacting the Sportradar integration team) as a First-In-First-Out (FIFO) queue. Users can quickly place bets on the presented outcomes, enhancing engagement and the overall betting experience.
Flash Bet is triggered only when the chat is open at the time a match event appears. Opening the chat after the event occurs will not trigger Flash Bet for that event.
For testing purposes, you can use the "Test Channel" feature in the Moderation UI to simulate match events and observe Flash Bet behavior.
To enable Flash Bet within your Virtual Stadium widget, set the enableFlashBet property to true during widget initialization:
enableFlashBet boolean optional
Enables the Flash Bet functionality.
Enable Flash Bet:
SIR('addWidget', '#sr-vs-widget', 'virtualStadium', {
enableFlashBet: true,
// ... other configuration
});For a channel to have Flash Bet functionality, it must have a Sportradar entity id set.
Flash Bet requires adapter registration to function properly. See the appropriate adapter type based on your integration needs:
When a user clicks on an outcome within the Flash Bet interface, the widget invokes your onAction callback. Virtual Stadium emits two action types for the same click:
| Action type | Payload | Notes |
|---|---|---|
FlashBetOutcome | ExternalOutcome | Legacy shape — same fields as before |
addSelectionsToBetSlip | { selections, markets?, events? } | V2 selection bag; events is a single-element array for one click |
Treat displayed odds as a snapshot only — re-validate the selection and fetch authoritative prices from your platform before placement. 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: "FlashBetOutcome" or "addSelectionsToBetSlip".
data ExternalOutcome or V2 selection bag required
For FlashBetOutcome, see ExternalOutcome object below. For addSelectionsToBetSlip, data.selections contains adapter v2 SelectionOutcome entries; optional events and markets bags carry hydrated adapter context.
Handling Flash Bet Actions:
function onAction
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.
Flash Bet event identifier: The widget reads relatedCompetitions[].clientId from channel info and sets externalEvent.externalId on the click payload. Configure the channel so the active match entry includes your bookmaker event id:
"relatedCompetitions": [{
"channelId": "test",
"srEntityId": "sr:match:71895968",
"clientId": "thisIsClientId"
}]The backend may return multiple related competitions; the widget uses the entry matching the active match. The UI handles a single event at a time.
Using external ids when available: 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 |
peninsula/flashBet/index.tsx, model/implementation/flashBet.ts | externalEvent.externalId from relatedCompetitions[].clientId |
peninsula/flashBet/outcomes.tsx | Dual FlashBetOutcome + addSelectionsToBetSlip emission; UF→external gate |
utils/itemClickHelpers/mapExternalOutcomeClick.ts | Mapping gate and fallback |
utils/itemClickHelpers/addSelectionsBags.ts | V2 addSelectionsToBetSlip bag shape |
Flash Bet Timer Settings let you control the timing parameters for flash bets across your organization. These settings determine both how long a flash bet remains visible to users when triggered and the maximum time it will wait if a bet stop occurs.
Important
You can view and request changes to your organization's flash bet settings. Any updates you request will be applied across all brands and operators, ensuring consistent flash bet timing for all users.
To adjust your flash bet settings, please contact our support team. We will review and apply the changes for your organization.
The ExternalOutcome object contains the data returned when a user selects an outcome in Flash Bet.
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 (FlashBetOutcome).
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 bookmaker event identifier. For Flash Bet, populated from relatedCompetitions[].clientId in channel info when configured.
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:71895968",
"srEventId": "sr:match:71895968",
"externalId": "thisIsClientId"
},
"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. externalEvent.externalId is populated from channel relatedCompetitions[].clientId (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
}
}
]
}