Skip to main content

CDP (Optimove™) Integration Guide

Presented by Exchange Solutions | October 16, 2025


Optimove™ and ES Loyalty™ integration overview

Optimove is a Customer Data Platform (CDP) with built-in marketing campaign capabilities. This integration of Optimove™ with Exchange Solutions' ES Loyalty™ combines ES Loyalty's proven strength in offer personalization with Optimove's Email Service Provider (ESP) functions through OptiMail™ and its campaign features. Embedding loyalty data into customer journeys lets clients create highly personalized loyalty experiences at scale.

The ES Loyalty integration with Optimove allows a member's loyalty data—including account data, partner link data, and extended member data—along with personalized offers, to be sent to Optimove.

Data is synced to Optimove using one of two modes:

  • Real-time updates via APIs
  • Direct daily updates via batch file or Snowflake

These two modes have a combined limit of 50 custom member attributes and depend on Optimove configuring the desired attributes. This works well for a standard set of profile attributes, but requires special handling for more dynamic data such as Extended Member Data (EMD).

In addition to data syncing, certain events can be synced to Optimove in real time. These events can also directly trigger an email in response to loyalty actions performed by members. These triggered emails are called transactional emails (as opposed to marketing emails) and are sent to the member when loyalty account changes occur.

Member email messages are generated based on the following types:

  1. Scheduled: Sent at regular intervals, such as personalized offers, points summaries, or redemption summaries.
  2. Triggered: Sent in response to a member event, such as registering and obtaining a digital or physical rewards card.
  3. Transactional: Sent in response to member transactions, such as linking or unlinking a partner card, redeeming points, or making a purchase.
caution

Transactional data used in all email types can be added in the Optimove backend to meet client requirements, but this must be configured at the time of Optimove setup. Any later additions are customizations subject to a Statement of Work (SOW) and additional charges due to the significant work involved. If you have questions, contact your TSA.


Purpose of the Data Integration Gateway (DIG)

ES Loyalty's Data Integration Gateway (DIG) is a generic module designed to facilitate the integration of messages sent by ES Loyalty with various external systems. It applies filtering rules to incoming messages and routes them to the appropriate connector module. It is one option for connecting to integrated systems (as an alternative to direct connections that don't involve an intermediary module).

These connectors consume the messages and interact with external vendors or providers—such as email service providers or data integration providers—by calling the appropriate APIs.

Batch updates have a latency of up to 24 hours because they're sent daily. This system also requires two sets of attributes: one for real-time updates and one for batch updates.


Member and loyalty data

This section describes what's required for data handling and processing so that the ES Loyalty/Optimove integration passes the correct data.

caution

Optimove doesn't support localization conversion in transactional email (that is, converting content into the local language and format for elements such as currency and messaging). Ensure that all monetary values and other localized content are sent to Optimove in the format intended for the email. Marketing emails support localization through the language tag, but test to confirm that other format changes—such as currency—are also supported.


Real-time data updates

Real-time data updates cover the following categories:

  1. Loyalty account data changes: Transactional email (triggered email) functionality fires when there's a change in a member's account data—for example, a change in member profile data, partner link, member tier, or member household. This results in an update to Optimove for the specific change type and value. The new data is pushed to Optimove.
  2. Personalized offers: Promotional offers relevant to a member in targeted marketing emails.
  3. Partner card link information: A unique identifier along with non-sensitive card information (such as cardholder type and link status) is stored and synced to Optimove. Exchange Solutions does not store sensitive card information such as card numbers, which eliminates the risk of sensitive card data being exposed for malicious use.
  4. Use of Optimove's native opt-in flag: This flag is updated based on opt-in or opt-out values provided to Exchange Solutions through the extended member data payload sent via member profile updates. These updates occur when the customer updates their profile information through the client's member management web application. The key distinction between marketing (scheduled and triggered) email and transactional email is that for the former, the email opt-in/opt-out flag is stored in Optimove. Members cannot opt out of transactional email for security and fraud prevention reasons.

Real-time updates for member registration and opt-in status

Optimove can receive externally-generated events that can then be used to initiate a real-time campaign or update attributes within Optimove. ES Loyalty sends the following events:

  1. MEMBER_REGISTRATION: Initiates a "Welcome Email." When a customer first registers as a member in the loyalty program, this event is sent to create a member record in Optimove. When an unregistered customer swipes their card at a POS terminal, a corresponding member record is also created and a registration event is sent to Optimove.
  2. OPT_IN_EMAIL: Updates Optimove's internal email opt-in flag. If a member gives consent, they opt in to receive marketing email. If consent is denied, they opt out. The opt-in/opt-out status is visible in the ES Loyalty Console under the member's Extended Member Data section.
  3. REDEMPTION: Updates member redemption transaction details and triggers the redemption email in Optimove.
  4. MEMBER_PROFILE_UPDATE: Updates member profile data in Optimove.
  5. MEMBER_TIER: Updates member tier changes in Optimove.

Member registration event

For a MEMBER_REGISTRATION event, the email is triggered when member registration data is received in ES Loyalty. The following parameters apply:

Optimove field nameESL field nameData typeDescription
customer_idAccountIDStringPK. Unique identification number for an individual account. Can be joined to the account table to extract various fields related to the specific ACCOUNT_ID.
loyalty_idLoyaltyIDStringLoyalty unique identification number, generally the customer loyalty card number.
emailEmailStringEmail address of the account holder.
first_nameFirstNameStringFirst name of the account holder.
last_nameLastNameStringLast name of the account holder.
business_nameBusinessNameStringBusiness name. Blank by default.
registration_channelRegistrationChannelStringChannel where the customer registered the account. Possible values: APP, WEB.
registration_dateRegistrationTSStringDate the account was registered, in UTC format.
card_typeCardTypeStringCard type, either physical or digital. Physical card numbers are ghost cards distributed at sites. Digital cards are generated cards loaded in ESL and assigned to members who register online without a card. Values: PHYSICAL (ghost cards), DIGITAL (digital card numbers).
language_preferenceLanguagePreferenceStringLanguage preference of the member. Defaults to English if undefined. Values: en-CA or EN (English), en-FR or FR (French).

Member registration is initiated through the ES Loyalty Customer Experience (CUX) API. The event is delivered to the Optimove client, which makes the appropriate API call to Optimove. A REGISTRATION_EVENT is dispatched to Optimove whenever a new registration occurs.

Sample payload:

{
"Data": {
"accountID": "a207f1a7-289b-433c-9b0d-dec7d182981a",
"businessName": "GASCORP",
"cardType": "DIGITAL",
"email": "test@gmail.com",
"externalIdentifier": "700034343223232",
"firstName": "Nathan",
"languagePreference": "en-CA",
"lastName": "Hall",
"loyaltyID": "52404569624056",
"registrationChannel": "APP",
"registrationDate": "2024-03-01T14:17:35.605Z",
"registrationDateEpoch": 1709307519000
}
}

The process for an unregistered member is similar to a registration event. An unregistered event is triggered.


Email opt-in event

The following parameters apply to a consent event, in which the member provides consent to receive email.

Optimove field nameESL field nameData typeDescription
customer_idAccountIDStringPK. Unique identification number for an individual account. Can be joined to the account table to extract various fields related to the specific ACCOUNT_ID.
opt_inisOptInEmailBooleanIndicates whether the account has opted in to email communication.
identifieremailStringEmail address of the account holder.
brandn/aStringBrand as per Optimove setup requirements. Hardcoded to AC01 since consent only applies to marketing emails.
event_originn/aStringEvent origin as per Optimove setup requirements. Hardcoded value.
execution_methodn/aStringExecution method as per Optimove setup requirements. Hardcoded value.
channel_idn/aNumberChannel ID as per Optimove setup requirements. Hardcoded value.

This event is used to send member registration or email consent provision to Optimove. After a successful registration or email consent provision, the member receives a Welcome Email.

In most cases, the opt-in email preference is conveyed through a consent message that verifies—through a standard payload—that a member wants to receive marketing emails.

Sample payload:

{
"Data": {
"brand": "AC01",
"channel_id": 15,
"customer_id": "a207f1a7-289b-433c-9b0d-dec7d182981",
"event_origin": "server",
"execution_method": "email",
"identifier": "test@gmail.com",
"opt_in": true
}
}

Redemption event

