Coupons
Coupons define reusable discount templates you can attach to subscriptions to reduce what a customer is charged. They support percentage, fixed-amount, and usage-credit discounts, with optional scope and time limits.
How it works
A coupon is a reusable discount object. You define the discount once, then apply it to one or more subscriptions. The discount is calculated at invoice generation time and appears as a reduction on the relevant line items.
Coupons have two layers of optionality:
- Promotion codes — human-readable codes (e.g.
SUMMER25) that reference a coupon. Promotion codes let you distribute the same underlying discount through different channels or with different redemption limits. - Direct coupon IDs — attach the coupon directly to a subscription schedule without a promotion code.
Discount types
Duration
Scope
By default, a coupon applies to the full invoice. You can restrict it to specific product categories, products, or product items using the limited_to field. Scoped coupons only reduce charges on matching line items.
Lifecycle
Coupons follow the standard resource lifecycle: DRAFT → ACTIVE → INACTIVE → DEPRECATED → ARCHIVED. Only ACTIVE coupons can be redeemed. You must activate a coupon before attaching it to a subscription.
Create a coupon
Via API
Use the Create a coupon endpoint:
Then activate it:
Via Desk
Navigate to Product catalog → Coupons → Add coupon. Fill in:
- Name — display name for internal use
- Reference — unique identifier; auto-generated by default
- Description — optional notes visible to your team
- Discount type — Percentage or Amount, and the value
- Discount duration — One-time, Forever, or Period (with count and unit)
- Limited to — optionally scope to a product category, product, or product item
- Start date / End date — optional validity window
- Maximum redemptions — optional cap on total uses across all customers
Create a promotion code
Promotion codes are human-readable codes linked to a coupon. Create one when you want to distribute a discount through a campaign, referral link, or self-serve flow. Use the Create a promotion code endpoint:
Promotion codes inherit the coupon’s discount and duration. You can add their own start_at, end_at, and maximum_redemptions to further restrict a specific code without changing the underlying coupon.
Apply to a subscription
Attach a coupon to a subscription schedule using either a coupon ID or a promotion code. You can pass both at the same time if needed. See the Create a pricing plan subscription endpoint:
Or by promotion code:
📘
allow_promotion_codeson the subscription template controls whether customers can self-apply promotion codes. Set toSINGLEto allow one code per subscription, orNONEto disable self-service redemption entirely.
Applied coupons appear on the invoice under coupons and promotion_codes, and the discount is reflected on the relevant line items.
View redemptions
Use the Get a list of coupon redemptions endpoint to see which customers have redeemed a coupon:
The number_of_redemptions field on the coupon object tracks the running total.
Edge cases
- A coupon with
maximum_redemptionsset will stop accepting new attachments once that limit is reached, even if it remainsACTIVE. - Scoping a coupon to a product item that isn’t on the customer’s subscription has no effect — the discount silently does not apply to that invoice.
- Deactivating a coupon (
INACTIVE) does not remove it from existing subscriptions. It only prevents new redemptions. - Promotion codes can have stricter limits than their parent coupon (fewer max redemptions, shorter validity window), but not looser ones — the coupon’s constraints always apply.
API reference
Coupons and promotion codes are managed through the Configuration API: