Similar Bets widget (BetSlip Recommendation) is a front-end widget that provides bet recommendations based on existing selection in the bet slip.
Punters past activity
General betting trends
Overall betting volume
Seasonal variations
New discovery and engagement patterns
info
Similarity requirement
This widget requires at least one event ID in the similarEventIds array to generate recommendations. It analyzes these events to find matches with similar characteristics (sport, status, betting patterns).
Recommendation type
Similar events: List of events that are similar to the events in the bet slip.
Integration options
The widget can be placed next to or inside the bet slip displaying events that are similar to those that have already been added to the bet slip.
The filters object provides optional filtering to refine similar event recommendations. Note: recommendationType is automatically set to "similar" and cannot be changed.
Property
Type
Default
Description
sport
object
undefined
Sport filter configuration.
sport.available
array<string|number>
[]
Array of Sportradar sport IDs to limit similar event recommendations. Empty array or omitted shows similar events from all sports. Example: [1] restricts to soccer similar events only. Useful when bet slip contains single-sport selections and you want to maintain sport consistency. See Sports Reference.
sport.sportNames
boolean
false
Display mode for sport indicators. When true, shows sport names as text labels. When false, shows sport-specific icons. Typically keep for compact display in bet slip.
Theming customization allows to tailor the appearance of Bet Recommendation widgets to meet specific needs and preferences. In the context of the Bet Recommendation widget, customization refers to the ability to modify the default styling of the widget by applying custom CSS properties to the various HTML elements that make up the widget.
Widget comes with pre-existing styling but can be customized by applying custom CSS properties to its different HTML elements. The widget's custom class selectors and supported CSS properties are listed below.
All custom classes must be nested within the .sr-bb.sr-br-betslip selector class. This ensures that the custom styles only apply to that widget and not to other elements on the page.
Mandatory Configuration
The filters property is required for this widget to function correctly. It defines the recommendation logic and basic data constraints.
warning
Similar Recommendations Requirement
When using the similar recommendation type, you must provide the similarEventIds identifier to specify the reference matches. Refer to Getting Identifiers for more details.
The onItemClick callback is fired whenever the user interacts with the widget. The first argument is a target string that identifies the interaction type; the second argument is a data object containing contextual information.
target value
Trigger
Key data properties
"externalOutcome"
User clicks a single outcome button
externalEvent, externalMarket, externalOutcome
"externalOutcomes"
User clicks multiple outcomes at once (e.g. combo card)
Array of { externalEvent, externalMarket, externalOutcome }
"externalEvent"
User clicks an event header/card
externalEvent
"externalCompetition"
User clicks a competition/league name
Note: Widgets support callbacks on outcome clicks — the onItemClick handler receives target === "outcome" and a data object containing externalEvent, externalMarket and externalOutcome. Use this for custom outcome callbacks (e.g., add-to-betslip, analytics, modals).
The widget also exposes onTrack for event tracking analytics. See the tracking guide for details.
To keep the widget's selected-outcome state in sync with your own bet slip (i.e. show outcomes as selected when they were added outside the widget), use registerOnBetSlipChange inside registerAdapter.
javascript
// 1. Track your bet slip statelet changeCallback;let betSlipState = { betslip: [], combinedOddsValue: undefined };// 2. Notify the widget whenever the bet slip changesfunction onBetSlipChanged
An adapter is a software component developed by the Sportradar engineering team that bridges the Bet Recommendation widgets and your platform's API. It retrieves data from your API and feeds it to the widget, ensuring seamless communication between the two systems.
Before adapter development begins, confirm and align your API contract with the Sportradar engineering team. Integration requires two SIR calls:
SIR method
Purpose
SIR('registerAdapter', ...)
Configure the adapter that retrieves and displays data from your API.
Limit recommendations as the bet slip grows, and hide the widget when it is full:
javascript
function updateSimilarBets() { const selections = betSlip.getSelections(); const eventIds = selections.map((s) => s.eventId); if (eventIds.length === 0) { hideSimilarBets(); return;
false
time
object
undefined
Time/status filter configuration.
time.available
array<string>
[]
Array of time filter options. Options: "live" (only live similar events), "not_started" (only upcoming similar events). Example: ["not_started"] shows only upcoming similar events. Useful to match bet slip event timing (if bet slip has only pre-match bets, show only pre-match similar events).
time.active
array<string>
[]
Initially active time filters. Can select multiple from available array. Example: ["not_started"] starts showing only upcoming events.
country
object
undefined
Country/region filter configuration.
country.available
array<string|number>
undefined
Array of country identifiers to limit similar events geographically. Example: ["GB", "DE", "ES"] shows only similar events from UK, Germany, Spain. Useful for geo-compliance or regional betting preferences. See Getting Identifiers.
league
object
undefined
League/tournament filter configuration.
league.available
array<string|number>
undefined
Array of tournament/league identifiers to limit similar events by competition. Example: ["sr:tournament:17", "sr:tournament:34"] shows only similar events from Premier League and Bundesliga. Useful when bet slip contains events from specific leagues. See Getting Identifiers.
'GB'
,
'DE'
,
'ES'
,
'IT'
]
// European countries
},
league: {
available: [
'sr:tournament:17', // Premier League
'sr:tournament:34', // Bundesliga
]
}
}
background-color, color, border-radius
srct-br-card__divider
border-color
srct-br-outcome
background-color, color, border-radius
srct-br-outcome--selected
background-color, color, border-radius
srct-br-outcome--disabled
background-color, color, border-radius
srct-br-outcome__name
font-size, color
srct-br-outcome__value
font-size, color
srct-br-eventinfo
font-size, color
srct-br-eventinfo__info
font-size
srct-br-eventinfo__icon
color
srct-br-eventinfo__time
font-size, color
srct-br-eventinfo__status
font-size, color
srct-br-eventinfo__name
font-size, color
srct-br-scoreboard
font-size, color
srct-br-scoreboard__teams
font-size, color
srct-br-scoreboard__scores
font-size, color
srct-br-scoreboard__score-1
font-size, color
srct-br-scoreboard__score-2
font-size, color
Basic bet slip sidebar integration using current event IDs from the user's bet slip.