The REDEMPTION event notifies a member who makes a redemption through a POS, app, or web channel via an email containing redemption details. This event can also directly trigger an email once an email template is configured in Optimove and the template ID is updated in ESL.

Optimove field nameESL field nameData typeDescription
CUSTOMER_IDaccountIDStringPK. Unique identification number for an individual account. Can be joined to the account table to extract various fields related to the specific ACCOUNT_ID.
BUSINESS_UNITbusinessUnitStringBusiness unit of the account holder.
CHANNELchannelStringChannel through which the transaction occurred.
EMAILemailStringEmail address of the account holder.
LOCAL_TRANSACTION_DATElocalTransactionDateStringLocal transaction date in EST/EDT.
LOYALTY_IDloyaltyIDStringThe loyalty unique identification number.
PROCESSED_DATEprocessedDateStringCurrent system date timestamp in UTC.
REDEMPTION_AVAILABLE_BALANCEredemptionAvailableBalanceStringRemaining points balance after redemption.
REDEMPTION_BALANCEredemptionBalanceStringTotal redemption points balance before redemption.
REDEMPTION_DOLLARSredemptionDollarsStringRedemption dollar amount in the transaction.
REDEMPTION_POINTSredemptionPointsStringRedemption points amount in the transaction.
STORE_NAMEstoreNameStringStore name or address.
STORE_NUMBERstoreNumberStringStore number.
TRANSACTION_DATEtransactionDateStringTransaction date timestamp based on store province (POS/APP) or EST/EDT (WEB).
TRANSACTION_IDtransactionIDStringTransaction identifier.
templateIDtemplateIDNumberEmail template ID configured in Optimove.

Sample payload:

{
"Data": {
"BUSINESS_UNIT": "GASCORP",
"CHANNEL": "POS",
"CUSTOMER_ID": "a207f1a7-289b-433c-9b0d-dec7d182981a",
"EMAIL": "test@gmail.com",
"LOCAL_TRANSACTION_DATE": "2025-09-21T12:31:13.000",
"LOYALTY_ID": "52404569624056",
"PROCESSED_DATE": "2025-09-21T16:31:27.968Z",
"REDEMPTION_AVAILABLE_BALANCE": 3,
"REDEMPTION_BALANCE": 153,
"REDEMPTION_DOLLARS": 0.15,
"REDEMPTION_POINTS": 150,
"STORE_NAME": "100 Main Street",
"STORE_NUMBER": "2378",
"TRANSACTION_DATE": "2025-09-21T10:31:13-06:00",
"TRANSACTION_ID": "20250921-1031-027790101-215930-2222"
}
}

Member profile update event

The MEMBER_PROFILE_UPDATE event triggers an update of the member's profile details through an API call to Optimove with the following information:

Optimove field nameESL field nameData typeDescription
CUSTOMER_IDaccountIDStringPK. Unique identification number for an individual account. Can be joined to the account table to extract various fields related to the specific ACCOUNT_ID.
EMAILemailStringEmail address of the account holder.
ACCOUNT_STATUSAccountStatusStringDefines the account activity status.
CARD_STATUSLoyaltyStatusStringCard status of the account. An account may have more than one loyalty card due to card replacements.
IS_BLOCKEDIsSuspendedStringIndicates whether the account is in a suspended state.
LANGUAGE_PREFERENCElanguagePreferenceStringLanguage preference of the member. Defaults to English if undefined.
AVAILABLE_POINT_BALANCEAvailablePointBalanceStringRedeemable points balance, excluding limit restrictions.
AVAILABLE_POINT_VALUEAvailablePointValueStringDollar value of the available points.
POINT_BALANCEPointBalanceStringTotal points balance after redemption.
POINT_BALANCE_VALUEPointBalanceValueStringDollar value of the points balance.

Sample payload:

{
"Data": {
"ACCOUNT_STATUS": "ACTIVE",
"AVAILABLE_POINT_BALANCE": "0",
"AVAILABLE_POINT_VALUE": "0",
"CARD_STATUS": "ACTIVE",
"CustomerID": "a207f1a7-289b-433c-9b0d-dec7d182981a",
"EMAIL": "test@gmail.com",
"IS_BLOCKED": false,
"LANGUAGE_PREFERENCE": "en-CA",
"POINT_BALANCE": "0",
"POINT_BALANCE_VALUE": "0"
}
}

