What enforces coupon eligibility before payment on hosted checkout and in the portal?
Problem Statement
You need trial or promotion coupons on fixed hosted checkout URLs—and coupon entry in the Self-Serve Portal—to reject ineligible customers after they identify themselves and before payment, without relying on webhooks or browser callbacks on your site.
Related Scenarios
- Enforcing one redemption per person across multiple customer records that share an email address.
- Confirming whether an already-distributed catalog checkout link picks up an updated redemption limit.
- Checking whether Chargebee can call your system to approve or deny a coupon during hosted checkout.
Solution
Yes, for the one rule Chargebee enforces natively: Redemption Limit Per Customer on a One-Time coupon (Product Catalog 2.0). Chargebee evaluates it server-side after the customer identifies themselves and before payment, on both already-distributed fixed hosted checkout links and coupon entry in the Self-Serve Portal. The rule lives on the coupon, not the link, so an existing catalog URL picks up a changed limit without being replaced. When the limit is exceeded, the coupon is rejected, payment is not collected, and no subscription is created.
For instructions on setting the limit, choosing how customers are identified (Customer ID vs Customer Email), and understanding what the limit covers, follow Enforce redemption limits at checkout and in the portal.
Any rule native limits can't express—a shared trial across two coupons, a cooling-off period, or blocking customers who still have a usable subscription—has to be decided by your own system before the customer reaches Chargebee: hosted checkout does not call an external validator mid-flow, and an entry page you control cannot govern customers who open a Chargebee hosted URL directly.
Important Notes
There is no documented, non-transactional “validation only” flow on production fixed links that proves rejection after identification without going through checkout on a live site. Confirm rejection end to end on your test site with test payment methods, or enforce eligibility before redirecting to a hosted page you generate through the API (for example, after checking the customer with the List Customers API).