Personalize Bet Settled

ootb_sports_bet_settled is an optional Sports event for Optimove Personalize. Send it when an identified customer’s accepted bet has been settled and its outcome is known.

Bet Placement is the minimum event required for standard Sports recommendations. Bet Settled adds outcome and value signals used by settlement-dependent methods, including Prior Win.

Send this event using the Server-Side Events API.

Before you begin

  • Implement the required Bet Placement event first.
  • Reuse the same customer, bet slip identifier, bet identifier and Inventory hierarchy keys reported at placement.
  • Send one settlement event for each selection or leg.
  • The referenced Sports Inventory hierarchy must still identify the same Category, Class, Type, Event, Market and Selection.

Example

{
  "tenant": "your_tenant_id",
  "timestamp": "2026-07-10T21:02:03Z",
  "event": "ootb_sports_bet_settled",
  "customer": "customer_12345",
  "context": {
    "ootb_betslip_key": "ticket_9001",
    "ootb_bet_date_time": "2026-07-09T14:22:00Z",
    "ootb_settled_date_time": "2026-07-10T21:02:00Z",
    "ootb_betslip_status": "win",
    "ootb_bet_key": "bet_10001",
    "ootb_bet_stake": 20,
    "ootb_bet_payout": 42,
    "ootb_bet_sel_stake": 20,
    "ootb_bet_sel_payout": 42,
    "ootb_odds_decimal_price": 2.1,
    "ootb_selection_key": "selection_man_utd",
    "ootb_selection_name": "Manchester United",
    "ootb_market_key": "market_match_result_7842",
    "ootb_market_name": "Match Result",
    "ootb_event_date_time": "2026-07-10T19:00:00Z",
    "ootb_event_key": "event_7842",
    "ootb_event_name": "Manchester United vs Liverpool",
    "ootb_meeting_key": "type_premier_league",
    "ootb_meeting_name": "Premier League",
    "ootb_class_key": "class_england",
    "ootb_class_name": "England",
    "ootb_discipline_key": "category_football",
    "ootb_discipline_name": "Football",
    "ootb_leg_num": 1,
    "ootb_leg_status": "Won",
    "ootb_bet_type": "Single",
    "ootb_num_selections": 1,
    "ootb_channel": "Desktop"
  }
}

Context fields

FieldRequiredTypePersonalize useNotes
ootb_betslip_keyYesStringLinks the settled leg to the ticket originally reported at placementReuse the exact placement value.
ootb_bet_date_timeYesString (date-time)Preserves the original interaction time for customer history and recencyReuse the accepted placement time as an ISO 8601 UTC timestamp. Do not replace it with settlement time.
ootb_settled_date_timeYesString (date-time)Establishes when the outcome became known and anchors Prior Win historySend the settlement time as an ISO 8601 UTC timestamp.
ootb_betslip_statusYesStringSupplies the final ticket state for outcome-aware methodsUse a stable final-status vocabulary such as win or loss. Keep it consistent with leg outcomes.
ootb_bet_keyYesStringLinks the settlement to the bet originally reported at placementReuse the exact placement value.
ootb_bet_stakeYesNumberSupplies overall bet value for outcome- and value-aware analysisMust be zero or greater. Use a JSON number without a currency symbol.
ootb_bet_sel_stakeYesNumberSupplies the amount attributable to this Selection for Prior Win scoringMust be zero or greater.
ootb_odds_decimal_priceYesNumberSupplies normalized odds used with stake and outcome dataMust be zero or greater. Keep the definition consistent with Bet Placement.
ootb_selection_keyYesStringJoins the outcome to the Sports Inventory SelectionMust exactly match Inventory selectionKey and the placement event.
ootb_selection_nameYesStringSupplies the winning or losing outcome name and supports name-based Prior Win logicKeep participant and team naming consistent with Inventory and placement data.
ootb_market_keyYesStringJoins the outcome to its Sports Inventory MarketMust exactly match Inventory marketKey.
ootb_market_nameYesStringSupplies readable market context for outcome-aware methodsUse the same name as Inventory where possible.
ootb_event_date_timeYesString (date-time)Preserves the fixture’s scheduled time for outcome historyReuse the event start time reported at placement.
ootb_event_keyYesStringJoins the result to its Sports Inventory Event or fixtureMust exactly match Inventory eventKey.
ootb_event_nameYesStringSupplies participant or team context used by Prior Win methodsKeep naming and delimiters consistent across placement, settlement and Inventory.
ootb_meeting_keyYesStringJoins the result to the Sports Inventory Type levelDespite the event field name, this maps to Inventory typeKey.
ootb_meeting_nameYesStringSupplies readable league, competition or meeting contextUse the Inventory Type name.
ootb_class_keyYesStringJoins the result to the Sports Inventory Class levelMust exactly match Inventory classKey.
ootb_class_nameYesStringSupplies readable Class contextUse the same name as Inventory where possible.
ootb_discipline_keyYesStringJoins the result to the Sports Inventory Category levelDespite the event field name, this maps to Inventory categoryKey.
ootb_discipline_nameYesStringSupplies the readable sport or disciplineUse the Inventory Category name.
ootb_leg_numYesNumberIdentifies which leg of the original ticket was settledMust be zero or greater. Reuse the placement leg number.
ootb_leg_statusYesStringIdentifies the outcome of this leg for Prior Win logicExamples include Won, Lost and Cashout. Use one stable vocabulary.
ootb_bet_typeYesStringPreserves the original bet structureReuse the placement value, such as Single, Multiple, System or Bet Builder.
ootb_num_selectionsYesNumberDescribes the complete ticket and expected number of leg settlementsMust be zero or greater. Send a whole number and reuse the placement value.
ootb_platformNoStringAccepted by the event schema but not currently retained by the Personalize Bet Settled mapperPrefer the platform originally reported at placement if you send it.
ootb_channelNoStringSupplies access-channel contextPrefer the channel originally reported at placement.
ootb_licenseNoStringSupplies regulatory or jurisdiction context where configuredUse the same license identifier as placement.
ootb_betslip_stakeNoNumberAccepted by the event schema but not currently retained by the Personalize Bet Settled mapperMust be zero or greater.
ootb_bet_payoutNoNumberSupplies total payout for the betMust be zero or greater. Use a JSON number.
ootb_betslip_payoutNoNumberAccepted by the event schema but not currently retained by the Personalize Bet Settled mapperMust be zero or greater. Do not confuse it with the payout for one leg.
ootb_bet_bonusNoNumberSupplies the bonus-funded portion of the betMust be zero or greater.
ootb_bet_sel_payoutNoNumberSupplies payout attributable to this SelectionMust be zero or greater.
ootb_bet_sel_bonusNoNumberSupplies bonus value attributable to this SelectionMust be zero or greater.
ootb_is_liveNoBoolean or integerAccepted by the event schema but not currently retained by the Personalize Bet Settled mapperPrefer JSON true or false. If integers are used, use 1 for live and 0 otherwise.
ootb_odds_numberNoNumberSupplies the numerator when fractional odds are also requiredSend it together with ootb_odds_denominator. Decimal odds remain required.
ootb_odds_denominatorNoNumberSupplies the denominator when fractional odds are also requiredSend it together with ootb_odds_number.
ootb_odds_american_priceNoNumberAccepted by the event schema but not currently retained by the Personalize Bet Settled mapperDecimal odds remain the required normalized representation.
ootb_leg_typeNoStringPreserves semantic detail for the legReuse the placement value where supplied.
ootb_each_wayNoBoolean or stringPreserves an each-way flag where applicablePrefer a Boolean and use the same representation as placement.
ootb_brandNoStringSupplies downstream brand or skin contextThe top-level tenant still determines event routing. Use a stable configured value when this context is needed.

Sports Inventory joins

Event contextInventoryMeaning
ootb_discipline_keycategoryKeySport or discipline
ootb_class_keyclassKeyClass
ootb_meeting_keytypeKeyCompetition, league, meeting or Type
ootb_event_keyeventKeyEvent or fixture
ootb_market_keymarketKeyMarket
ootb_selection_keyselectionKeySelection or outcome

All settlement keys should match both the original placement event and one valid path through Sports Inventory.

When this event is needed

Implement Bet Settled when your selected Personalize methods use known outcomes. The standard example is Prior Win, which uses settled winning history, Selection stake, decimal odds and Sports hierarchy data to identify relevant current Inventory selections.

Bet Placement remains sufficient for placement-based methods such as Popular, Trending, Similarity and Personalised Popular.

Multi-selection bets

Send one ootb_sports_bet_settled event for every settled selection or leg. Each event should:

  • reuse the original ootb_betslip_key;
  • reuse the correct ootb_bet_key and ootb_leg_num;
  • identify its own Selection and parent Inventory hierarchy;
  • report its own ootb_leg_status, stake and optional payout; and
  • set ootb_num_selections to the total number of selections on the ticket.

Validation checklist

  • The wrapper contains tenant, timestamp, event, customer and context.
  • event is exactly ootb_sports_bet_settled.
  • Customer, ticket, bet, leg and hierarchy identifiers agree with Bet Placement.
  • All required fields are present for every settled selection or leg.
  • Placement, event and settlement timestamps are valid ISO 8601 UTC values.
  • Settlement time is not used in place of the original bet time.
  • ootb_leg_status and ootb_betslip_status describe compatible outcomes.
  • Decimal odds and numeric values are JSON numbers, not formatted strings.

Did this page help you?