Member tier event

The MEMBER_TIER event triggers an update of the member's tier details through an API call to Optimove. This event can also directly trigger an email once an email template is configured in Optimove and the template ID is updated in ESL.

Optimove field nameESL field nameData typeDescription
CUSTOMER_IDaccountIDStringPK. Unique identification number for an individual account. Can be joined to the account table to extract various fields related to the specific ACCOUNT_ID.
BENEFIT_START_DATE_EPOCHbenefitStartDateEpochStringBenefit start date in epoch format.
BENEFIT_START_DATE_ISObenefitStartDateISOStringBenefit start date in UTC format.
BUSINESS_UNITbusinessUnitsStringBusiness unit. Defaults to a set value.
COUNTRY_CODECountryCodeStringThe 2-character country code for the account.
EMAILemailStringEmail address of the account holder.
PHONE_NUMBERPhoneNumberStringPhone number of the account holder.
EVENT_TYPEeventTypeStringSystem event type. Values: INSERT (new event), MODIFY (existing event).
MEMBERSHIP_PROGRAM_CODEProgramCodeStringCurrent loyalty program code.
MEMBERSHIP_TIER_CODETierCodeStringCurrent loyalty tier code.
MEMBERSHIP_TIER_NAMETiers.displayNameStringCurrent loyalty tier name.
MEMBERSHIP_TIER_RANKTierRankStringCurrent loyalty tier rank.
NEXT_TIER_IDNextTierCodeStringNext loyalty tier code.
NEXT_TIER_RANKTierRank (of NextTierCode)StringNext loyalty tier rank.
NEXT_TIER_NAMETiers.displayName (of NextTierCode)StringNext loyalty tier name.
templateIDtemplateIDNumberEmail template ID configured in Optimove.

Sample payload:

{
"Data": {
"accountID": "a207f1a7-289b-433c-9b0d-dec7d182981",
"benefitStartDateEpoch": 1753333200000,
"benefitStartDateISO": "2025-07-24T05:00:00.000Z",
"businessUnits": [
"GASCORP"
],
"contactDetails": {
"countryCode": "CA",
"email": "test@gmail.com"
},
"contributionType": "UNIT",
"eventType": "INSERT",
"membershipProgramCode": "PLATINUM",
"membershipTierCode": "TIER2",
"membershipTierName": "SILVER",
"membershipTierRank": 2,
"nextTier": {
"id": "TIER1",
"rank": 1,
"tierName": "GOLD"
}
}
}

Bulk or batch data updates

Bulk or batch updates provide periodic (daily or nightly) customer profile updates from specified tables through Snowflake. These tables include each member's attributes, which enable customers to be segmented across a variety of dimensions. This lets Optimove track customer behavior and target groups, which is the foundation of Optimove's approach.

Once Optimove has successfully received all historical data, a daily data update process is required to keep Optimove's data warehouse current. This data extraction process is similar to the initial historical data delivery, but includes only incremental (new or changed) data unless otherwise requested. Data is sent daily using Snowflake Data Sharing and includes ES Loyalty account data (from the Customers table), partner link status, personalized offers (customer promotions), transactional data (from the Orders and Order Items tables), and extended member data (from the Customer Extended Data table). The database schema tables are described below.

1. Customers

Synchronizes ES Loyalty member account data to Optimove.

