Skip to main content
How-to

Loyalty Points and Rewards Adjustment After a Refund

Last Updated: June 29, 2026


Table of Contents

  1. Overview

  2. Understanding the Loyalty Rewards Flow

  3. Adjusting Points via the Back Office Ledger

  4. Deactivating an Unused Reward Coupon

  5. Recommended Refund Workflow

  6. API Limitations

  7. Troubleshooting

  8. Related Documentation


Overview

When a customer contacts you because a loyalty reward did not apply at checkout and you issue a manual refund for the discount value, you must also neutralize the reward to prevent the customer from redeeming it a second time. This document explains the correct back-office procedure for both Points-based and Cashback-based loyalty programs.


Understanding the Loyalty Rewards Flow

Before making any adjustment, identify which stage the reward was in when the problem occurred.

Stage 1 - Points earned, reward not yet claimed. The customer has enough points to claim a reward, but has not yet clicked "Claim Reward" in the My Account portal. The points are still in the customer's ledger. The coupon or gift certificate has not been generated.

Stage 2 - Reward claimed, coupon not yet used. The customer clicked "Claim Reward." A coupon code (or gift certificate) was generated, and the corresponding points were deducted from the customer's ledger. The coupon exists in the system and can still be applied to a future cart.

Identifying the stage determines which corrective action to take.


Adjusting Points via the Back Office Ledger

Use this procedure when the customer's reward was not yet claimed (Stage 1) and you have already refunded the equivalent discount amount.

Important: The Loyalty Points ledger is located in the Loyalty Program configuration page, not in the Customer Profile editor. The Customer Profile editor only contains the Cashback ledger.

Navigation: Main Menu → Configuration → Checkout → Loyalty → Transactions

  1. Click Transactions on the Loyalty Program page.

  2. Use the filter to locate the customer by email address and confirm their current points balance.

  3. Click New Transaction.

  4. Complete the form:

FieldValue
DescriptionEnter a note explaining the adjustment, for example: "Deduction - refund issued for unused reward (Case 438454000067665372)"
EmailCustomer's email address
Order IDThe order ID of the refunded order, if applicable
Loyalty PointsEnter a negative value equal to the points cost of the reward redeemed. For example, for a 1,500-point reward, enter -1500.
Timestamp Date/TimeEnter the current date and time.
  1. Save the transaction. The customer's available points balance will be reduced immediately.

Note: Since this is a ledger system, there is no delete option. All adjustments are made by entering offsetting positive or negative transactions. Every adjustment is permanently recorded.


Deactivating an Unused Reward Coupon

Use this procedure when the customer had already claimed a reward and a coupon was generated (Stage 2), the coupon was not applied at checkout, and you have already issued a refund.

Because the points were already deducted when the reward was claimed, a points ledger entry is not needed. The risk is that the generated coupon code remains active and can be applied to a future order.

Navigation: Main Menu → Configuration → Checkout → Coupons

  1. Search for the coupon code that was generated for this customer's reward.

  2. Open the coupon.

  3. Mark it as Inactive or set an expiration date in the past.

  4. Save.

If the reward type was a Gift Certificate rather than a coupon, void the gift certificate instead:

Navigation: Main Menu → Operations → Gift Certificates → find by code → Void.


When a customer reports that a loyalty reward did not apply at checkout, follow this sequence before issuing any refund:

  1. Confirm the reward status. Go to the customer's profile and check whether they claimed the reward (coupon exists) or still hold the points.

  2. Prefer reapplication over refund when possible. If the order was recent and the customer is willing, the cleanest resolution is to apply the coupon or create a new order with the reward applied, rather than issuing a cash refund. This consumes the reward at checkout and closes the loop automatically.

  3. If a cash refund is required:

    • Stage 1 (points not yet claimed): Issue the refund and then enter a negative points transaction per the procedure above.

    • Stage 2 (coupon generated, not used): Issue the refund and then deactivate the coupon per the procedure above.

  4. Document the adjustment. Record the ledger transaction description or coupon deactivation with the order ID and a brief reason. This creates an audit trail for future support inquiries on the same customer.


API Limitations

The UltraCart REST API exposes the loyalty object on the Customer resource as a read-only expanded field. As of June 2026, there is no REST endpoint to:

  • Adjust a customer's loyalty point balance

  • Create or delete loyalty ledger entries

  • Deactivate a reward coupon generated from a loyalty redemption

All loyalty point adjustments must be performed via the back-office Loyalty Transactions ledger described above. Coupon deactivation can be performed via the Coupons resource in the REST API if you have the coupon code; see the Coupons API reference for endpoint details.


Troubleshooting

Reward appears dropped from the cart at checkout

Symptoms: Customer reports the reward discount was not applied even though they entered or claimed it. The order total shows no discount.

Root Cause: Several conditions can cause a coupon or reward to be dropped from an active cart session: the cart session timed out while the customer was on a different page, the customer removed and re-added items causing a cart refresh, or the storefront theme is not current and does not support the My Account loyalty flow.

Diagnosis: Check whether the customer's storefront theme is one of the supported Visual Builder themes (Element, Hero, Lifty, Jewel, Poppy, Natural VB, or Native). Non-Visual Builder themes such as MrTeas do not support the My Account loyalty redemption flow.

Solution:

  • If the theme is unsupported, migrate to a supported Visual Builder theme.

  • If the theme is current, reproduce the issue in a test environment and open a support case with the exact steps to reproduce, the customer's email, and the order ID.

Points balance does not reflect after a negative ledger entry

Symptoms: You entered a negative transaction but the customer's available points appear unchanged.

Diagnosis: Confirm the timestamp on the new transaction is not set to a future date. Vesting days apply only to positive (earned) entries, not to negative (deduction) entries. A negative entry with a current or past timestamp takes effect immediately.

Solution: Re-open the transaction and confirm the timestamp is today or earlier. If the balance still does not update, contact support with the customer email and the transaction timestamp.

Adding points that need to be immediately redeemable

Symptoms: You added points as a goodwill credit but the customer reports they cannot redeem any rewards yet.

Root Cause: Positive ledger entries are subject to the program's vesting period. Points added with today's timestamp will not be available until the configured number of vesting days have elapsed.

Solution: To make added points immediately available, set the transaction timestamp to a date that is at least as many days in the past as your program's vesting days setting. For example, if your vesting period is 61 days, backdate the transaction by 61 days or more.


Was this page helpful?