Understanding Coupons, Promotional Codes, and Discounts in Stripe

Coupons, Promotional Codes, and Discounts are Stripe features for implementing price discounts for customers. Do they mean the same thing? How are they different?

Understanding Coupons, Promotional Codes, and Discounts in Stripe

Stripe has Coupons, Promotional Codes, and Discounts. These three sound like the same feature and may be confusing if you are looking to implement price discounts for customers. Do they mean the same thing? Which of the three should you go with? Let's see.

Engage + your payment gateway

Engage connects to your Stripe, Fastspring, Paddle, and other payment gateways, to help you automate your payment receipts, subscription reminders, and failed payment notifications.

What is a Coupon?

According to Stripe, “a Coupon contains information about a percent-off or amount-off discount you might want to apply to a customer”. In other words, you can create a Coupon to give discounts to customers. Creating a Coupon gives you an ID (you can set one yourself) that can then be applied to Payment resources like Subscriptions, Invoices, and Checkout Sessions for the discount.

Creating a Coupon on the Stripe dashboard

Here are the options you have when creating a Coupon:

  • You can decide if you want to give a percentage discount or a fixed amount discount.
  • You can select the products the Coupon should apply to.
  • You can specify the duration of the Coupon - forever, once, or multiple months. If for example, you want to create a "30% off for 3 months" coupon for subscriptions, you will set Duration to “multiple months” and the number of months to "3".
  • You can also set the date range when the Coupon must be redeemed.
  • You can limit the total number of times, across all customers, the Coupon can be redeemed.

As far as giving discounts goes, Coupons do the trick. What then are Promotional Codes?

What is a Promotional Code?

Stripe says “A Promotion Code represents a customer-redeemable code for a coupon”. Well, a Coupon’s ID is also a form of customer-redeemable code so that doesn’t really explain the difference.

When you create a Coupon, you may want to generate multiple customer redeemable codes instead of using the Coupon’s ID. This is where Promotional Codes come in. Imagine I want to create five “30% off for 3 months” discount offers. One way would be to create five separate Coupons with the same discount information. But what if I can create a single "30% off for 3 months" Coupon and generate five codes from that Coupon? That’s what Promotional Codes are about. When you create a Coupon, you can create multiple Promotional Codes under the Coupon.

Adding Promotional Codes to a Coupon on Stripe's dashboard

Promotional Codes provide additional flexibility to what already exists on the Coupon.

  • You can make it eligible for only customers making their first purchase.
  • You can limit it to a specific customer.
  • You can limit the number of times it can be redeemed. This number cannot exceed the “redeem” limit on the Coupon.
  • You can set an expiry date just as with a Coupon.
  • You can set the minimum amount the order must be for the Promotional Code to be valid.

So, what are Discounts?

Unlike Coupons and Promotional Codes, a Discount is not a redeemable code for price reduction. Instead, when a Coupon or Promotional Code is applied to a payment resource, a Discount is what we get. It contains all the necessary information about the redeemed Coupon or Promotional Code, what payment resource it was applied to, the customer details, and more.

Discounts are merely informational – they let us know a deduction has been applied and give us details of the Coupon or Promotional Code used.

Creating Discounts - Coupon or Promotional Code?

Now that you know the difference, which should you choose?

  • If you want to create a one-off discount and are comfortable sharing a single code with as many customers as you want, it is fine to use a Coupon.
  • If you will be the one applying the Coupon (through the Stripe dashboard for example) and will not be sharing a redeemable code with the customer, use a Coupon.
  • If you want to have multiple variants of the same discount but with different limitations, for example setting different expiry dates or minimum order value, use Promotional Code.
  • If you want to target first-time customers or a specific customer, use Promotional Code.
  • When not sure, use Promotional Code.

How to implement a Coupon

To implement a Coupon, the first step is to create the Coupon. This can be done via the API or Stripe dashboard (Product Catalogue -> Coupons -> Create a coupon). Once done, you can then add the Coupon to the customer or the following payment resources using the API or the Stripe dashboard:

  • Checkout Sessions
  • Subscriptions
  • Invoices
  • Quotes

Coupons do not work with the conventional Charge or Payment Intents (the replacement for Charge). If you want to support discounts on one-off payments, use Checkout Sessions instead.

How to implement a Promotional Code

To implement a Promotional Code, create a Coupon and add the Promotional Code. You can also add a Promotional Code to an existing Coupon. Once done, you can then add the Promotional Code to the customer or the following payment resources:

  • Subscriptions
  • Checkout Sessions

Limitations and Notes

  • You can’t apply a promotion code with amount restrictions on the Customer object or a subscription update API call.
  • A Coupon attached to a subscription takes priority over a Coupon attached to a customer. Adding a Promotional Code or Coupon to a customer instead of a subscription means that if the subscription is canceled and the code is still valid, they can still enjoy it on a new subscription.
  • You can’t apply both a Promotion Code and a Coupon at the same time to a subscription or a customer.
  • It’s not possible to stack two or more promotion Codes or Coupons.

Engage + your payment gateway

Engage connects to your Stripe, Fastspring, Paddle, and other payment gateways, to help you automate your payment receipts, subscription reminders, and failed payment notifications.