Discount code not applying at checkout
A shopper enters a code such as SALE20 in the CouponSection but gets a rejection even though the promotion looks active in /dashboard/discounts. The problem is common when multiple conditions interact: dates, minimums, products, and usage caps.
Why this happens
Because the public validation POST /api/coupons/public/validate checks code, dates, eligibility, and limits together, and any single failing condition blocks application. Dashboard changes such as pausing or narrowing products reflect immediately on new orders.
What Vareons does about it
Vareons surfaces the validation rejection reason, and offers a fix path from /dashboard/discounts by reviewing code, dates, minimum, products, and usage, then Save and retry checkout, with /dashboard/discounts/[id]/history showing who changed the rule and when.
- discounts.coupons.supported — Discount codes (coupons): Available
- discounts.validity.auto-expire — Discount validity and auto-expiry: Available
Limitations
The current facts registry does not claim automatic prevention of every rejection; some cases need broader conditions or a new coupon instead of editing an expired one.
Related problems
Frequently Asked Questions
Why does the store reject a code that looks active?
Because validation checks the code, dates, eligibility, and limits together, and a single unmet condition blocks application even when the code looks active. Review the expiry date, minimum, included products, usage limits, and paused state before assuming an outage.
How do I find the exact rejection reason?
Vareons displays the rejection reason at validation time, and any earlier change can be traced through the discount history page showing who changed the rule and when. Start from the visible reason, then compare it with the latest recorded change to decide the fix.
Should I edit the expired coupon or create a new one?
It depends on the case: a small edit fixes wrong conditions, but an expired or exhausted coupon usually deserves a fresh one with clear terms. The general rule is not to rely on automatic prevention of every rejection, and to handle each case on its own terms.
Last verified: 2026-09-19