# Coupon (/en/api-reference/objects/coupon)

A Coupon defines a reusable discount you can apply to Checkout Sessions and PaymentIntents. Coupons can grant either a percentage off (`percentOff`) or a fixed amount off (`amountOff`), and can apply once, forever, or repeating for a number of billing cycles. You can also cap how many times a Coupon may be redeemed and when it expires.

Coupons are the reusable template. Each concrete application of a Coupon to a customer's purchase is recorded as a Discount. To give customers a redeemable code (e.g. `SUMMER25`) instead of applying the Coupon directly, create one or more Promotion Codes that map to this Coupon — a single Coupon can have many Promotion Codes, each with its own per-code restrictions. You receive `coupon.*` and `promotion_code.*` webhook events for each as they are created or changed.

## Fields

- `id` (string, required) — Coupon ID
- `object` (string, required) — Object type
- `createdAt` (string, required) — Created timestamp (ISO 8601)
- `discountType` (enum("percentage" | "fixed_amount"), required) — Discount type
- `percentOff` (number) — Percentage off (0.01-100)
- `amountOff` (number) — Fixed amount off in smallest currency unit
- `currency` (enum("EGP" | "USD" | "EUR" | "GBP" | "SAR" | "AED" | "QAR" | "KWD" | "JOD" | "OMR" | "BHD" | "LYD" | "AUD" | "CAD" | "CNY")) — Currency for amountOff
- `duration` (enum("once" | "repeating" | "forever"), required) — Duration
- `durationInMonths` (number) — Number of months for repeating duration
- `name` (string) — Display name
- `maxDiscountAmount` (number) — Maximum discount amount for percentage coupons (caps the discount)
- `minValue` (number) — Minimum order subtotal required to use this coupon
- `maxRedemptions` (number) — Maximum total redemptions
- `customerMaxRedemptions` (number) — Maximum times a single customer can redeem
- `timesRedeemed` (number, required) — Number of times redeemed
- `redeemBy` (string) — Redemption deadline (ISO 8601)
- `valid` (boolean, required) — Whether the coupon is currently valid (computed)
- `active` (boolean, required) — Whether the coupon is active
- `appliesToProductIds` (Array<string>) — Product IDs this coupon applies to
- `metadata` (object) — Custom metadata
- `merchantId` (string, required) — Merchant ID
- `livemode` (boolean, required) — Whether this is live mode