Skip to main content
You can attach coupons at subscription creation time. For post-creation changes (add, remove, or schedule a future removal), use the subscription modification API.

Before you start

The coupon must be:
  • Status: active
  • Within its redeem_after / redeem_before window (if set)
  • Below its max_redemptions limit (if set)
Validation runs at association time. If any condition fails, you get a validation error before the association is created.

At subscription creation

Pass coupons in the subscription_coupons array. Each entry takes a coupon_code (the human-readable code from the coupon object), optional start_date/end_date, and an optional price_id to target a specific line item.

Subscription-level coupon

Discounts the full invoice subtotal. Omit price_id:
start_date defaults to the subscription start date. end_date is optional: omit it to let the coupon run until its own cadence ends or the subscription cancels.

Line-item coupon

Discounts one specific price in the plan only. Set price_id to the target price:

Scheduled discounts via phases

Subscription phases are the recommended way to apply time-bounded coupons. Each phase has its own start_date and optional end_date. Coupons in a phase inherit those dates as their association window.

Example: introductory discount for Q1 only

The coupon is active during Phase 1 only. Phase 2 has no coupon, so invoices from April onwards are at full price.

Example: line-item discount scoped to a phase

Common scheduling patterns

Add or remove a coupon after subscription creation

Use the subscription modification API with type: "coupon".

Add a coupon

start_date defaults to now if omitted. end_date is optional: omit it to apply the coupon indefinitely. To target a specific line item instead of the full invoice, add subscription_line_item_id (mutually exclusive with subscription_id):

Remove a coupon

Get the coupon_association_id from the subscription response with expand=coupon_associations. Removal affects only invoices generated after the request. Previously issued invoices are not changed.

Preview before executing

subscription_coupons fields (at creation)

coupon_params fields (post-creation modification)

How discounts appear on invoices

Discount amounts are tracked at two levels on each line item: At the invoice level, total_discount is the sum of all coupon discounts across all line items. The discount terms are snapshotted when the coupon is applied, so they are preserved even if the coupon definition is later updated.

Check active coupons on a subscription

Validation errors