Optimove field nameESL field nameData typeDescription
CUSTOMERIDAccountIDTEXTPK. Unique identification number for an individual account. Can be joined to the account table to extract various fields related to the specific ACCOUNT_ID.
REGISTRATIONDATERegistrationTSDATEDate the account was registered.
EMAILEmailTEXTEmail address of the account holder.
MOBILENUMBERPhoneNumberTEXTPhone number of the account holder.
FIRSTPURCHASEDATEFirstPurchaseTSDATEDate of the first purchase performed on the account.
DATEOFBIRTHDateOfBirthDATEDate of birth of the account holder.
ISBLOCKEDIsSuspendedBOOLEANIndicates whether the account is in a suspended state.
ISTESTisTestBOOLEANIndicates whether the member is Regular (false) or Test (true). Static value, defaults to false. Currently unused.
ISOPTINEMAILisOptInEmailBOOLEANIndicates whether the account has opted in to email communication.
ISOPTINSMSisOptInSMSBOOLEANIndicates whether the account has opted in to SMS messages.
FIRSTNAMEFirstNameTEXTFirst name of the account holder.
LASTNAMELastNameTEXTLast name of the account holder.
COUNTRYCountryCodeTEXTThe 2-character country code for the account.
CITYCityTEXTCity of the member address.
GENDERGenderTEXTGender of the member.
LASTLOGINDATELastActivityDateDATEDate of the most recent activity on the account.
REGISTEREDPLATFORMRegistrationChannelTEXTChannel where the customer registered the account.
REFERRALTYPEn/aTEXTThe method by which the customer was referred (for example, SEO, Affiliate, Advertising, Marketing). Defaults to null.
CURRENCYn/aTEXTPayment currency of the customer. Defaults to CAD.
UPDATEDDATEUpdatedTSDATEDate of the most recent update or modification to the account.
LOYALTYIDLoyaltyIDTEXTThe loyalty unique identification number, generally the customer loyalty card number.
ACCOUNTSTATUSAccountStatusTEXTDefines the account activity status.
CREATEDDATECreatedTSDATEDate the account was created.
EXTERNALIDENTIFIERExternalIdentifierTEXTThe account identifier for an external system outside of ES Loyalty. Same value as LoyaltyID.
BUSINESSNAMEBusinessNameTEXTThe business name. Blank by default.
POSTALZIPCODEPostalZipCodeTEXTThe postal code of the customer's address.
STREETStreetTEXTStreet name and number of the member address.
PROVINCESTATEProvinceStateTEXTProvince or state of the account.
ISEMPLOYEEEmployeeBOOLEANIndicates whether the account belongs to an employee.
ISEXPIREDIsExpiredBOOLEANIndicates whether the account is expired.
CARDSTATUSLoyaltyStatusTEXTCard status of the account. An account may have more than one loyalty card due to card replacements.
AVAILABLEPOINTBALANCEAvailablePointBalanceDECIMALRedeemable points balance, excluding limit restrictions.
AVAILABLEPOINTVALUEAvailablePointValueDECIMALDollar value of the available points.
POINTBALANCEPointBalanceDECIMALTotal points balance after redemption.
POINTBALANCEVALUEPointBalanceValueDECIMALDollar value of the points balance.
HOUSEHOLDPOINTBALANCEhouseholdAvailablePointBalanceDECIMALTotal household points balance after redemption.
HOUSEHOLDPOINTVALUEhouseholdPointValueDECIMALDollar value of the household points.
PROGRAMCODEProgramCodeTEXTLoyalty program code.
TIERCODETierCodeTEXTLoyalty tier code.
TIERNAMETiers.displayNameTEXTLoyalty tier name.
TIERRANKTierRankTEXTLoyalty tier rank.
NEXTTIERNextTierCodeTEXTNext tier code.
CONTRIBUTIONSContributionsVARIANTMember contribution data indicating whether the tier is configured in dollars spent or units (litres), including current state and remaining contribution to the next tier.
LANGUAGEPREFERENCEPreferredLanguageTEXTLanguage preference of the member. Defaults to English if undefined.

Contains partner card information, such as payment and non-payment cards linked to a loyalty account.

Optimove field nameESL field nameData typeDescription
CUSTOMERIDAccountIDTEXTPK. Unique identification number for an individual account. Can be joined to the account table to extract various fields related to the specific ACCOUNT_ID.
PARTNERIDPartnerIDTEXTPK. Unique identifier for the partner.
LAST4Last4NUMBERThe last 4 digits of the payment card number.
UPDATEDDATEUpdatedTSDATEDate of the most recent update to the partner link data.
LINKEDDATELinkedTSDATEDate the card was linked.
UNLINKEDDATEUnLinkedTSDATEDate the link was removed.
LINKTYPELinkTypeTEXTThe type of link created.
CARDHOLDERTYPECardHolderTypeTEXTPossible values: Retail (personal) or Business (small business).
CARDTYPECardTypeTEXTThe type of payment card. Supported values: credit, debit.
LINKIDLink_IDTEXTA unique link ID when the link type is PAYCARD for any partner.
STATUSStatusTEXTThe current status of the linked payment card.
BINBinTEXTA BIN (Bank Identification Number) is the first 4–6 digits of a payment card that identifies the card issuer.

