Home / integration / loyalty-management-setup
loyalty-management-setup
Use this skill when setting up or extending Salesforce Loyalty Management — including program and currency creation, tier group design, qualifying vs. non-qualifying point currency separation, DPE batch job. NOT for Marketing Cloud engagement program design or B2B loyalty via Sales Cloud — use architect/loyalty-program-architecture.
Open the skill folder on GitHub
Loyalty Management Setup
This skill activates when a practitioner is setting up or troubleshooting Salesforce Loyalty Management, the Industry Cloud product for customer loyalty programs. It covers the two-currency model (qualifying vs. non-qualifying), tier groups and tier assessment, the Data Processing Engine (DPE) templates that calculate balances, reset qualifying points, and expire points, partner loyalty, the member portal, and the Transaction Journals API that feeds the program. It does NOT cover Marketing Cloud engagement programs or general Experience Cloud setup.
Before Starting
Gather this context before working on anything in this domain:
- Loyalty Management separates currencies into qualifying (engagement, used for tier evaluation) and non-qualifying (earned for redemption). A qualifying currency "can be associated with only one tier group", and "a tier group can have more than one qualifying point" (Loyalty Management guide, Loyalty Program Currencies).
- Confirm the license: several features named here (the generated tier assessment process, Batch Management for loyalty processes, the DPE templates) require Loyalty Management - Growth or Loyalty Management - Advanced, or the B2C/B2B Loyalty licenses the guide lists per feature.
- DPE templates do not run on their own. Admins clone a template, activate the clone, and run it from a flow at the required frequency.
- Decide where transactions come from: an external system posting to the Transaction Journals Execution resource, records created in Salesforce, or both.
Questions to Ask Before Configuring
| Question | Why it matters | What a good answer adds | What proper configuration adds over just doing it |
|---|---|---|---|
| "What earns status, and what earns rewards?" | Status uses qualifying currencies tied to a tier group; rewards use non-qualifying currencies that can expire by a fixed period or by inactivity | The currency list with type, tier group, and expiry model | Status can reset without touching reward balances |
| "Is status measured on one currency or several?" | The generated tier assessment process takes a minimum balance for one qualifying currency (the tier group's tier assessment currency); two or more need a custom process | A one-currency design, or an explicit custom tier process | Tier changes that follow the stated rules instead of a process nobody can regenerate |
| "When do qualifying points reset, and how often must balances, expirations, and tiers update?" | Reset dates come from the tier model; DPE clones run only when a flow runs them; tier upgrades run in real time or through Batch Management | A schedule per DPE clone and per tier process | Balances and tiers that are current when members look |
| "Do partners earn or redeem, and are they prepaid or postpaid?" | LoyaltyProgramPartner holds BillingType, PartnerType, and cost per unit; the Create Partner Ledgers and Update Partner Balances definition maintains ledgers | The partner list with billing type and costs | Partner balances that reconcile with invoices |
| "Will members use a portal, and how many programs exist?" | An Experience Cloud site can be associated with only one loyalty program | The site-to-program map | No late discovery that two programs need two sites |
| "Which system sends transactions, and must promotion limits be enforced?" | The Transaction Journals Execution resource does not enforce PromotionLimit unless the caller first uses Eligible Promotions List | The integration call sequence | Promotions that respect their usage limits |
What a proper configuration adds over "just creating a program": currencies, tier rules, and DPE schedules match the business rules, tier changes run on a documented trigger, partner ledgers reconcile, and transaction feeds apply promotion limits.
Core Concepts
Two-Currency Architecture: Qualifying vs. Non-Qualifying
| Qualifying points (QP) | Non-qualifying points (NQP) | |
|---|---|---|
| Purpose | Engagement; tier upgrade and downgrade | Redemption for rewards |
| Tier group link | One tier group per qualifying currency; a tier group can have several qualifying currencies | None |
| Lifecycle | Reset to zero on the reset date by the Reset Qualifying Points job | Expire by the currency's expiry model: Fixed (each point after a period) or Activity (whole balance after inactivity) |
| Data model | LoyaltyProgramCurrency.CurrencyType = Qualifying, LoyaltyTierGroupId set | LoyaltyProgramCurrency.CurrencyType = NonQualifying |
Member balances live in LoyaltyMemberCurrency (PointsBalance, TotalPointsAccrued, LastResetDate, and related fields), which links to LoyaltyProgramCurrency; the currency type is read through that relationship. Since API 58.0, LoyaltyTierGroup.TierAssessmentCurrencyId names the currency used to assign tiers.
Tier Assessment
Program managers set the minimum eligible balance for each tier (Manage Tier Eligibility), then Generate Rules. Salesforce generates and activates a Change Tier loyalty program process for that tier group. The process can run in real time as a child of a Transaction Journal process, or in batches through a Batch Management job that selects members with Eligible for Tier Assessment checked (Loyalty Management Settings: Select Members for Tier Assessment Automatically). Regenerate the process after changing any tier's eligible balance or name, or after adding a tier.
Data Processing Engine Templates
| Template | What it does |
|---|---|
| Credit Qualifying / Non-Qualifying Points to Members (Point Balance Calculation) | Aggregates points credited since the last run into member balances |
| Reset Qualifying Points | Resets qualifying balances to zero based on the tier model |
| Expire Fixed Non-Qualifying Points, and Expire Fixed Non-Qualifying Points Using Aggregated Expiration Ledgers | Expire fixed-model non-qualifying points |
| Roll Over Escrow Points to Members | Moves escrow points into balances |
| Create Partner Ledgers and Update Partner Balances | One definition that updates partner points (prepaid) or balance amount (postpaid) and creates partner ledgers |
"After the cloned definition is modified and activated, it's available in the Flow Builder as an action. Use the action to run the definition at your required frequency." The balance templates assume only they update balances in batches; if the org updates balances in real time, make the definitions ignore ledgers already processed.
Partner Loyalty
A LoyaltyProgramPartner record links a partner Account (LoyaltyPartnerId) to the program, with PartnerType (Accrual, Redemption, Both), BillingType (Prepaid, Postpaid), AccrualCostperUnit, and RedemptionCostperUnit. Prepaid partners buy points packs; the Create Partner Ledgers and Update Partner Balances definition maintains their balances.
Member Portal on Experience Cloud
The Loyalty Member Portal template creates the portal. "You can't associate the same Experience Cloud site to another loyalty program." If no program is associated, the site shows every program the contact belongs to.
Transaction Journals API
POST /services/data/vXX.X/connect/realtime/loyalty/programs/{programName} (API 54.0+) creates and processes transaction journals against the program's processes. It needs one of the B2C - Loyalty, B2C - Loyalty Plus, Loyalty Management - Growth, or Loyalty Management - Advanced licenses and the Loyalty Management permission set. A worked request is in