Real-Time Events

Optimove Personalize combines two kinds of customer data:

  • Inventory data describes the games or sports items that can be recommended.
  • Real-Time Events describe what an identified customer played or bet on.

The identifiers in an event must match the identifiers in your Inventory integration. Personalize uses that match to turn customer activity into recommendation signals.

This guide covers only the Real-Time Events used by Personalize. Send them through the Server-Side Events API. That API guide is the source of truth for your endpoint, authentication, HTTP responses, retries and delivery limits.

Events to implement

VerticalEventStatus for PersonalizeWhat it enables
Gamingootb_game_launchRequiredCustomer-to-game history, game affinity, popularity and personalised Gaming recommendations
Gamingootb_game_sessionOptionalSession value, stakes, GGR and activity signals for financial- or value-aware methods
Sportsootb_sports_bet_placedRequiredCustomer betting history and standard Sports methods such as Popular, Trending, Similarity and Personalised Popular
Sportsootb_sports_bet_settledOptionalSettlement- and outcome-aware methods, including Prior Win

“Optional” means that Personalize can operate without the event. Implement it when you want to use a method that depends on the additional data.

Event request wrapper

Every event uses the same top-level request structure. The event-specific fields belong inside context.

{
  "tenant": "your_tenant_id",
  "timestamp": "2026-07-09T14:22:01Z",
  "event": "ootb_game_launch",
  "customer": "customer_12345",
  "context": {
    "ootb_launch_timestamp": "2026-07-09T14:22:00Z",
    "ootb_game_code": "SLOT001",
    "ootb_game_name": "Mega Fortune Slots",
    "ootb_game_category": "Slots",
    "ootb_start_balance": 125.5,
    "ootb_country": "UK"
  }
}
FieldRequiredTypePersonalize useNotes
tenantYesString or numberRoutes the event to the correct Optimove tenant and Personalize brand configurationUse the exact tenant identifier supplied by Optimove.
timestampYesString (date-time)Records when the event was reportedSend an ISO 8601 UTC timestamp, for example 2026-07-09T14:22:01Z. Event-specific action times remain in context.
eventYesStringSelects the event schema and Personalize processing pathUse the exact event name shown in this guide. Event names are case-sensitive.
customerYes for PersonalizeStringAssociates the interaction with a customer so Personalize can build history and return personalised recommendationsUse the same stable customer identifier used when requesting recommendations. An anonymous event cannot contribute to an identified customer’s Personalize profile.
contextYesObjectContains the event-specific Inventory identifiers and activity dataFollow the field table for the selected event. Do not move context fields to the top level.

Identifier matching

Gaming

context.ootb_game_code must equal the corresponding game_code in Gaming Inventory.

Although some event schemas accept a number, Gaming Inventory uses a string. Sending game codes as strings everywhere avoids type and formatting mismatches. Do not change leading zeros, case or punctuation between the Inventory and event payloads.

Real-Time Event fieldGaming Inventory fieldPurpose
ootb_game_codegame_codeJoins customer gameplay to the game that Personalize can recommend

Sports

Sports event keys must match the complete Sports Inventory hierarchy.

Real-Time Event fieldSports Inventory fieldInventory level
ootb_discipline_keycategoryKeyCategory, such as the sport or discipline
ootb_class_keyclassKeyClass
ootb_meeting_keytypeKeyType, such as a league, meeting or competition
ootb_event_keyeventKeySporting event or fixture
ootb_market_keymarketKeyMarket
ootb_selection_keyselectionKeySelection or outcome

Use the same value and JSON type on both sides of each join. A name is useful for reporting and modelling, but it does not repair a mismatched key.

Integration rules

  1. Complete the relevant Gaming or Sports Inventory integration before relying on Real-Time Events.
  2. Use a stable, identified customer value on every event sent for Personalize.
  3. Send all timestamps in ISO 8601 UTC format.
  4. Preserve Inventory identifiers exactly. Do not translate or reformat keys in the event pipeline.
  5. For a multi-selection sports bet, send one event for each selection or leg. Reuse the bet slip identifier and set the correct leg number on each event.
  6. Validate both the wrapper and the selected event’s context before sending production traffic.
  7. Monitor event delivery and verify that customer, event and Inventory identifiers appear as expected in your Optimove environment.

Next steps


Did this page help you?