3. Customer promotions

Optimove facilitates the integration of promotions, enabling campaign execution. Offer data is determined based on the sort value configured in ES Loyalty's offer management module (1 being the highest priority, 10 the lowest), with the earliest display date taking precedence. The current capability supports up to 10 offers targeted to members.

Optimove field nameESL field nameData typeDescription
CUSTOMERIDAccountIDTEXTPK. Unique identification number for an individual account. Can be joined to the account table to extract various fields related to the specific ACCOUNT_ID.
ROW_UPDATED_TSUpdatedTSTIMESTAMP_NTZTimestamp in UTC format of the last customer update.
OFFER_1_CODEoffer_1_codeTEXTOffer 1 code.
OFFER_1_NAMEoffer_1_nameTEXTOffer 1 name.
OFFER_1_EXPIRY_TSoffer_1_expiry_tsTIMESTAMP_NTZOffer 1 expiry timestamp in UTC format. A year greater than 3000 indicates no expiry date.
OFFER_1_EFFECTIVE_TSoffer_1_effective_tsTIMESTAMP_NTZOffer 1 effective timestamp in UTC format.
OFFER_1_REWARD_AMOUNToffer_1_reward_amountNUMBEROffer 1 reward amount in EN format without comma separator. Apply FR formatting in the email template.
OFFER_1_SHORT_DESCRIPTION1offer_1_short_description1TEXTOffer 1 short description.
OFFER_1_PROMOTION_HEADLINEoffer_1_promotion_headlineTEXTOffer 1 promotion headline.
OFFER_1_LONG_DESCRIPTIONoffer_1_long_descriptionTEXTOffer 1 long description.
OFFER_1_SPEND_NEXToffer_1_spend_nextNUMBERSpend amount needed to meet the offer 1 requirement, in EN format without comma separator. Apply FR formatting in the email template.
OFFER_1_QUANTITY_NEXToffer_1_quantity_nextNUMBERQuantity (items or litres) needed to meet the offer 1 requirement, in EN format without comma separator. Apply FR formatting in the email template.
note

The same set of fields (code, name, expiry timestamp, effective timestamp, reward amount, short description, promotion headline, long description, spend next, quantity next) repeats for offers 2 through 10, following the same naming pattern (for example, OFFER_2_CODE, OFFER_3_NAME, and so on).

4. Extended member data

In addition to core customer attributes, ES Loyalty delivers an extended set of member metadata. These attributes are flattened and mapped to Optimove's table using the pattern <SOURCE>__<ATTRIBUTE_NAME>. This data provides additional data points that can be used to segment the member population in the Optimove CDP. Other than CUSTOMERID, which is a fixed field, all other fields are dynamically generated based on the Extended Member Data (EMD) setup by the client.

Optimove field nameESL field nameData typeDescription
CUSTOMERIDAccountIDTEXTPK. Unique identification number for an individual account. Can be joined to the account table to extract various fields related to the specific ACCOUNT_ID.
DEFAULT__TITLEDEFAULT__TITLETEXTDynamic column created based on extendedDataSource + extendedDataName.
DEFAULT__CASLDEFAULT__CASLTEXTDynamic column created based on extendedDataSource + extendedDataName.

5. Order data

Contains member transaction or order details.

Orders:

