Personalizing the Catalog with Customer's Loyalty Program/Tier/Supplementary Program and Segments

Background

Brands seek to offer a personalized rewards catalog experience tailored to customers' loyalty program, tiers, supplementary programs, and customer segments. The primary objective is to filter and display rewards relevant to each customer's specific program associations or memberships or segments.

For example, if a customer has 5 cards from 5 different programs, then the catalog needs to filter the rewards that are tagged to those programs, so that customer will get all the rewards which are mapped to those 5 programs only and no other rewards.

This feature will help in

  • enabling the system to fetch only the rewards that are applicable to the customer, providing a personalized and relevant rewards catalog improving their user experience
  • enabling the brands to manage rewards efficiently by allocating them to specific MLPs, reducing the clutter in the rewards catalog.

Enhancements made

  • While configuring a reward, users can specify the list of programIDs, and subsequent tier and supplementary programs or segments.
  • Users can update the existing rewards for adding the new programs, and subsequent tier and supplementary programs or segments or removing any programs from the reward if required.
  • Users can map multiple loyalty programs to a single reward.
  • Users can map multiple segments and partitions to a single reward.
  • If a reward is mapped to only the program, and no tier/ supplementary programs are mentioned, then the reward will be available to all the customers who are part of that loyalty program, irrespective of the tier or supplementary programs.
  • Rewards can either be mapped to loyalty program criteria (tier and supplementary program) or customer segments but not both simultaneously.
  • Once a segment is linked to a reward, that reward is only available to customers in that segment.

API changes and validations

  1. Create reward API

API doc for create reward

  • supplementaryCriteria and segmentCriteria are optional fields.
  • All the passed IDs are validated for the org
  1. Update Reward API

API doc for update reward

  • supplementaryCriteria and segmentCriteria are optional fields.
  • All the passed IDs are validated for the org
  • The segments and partition should be valid and active segment
  • If null is passed the existing mapping will not be affected
  • If empty list is passed all the existing mappings will be removed
  1. Issue rewards

API doc for issue user reward
API doc for issue bulk reward

  • Validation against customer’s programIDs and segmentIDs.
  • If program IDs don’t match for a particular reward in the issueReward call, then that particular reward is not issued and an error message is thrown. Rest of the rewards are issued.
  1. Get all rewards for the brand

API doc for get brand rewards

  • End point: user/reward/brand/{brandName}
  • A new parameter for accepting the customer identifier is added but this parameter is not mandatory.
    • If a customer identifier is present, it will only return the rewards which are mapped to the customer’s program IDs or segment IDs and general rewards where no programs are mapped.
  • All Get reward APIs will be fetching the partner program details linked to the reward

To get the loyalty program ID, head to the loyalty module and click on the program. The URL will have the program ID as shown below

To get the tier ID, you can use insights or PMA to fetch the IDs

To get the subscription program ID, head to the loyalty module and click on the program. Under Program, click on subscription program and it will give you the ID for the subscription programs like below

Sample Request Payload

"supplementaryCriteriaRO": [
    {
      "loyaltyProgramId": 750,
      "tierIds": [
        "219",
        "662"
      ],
      "partnerProgramIds": [
        "342",
        "833"
      ]
    }
  ]


"supplementaryCriteriaRO": [
    {
      "loyaltyProgramId": 750
    }
  ]
 "segment":[
    {
    "segmentId":"6134",
    "partitionId": ["2669"]
    },
    {
    "segmentId":"6136",
    "partitionId": ["2675"]
    }
  ]

Success response

{
    "status": {
        "success": true,
        "code": 6002,
        "message": "Reward created successfully"
    },
    "reward": {
        "id": 57220
    }
}

Error response

{
    "status": {
        "success": false,
        "code": 400,
        "message": "Passed loyalty programId is not exists"
    }
}
{
    "status": {
        "success": false,
        "code": 400,
        "message": "Passed entityId is not exists"
    }
}

Response for Get user reward by ID

