> ## Documentation Index
> Fetch the complete documentation index at: https://help-loyalife.xoxoday.com/llms.txt
> Use this file to discover all available pages before exploring further.

# v7.21 — November 2025

> Loyalife v7.21 introduces Pay with Rewards APIs, cashback issuance APIs, six new custom reports, DateTime support, regex pre-processing, and member activity codes.

# v7.21 — November 2025

**Released:** November 2025

## Pay with Rewards

### Redemption APIs

Four new APIs for managing Pay with Rewards redemptions:

**Create Redemption**

* Member must have sufficient, positive points — requests with zero or negative balances are rejected
* Eligible member statuses: Active only — Inactive, Suspended, Cancelled, and Membership Blocked members are rejected
* Member cannot have an existing active redemption request
* Points cannot exceed 11 digits
* `ValidityPeriodInDays`: defaults to 3 days if 0 or not passed; otherwise uses the specified value (maximum 90 days)

**Cancel Redemption**

* Only requests with **Pending** status can be cancelled
* Processed requests cannot be cancelled

**List Redemption**

* View requests across all statuses or filter by a specific status
* Passing `status=0` returns all statuses

**Get Redemption**

* Fetch a specific request by ID to view the current status and details

### Cashback Issuance APIs

Three new APIs for cashback management:

**Create Cashback**

* Mandatory inputs: ProgramId, RelationReference, Points, RewardType
* Member must have sufficient point balance
* The cashback request is written immediately with **Pending** status and processed end-of-day via an automated cron job, which changes the status to **Processed**
* Points must be integers; decimal values are not accepted
* An optional **Description** field can be stored but is not included in the JSON output file

**List Cashback**

* Filter by Status (passing `0` returns all), RecordsPerPage (defaults to 10), and PageNumber
* Cashback entries **do not support cancellation or expiration**

**Get Cashback**

* Fetch a specific cashback record by CashbackId

### File Generation for Pay with Rewards / Direct Cashback

* File name format: `YYYYMMDDHHMMSSCashBackFileGeneration.json`
* Accrual transactions **after** a redemption request are considered for matching (sorted by date/time); transactions before the request are ignored
* Decimal point values are treated as spoilage
* `"Debit by redemption"` filter in transaction reports fetches both Pay with Rewards and Cashback records
* Transaction code is `MP-MPAYM-G02` for all cashback transactions

***

## Data Processing

### DateTime Format Support

* APIs and file uploads now accept datetime values in `YYYY-MM-DD HH:MM:SS` format
* If only a date is passed (`YYYY-MM-DD`), it is stored as `YYYY-MM-DD 00:00:00.000`
* Date-only pickers remain in the UI; a time picker is not implemented

### Regex Pattern Matching in Pre-Processing

* Trims whitespace from customer transaction and CPD files
* Converts date formats (ddmmyyyy / mmddyyyy) to the standard `yyyy-mm-dd` format (time cannot be changed via pre-processing)
* Handles other transformations such as preferred language code conversions

### Handback File Enhancements

* Success logs are now included in handback files for both TXN and CPD file types
* TXN files: error code is hidden; only the detailed error message is shown
* CPD files: both error code and error message are visible

***

## Reports

### Six New Custom Reports

**Redemption Report**

* Available under Reports → Custom Reports with flexible date range selection
* Requires a `bin_number` attribute in member attributes
* Exposes `cash_equivalent_points` from redemption transaction data as *Purchase Points Used*
* *Earned Points Used* is automatically computed as Total Points Redeemed minus Purchase Points Used

**Maker-Checker Add/Remove Points Report**

* Monthly report generated on the 1st of each month (previous month's data)
* Captures Checker ID (approver or rejector) and Description (merchant name)
* Status shows **Pending** if the request is still with a checker or approver
* *Decision Time* is blank for pending requests
* Supports manual generation via custom start/end date

**Member Audit Report**

* Monthly report generated on the 1st of each month (previous month's data)
* Requires a `bin_number` member attribute (string, non-mandatory/non-unique); appears as null if empty
* Fixed columns: Member ID, Bank Identifier, Activity, Date, Time, IP Address, Device/Browser

**Bonus Report**

* Pulls data from three sources: BNS file transactions, manual bonus additions, and miscellaneous point debits
* Columns: Member ID, BIN, Creation Date, Bonus Points, Bonus Type, Narration, Description
* Supports custom Start/End Date parameters and monthly scheduling

**Points Movement Summary (MTD)**

* Monthly report showing point movements from the 1st to the last day of the month
* Columns: Member Relation Reference, Date Range, Opening Balance, Accrued Miles, Redeemed Miles, Expired Miles
* Includes adjustment columns for Bulk Upload and Manual Add/Remove modifications
* Closing Balance reflects the last day of the month

**Custom Summary Report**

* Per-member summary columns: Member ID, BIN, Last Update, Status
* Point breakdowns: Purchase Points (Type 4), Bonus Points, Earned Points (excluding Type 4), Redeemed Points
* Totals: Total Points Available, Total Purchase Points Available, Total Earned Points Available

### Custom Date Range Generation

* A new **Generate** button in the Custom Report module allows data generation between two specified dates
* Admin users create reports; users with "Create Report" permission can share, delete, and generate; users with "View Report" permission can only view, generate, and download

***

## Manual Points

### Narration Prefix for Manual Adjustments

* All transactions created via Add/Remove Points now include the prefix **"Manual Adjustment"** in the narration (e.g., *"Manual Adjustment – Bonus Points"*)
* Existing narration values are preserved but prefixed
* The updated narration is visible in Transaction Summary, Exports, and Reports
* Users can filter by *"Manual Adjustment"* to isolate manual entries

### Maker-Checker Comments

* When maker-checker is enabled, the maker can add comments during an Add/Remove Points request
* Comments appear in the maker-checker request description (not in the approval section)
* Audit trail captures verifier and approver comments, not maker comments

***

## Member Activity

### New Activity Codes

The following activity codes are now available in the LBMS database:

| Activity         | Code |
| ---------------- | ---- |
| Pay with Rewards | 168  |
| Points Transfer  | 169  |
| Cashback         | 170  |
| Sport Booking    | 171  |
| Sport Search     | 172  |
| Sport Details    | 173  |

* Activities are passed via the `InsertMemberActivityWithSessionID` and `InsertMemberActivity` APIs
* Activities are exportable via the Member Activity export feature
