Promotions
Create and manage customer-redeemable coupon codes — percentage, fixed-amount, and free-trial discounts with redemption caps and validity windows.
Promotions
Promotions (Pricing Studio → Promotions) is Aforo's coupon engine. Coupons are standalone, customer-redeemable discount codes that apply at billing time — distinct from the per-subscription discount baked into an offering.
Coupon fields
Two behaviours worth knowing about the discount types:
FREE_TRIAL_DAYSrecords the redemption but does not automatically extend the subscription's trial window in v1 — an operator applies the extension withPOST /api/v1/subscriptions/{id}/extend-trial.FIXED_AMOUNTmust match the invoice currency. If a coupon's currency differs from the invoice being discounted, the discount is skipped (logged, not applied) rather than converted — so set the currency to the one the customer is billed in.
Status
The KPI strip shows Total Coupons, Active, Currently Redeemable, and Total Redemptions.
Eligibility
By default a coupon is available to everyone. Use the Eligibility section when you create a coupon to lock it down:
Leave both empty for an open promotion. The check runs everywhere the code is used — inline validation, the storefront checkout, and redemption — and the customer scope is taken from the signed-in session, so a customer can't redeem on another's behalf. Once a coupon has been redeemed its eligibility locks along with the rest of its terms; create a new coupon to change who can use it.
Once a coupon has been redeemed, its commercial terms (code, discountType, discountValue, currency, duration) are locked and cannot be edited — this protects customers who already redeemed it. You can still disable it.
How customers apply a coupon
Customers enter the code at storefront checkout, in the Promotion code field on the subscribe screen. As they type, the storefront previews the result inline — a valid code shows the discount, the discounted total, and a customer-ready message ("Valid — 40% off"); an invalid one explains why (expired, redemption cap reached, not eligible for the plan). Nothing is redeemed until they subscribe.
When the customer confirms, the code is applied as part of creating the subscription — atomically. If the code turns out to be invalid at that moment (for example, it hit its cap a second earlier), the whole subscribe fails rather than creating a subscription without the promised discount. The discount then attaches to the subscription and reduces future invoices according to the coupon's discountType and duration.
The preview total is an estimate. The final invoice can differ once metered usage, proration, and tax are applied — checkout labels it as such.
Building your own checkout
If you run a headless storefront, the same flow is three endpoints under the Coupons family of the storefront API:
GET /api/v1/portal/coupons/active lists the discounts currently in effect for a signed-in customer, for an "active promos" panel.
Redemption tracking
Open a coupon's View redemptions to see each redemption: customer, subscription, total discount applied, remaining applications, and redeemed-at timestamp.