{  
    "status": {  
        "success": true,  
        "code": 200,  
        "message": "User Reward fetched successfully"  
    },  
    "reward": {  
        "id": 57220,  
        "name": "testing36",  
        "description": "testing36",  
        "imageId": "bef4d522-2cf8-4fea-8087-376c449d5c85",  
        "imageUrl": "<https://eucrm-solutions.s3.amazonaws.com/rewards/86a1c214-a955-4b40-a2d7-d4dc279.jpeg">,  
        "thumbnailId": "c886f064-2b3f-4c19-9e86-7f7e5ab5ae04",  
        "thumbnailUrl": "<https://eucrm-solutions.s3.amazonaws.com/rewards/9e0dfad6-5b9d-4e2b-ac15-2870357.jpeg">,  
        "termAndConditionsId": "820a3d7f-2601-405b-9f56-4a3ba8e9df73",  
        "termAndConditionsUrl": "<https://eucrm-solutions.s3.amazonaws.com/rewards/06f0da4b-dd0b-48fe-b20d-1cadc76.html">,  
        "tier": null,  
        "label": null,  
        "priority": 1,  
        "intouchPoints": 150,  
        "group": null,  
        "startTime": "2023-05-17 20:00:00",  
        "endTime": "2023-10-31 11:59:30",  
        "expired": false,  
        "started": false,  
        "programId": null,  
        "categoryList": [  
            {  
                "id": 4,  
                "name": "clothing",  
                "enabled": true  
            }  
        ],  
        "customFields": {  
            "CF4": "This is a dummy customfield",  
            "CF2": "This is a dummy customfield",  
            "CF1": "This is a dummy customfield"  
        },  
        "loyaltyProgramCriteria": [  
            {  
                "loyaltyProgramId": 690,  
                "tierIds": null,  
                "partnerProgramIds": null  
            }  
        ],  
        "restrictions": {  
            "isValid": true,  
            "transactionLevel": [  
                {  
                    "id": 52,  
                    "isValid": true,  
                    "limit": 1,  
                    "kpi": "QUANTITY"  
                }  
            ],  
            "customerLevel": [  
                {  
                    "id": 56,  
                    "isValid": true,  
                    "repeatFrequencyType": "DAYS",  
                    "limit": 5,  
                    "interval": 10000,  
                    "kpi": "TRANSACTION_COUNT"  
                },  
                {  
                    "id": 57,  
                    "isValid": true,  
                    "repeatFrequencyType": "WEEKS",  
                    "limit": 30,  
                    "interval": 10000,  
                    "kpi": "TRANSACTION_COUNT"  
                },  
                {  
                    "id": 58,  
                    "isValid": true,  
                    "repeatFrequencyType": "MONTHS",  
                    "limit": 50,  
                    "interval": 10000,  
                    "kpi": "TRANSACTION_COUNT"  
                }  
            ],  
            "rewardLevel": [  
                {  
                    "id": 53,  
                    "isValid": true,  
                    "consumed": 0,  
                    "repeatFrequencyType": "DAYS",  
                    "limit": 500,  
                    "interval": 10000,  
                    "kpi": "TRANSACTION_COUNT"  
                },  
                {  
                    "id": 54,  
                    "isValid": true,  
                    "consumed": 0,  
                    "repeatFrequencyType": "WEEKS",  
                    "limit": 5000,  
                    "interval": 10000,  
                    "kpi": "TRANSACTION_COUNT"  
                },  
                {  
                    "id": 55,  
                    "isValid": true,  
                    "consumed": 0,  
                    "repeatFrequencyType": "MONTHS",  
                    "limit": 10000,  
                    "interval": 10000,  
                    "kpi": "TRANSACTION_COUNT"  
                }  
            ]  
        },  
        "appliedPromotions": \[]  
    }  
}

Use cases

  1. Let's say a customer has multiple loyalty program memberships. When they log into the rewards catalog, they only want to see the rewards that are relevant to the specific loyalty program associated with the card they use to make purchases. By filtering rewards based on program IDs, we can ensure that customers only see rewards that are applicable to their current loyalty program membership.
  2. A brand wants to create a new reward specifically for customers who hold a certain credit card and are members of a particular loyalty program. By mapping rewards to specific loyalty programs, brands can ensure that the reward is only visible to customers who meet these criteria, which can help to increase the perceived value of the reward and create a sense of exclusivity.
  3. Customized Redemption: By mapping loyalty program IDs and tiers, brands can offer personalized rewards based on the customer's loyalty status. Higher-tiered customers may be eligible for exclusive or premium rewards, while lower-tiered customers receive rewards tailored to their level.
  4. Targeted Promotions: Mapping loyalty program IDs and tiers allows brands to run targeted promotions. They can offer specific rewards to customers based on their loyalty program participation, encouraging engagement and incentivizing higher-tier customers to maintain their loyalty.
  5. Supplementary Program Integration: Mapping loyalty program IDs to rewards catalog enables integration with supplementary programs. For example, if a brand has a partnership with an airline, they can map the loyalty program IDs of customers who are also frequent flyers to provide rewards such as discounted or complimentary flights.
  6. Sarah’s Shopping Experience: Sarah is a loyal customer who enjoys browsing her favorite brand's rewards catalog. She belongs to two special customer groups: the "Frequent Shoppers" group and the "Premium Members" group. Rewards Available:
    1. Reward R1: Designed for customers in the "Frequent Shoppers" and "Summer Sale" groups.
    2. Reward R2: For those in the "Frequent Shoppers" and "Premium Members" groups.
    3. Reward R3: For the "Frequent Shoppers" and "Early Access" groups.
    4. Reward R4: Available to all customers, without any specific group requirements.

When Sarah logs into the rewards catalog, she expects to see only the rewards relevant to her. Because she’s in the "Premium Members" group, she sees:

  • Rewards Shown: R2, R4
  • Rewards Hidden: R1, R3 (because she isn’t in the "Summer Sale" or "Early Access" groups)
  • This personalized experience makes Sarah feel valued and ensures she’s only seeing rewards she can actually use.
  1. Emma hasn’t joined any specific customer groups, but she’s still an important customer to the brand. Rewards Available:
    1. Reward R1: For "Frequent Shoppers" and "Summer Sale" groups.
    2. Reward R2: For "Frequent Shoppers" and "Premium Members" groups.
    3. Reward R3: For "Frequent Shoppers" and "Early Access" groups.
    4. Reward R4: Available to all customers.

Since Emma isn’t part of any specific groups, when she logs in:

  • Reward Shown: R4
  • Rewards Hidden: R1, R2, R3 (because she doesn’t belong to those groups)
  • Even though she’s not in any special groups, Emma still feels appreciated with a reward she can redeem.