Optimove field nameESL field nameData typeDescription
Order_IDTransactionIDStringTransaction identifier.
Customer_IDAccountIDStringPK. Unique identification number for an individual account. Can be joined to the account table to extract various fields related to the specific ACCOUNT_ID.
Store_IDStoreNumberStringUnique store number.
Number_of_ItemsTotal of Cart.saleLineItems.quantity + Cart:tenderDecimal (3)The number of items purchased in the order.
Payment_MethodPrimary tender (Cart:tender) as defined in reportsStringThe method of payment (for example, credit card, PayPal).
Total_Refund_AmountTotal of Cart.reversedLineItems.finalSaleAmount::float * -1Decimal (2)The total amount refunded in the order.
Total_Item_PriceTotal of Cart.saleLineItems.originalSaleAmountDecimal (2)The total price of all items in the order, before deductions.
DiscountTotal of Cart.saleLineItems.itemDiscountDecimal (2)Total discount granted.
Shipping_CostN/ADecimal (2)Shipping costs. Defaults to null.
Total_TaxCart.saleLineItems.itemTaxDecimal (2)Total tax amount of the order.
Total_PaymentCart.saleLineItems.finalSaleAmountDecimal (2)Final payment amount made by the customer, after refunds and cancellations.
Order_DateTransactionTsDateDate the order was placed, in UTC.
Store_TypeN/AStringType of store associated with the order. Defaults to null.
Promo_CodeN/AStringID of the promo code used for the purchase. Defaults to null.
Updated_DateUpdatedTSDateDate the record was updated or added, in UTC.

Order items:

Optimove field nameESL field nameData typeDescription
Order_Item_IDTransactionId + {line item Id}StringUnique identifier of an item within a transaction.
Order_IDTransactionIdStringTransaction identifier.
Product_IDCart.saleLineItems.skuStringUnique product identifier.
SKUCart.saleLineItems.skuStringSKU of the purchased item.
Number_of_ItemsCart.saleLineItems.quantityDecimal (3)The number of items purchased of this product.
Item_PriceCart.saleLineItems.originalSaleAmount / Cart.saleLineItems.quantityDecimal (8)The price of a single item.
DiscountCart.saleLineItems.itemDiscountDecimal (2)The discount applied to the item.
Refund_AmountCart.reversedLineItems.finalSaleAmount::float * -1Decimal (2)The amount refunded for items.
Return_DateTransactionTsDateDate of the item return, in UTC.

Email templates and personalization

This section describes email templates, how email sends are initiated, and how personalization is applied.

Types of templates in Optimail

Optimove supports three types of email templates across two categories: marketing emails (scheduled and triggered) and transactional emails.

  1. Scheduled: Sent on a defined schedule. Scheduled emails can include welcome messages to household members, regular personalized offers, points summaries, redemption summaries, and household balance updates. This type is subject to the member's email opt-in/opt-out status.

  2. Triggered: Sent in response to trigger events in ES Loyalty, such as a member's first visit to the website or app, or a welcome email upon registration for a digital or physical loyalty card. Both scheduled and triggered emails are categorized as marketing emails in Optimove and are subject to the member's email opt-in status. Members who haven't opted in won't receive this type of email.

  3. Transactional: Sent when a specified type of transaction occurs, such as linking a partner card, transferring points, making a purchase or redemption, updating a household balance, changing tier membership, or qualifying for gameplay. Transactional email overrides the opt-in flag, as it's important that members receive information about their transactions.

Scheduled email and offer email personalization tags

Personalized offer emails are a type of scheduled email. They include attributes or offer personalization tags that are populated from member data to create emails personalized to each member. Marketers can use the following attributes—along with other data in Optimove not sourced from ES Loyalty—as offer personalization tags in email templates to support their email campaigns.

Synchronization of updates, opt-ins, and promotions

The following synchronizations support the integration:

  1. Member account update: The Update Customer Attributes API is designed for making real-time updates to a member's account.
  2. Syncing opt-in preference to ESP: Executed following the initial implementation of Optimove.
  3. Promotion template: Optimove facilitates the integration of promotions for campaign execution. The Add Promotions API exclusively supports the synchronization of PromotionCode and PromotionName. The promotion template, targeted offers, and reward tracking can be managed efficiently through Snowflake.

Triggered email configurations

Triggered emails, such as sending a welcome email to a new member, result from a server-side event and are therefore handled differently in Optimove than transactional emails. For trigger configuration, a templateID is required, which refers to the Optimove template triggered from ES Loyalty. All attributes included in the template must be added to attributeMappings in the Optimove configuration. Attribute mappings and templates are set up in Optimove.

Transactional email personalization options

Data sent from ES Loyalty as a result of a transaction can initiate one of six different types of transactional email, depending on the client's needs and the criteria for sending the email. Each transactional email has its own personalization options based on member actions.


tip

Need additional resources? Supporting documentation for this integration is available through your TSA. Reach out to them if you need reference materials beyond what's covered here.