> For the complete documentation index, see [llms.txt](https://docs.roadmap.so/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roadmap.so/loyalty-and-rewards/troubleshooting/a-customers-loyalty-coupon-isnt-working.md).

# A customer's loyalty coupon isn't working

A customer says their loyalty code isn't working, shows insufficient points, or they want to undo a redemption. How to diagnose it and put the points back.

**Symptom:** a customer redeemed points for a coupon, but at checkout it's rejected. They see "code not working", an *insufficient points* message, or the discount simply won't apply. Or they've changed their mind and want the redemption undone.

Almost every case resolves the same way: find the coupon, identify which rule it's tripping, then **refund it so the customer can redeem fresh**.

### Step 1: Find the coupon and check its status

Open **Loyalty Program → Manage Customers**, open the customer, and switch **Point History** to the **Discounts** tab. Every code they've generated is listed with its status:

* **Active**: generated and unused. The code is valid; the problem is one of the restrictions below. *Active does not mean it has been spent.*
* **Used**: already spent on an order. It won't apply again.
* **Refunded / Deleted**: the code no longer exists; the customer may be trying an old code.

(You can also search the code or email in **Unused Loyalty Coupons**, or search the customer's email in **Shopify → Discounts**.)

### Step 2: Match the symptom to the cause

**The code is for a different product than the one in the cart.** Product-redemption coupons are **locked to the specific product chosen at redemption**. If the customer redeemed a coupon for Product A and is trying to buy Product B, the checkout rejects it. To the customer, this often reads as "Q3DCB3FU is valid but not applicable. Check discount terms." via Shopify default checkout messaging. The customer's loyalty timeline history shows which product each redemption was for.

<figure><img src="https://393112916-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJ8asLD4FVCFagK40xEr4%2Fuploads%2FNbn6WsOJDUQ9Z5IftcaX%2FScreenshot%202026-09-02%20at%2010.33.29%E2%80%AFAM.png?alt=media&amp;token=8cf42cd4-3464-4264-8392-f2bcff386cc8" alt=""><figcaption></figcaption></figure>

> Customers often don't realise a redemption code is product-specific; to them, "a code is a code". The fix is always the same: refund the coupon and have them redeem the product they actually want.

**The product is out of stock.** If the redeemed product can't be purchased right now, the coupon can't be used. Refund it and let the customer redeem something else, alternatively, the customer can wait for restock.

**The order doesn't meet the coupon's restrictions.** Amount discounts can carry a **minimum order value**, **product/collection scoping**, and **combination rules**. A coupon that can't combine with another discount already in the cart will be rejected. Check the reward's settings in **Points → Ways to redeem**. The storefront redeemer block messages (e.g. *Reach minimum order value of…*) will surface when an error is occurring.

**The code was already used, refunded, or deleted.** The status tells you. If they need the discount again, that's a fresh redemption.

{% hint style="info" %}
The checkout's own error wording is controlled by **Shopify**, not Roadmap, so it can be generic. The Discounts tab and the storefront redeemer are where the specific reason shows.
{% endhint %}

### Undoing a redemption

Customers **cannot reverse a redemption themselves**. Refunds are admin-only, which is industry standard. At this time, coupons also cannot be edited or transferred to a different product.

So whether it's a change of mind, a wrong product, or a tripped restriction, the resolution is the same: refund the unused coupon. The points return to their balance immediately, the old code is deleted from Shopify, and the customer redeems fresh.

{% hint style="success" %}
**Reduce these tickets:** add a line to your store's FAQ explaining that product redemption codes only work on the product selected, and that customers should contact you to undo a redemption. The [Loyalty FAQ block](https://docs.roadmap.so/loyalty-and-rewards/getting-started/customize-the-loyalty-widgets) is a good home for it. Here is an example:\
\
**Can I change or cancel a points redemption?**

When you redeem points, the code is tied to the reward you selected. A code for one product won't work on a different product, and an amount discount cannot be exchanged or upgraded once the redemption for the code has taken place. If you've redeemed the wrong reward or changed your mind, contact us: we'll refund the coupon, your points will go straight back to your balance, and you can redeem again.
{% endhint %}

### Related guides

* [Refund an unused loyalty coupon](/loyalty-and-rewards/points-and-ways-to-earn/refund-an-unused-loyalty-coupon.md)
* [Where is a customer's loyalty discount code?](/loyalty-and-rewards/troubleshooting/where-is-a-customers-loyalty-discount-code.md)
* [Set up an amount discount reward](/loyalty-and-rewards/points-and-ways-to-earn/set-up-an-amount-discount-reward.md)
* [Set up product redemption](/loyalty-and-rewards/points-and-ways-to-earn/set-up-product-redemption.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.roadmap.so/loyalty-and-rewards/troubleshooting/a-customers-loyalty-coupon-isnt-working.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
