Table of Contents
FoxyCart Coupons and Discounts
Coupon codes can be a very significant marketing tool, so it's important to understand what is and isn't possible with FoxyCart's coupon and quantity discounting functionality. While coupon codes and quantity discounts may not seem inherently related, FoxyCart uses almost the same logic and syntax for both, so we'll discuss them together.
We've found that stores with coupon codes tend to generate 60% more revenue and 83% more transactions than stores not utilizing coupon codes, and those numbers increase (significantly) as the number of coupon codes increases. (Stores with 10 or more coupon codes do 3.8x the revenue and 3x the transactions. According to our data, at least. No joke.) It's not a magic bullet, but simply having coupon codes available can motivate an otherwise “too busy” merchant or marketer to do some email marketing or advertisements promoting the coupon codes. Try it! According to our systemwide data, you won't regret it.
How They Work
It's important to understand that both coupon codes and discounts can apply a value or percentage based discount, based on the value or quantity “tier” of the cart (or of specific categories, or specific products, depending). This is a critical piece to understand, because in FoxyCart you cannot simply apply a “$5 discount” without a tier, even if that tier is simply “minimum quantity of 1 product”.
That might sound confusing, but once you understand the logic and syntax you'll see how it's possible to create very advanced discount structures without much trouble at all.
Important Words to Understand
In order to make sure we're on the same page, let's review the terms we'll be using.

Discount Name
 The text displayed to the customer where a discount is applied. For example, “Spring Cleaning Special” or “Wholesale Quantity Discount”.

Discount Method
 The type of discounting method being applied, such as “discount by the price based on the quantity” or “discount by a percentage based on the cart subtotal”. Details.

Discount Type
 The specific type of discount, such as an “all units quantity discount”, a “one off” discount, a “Buy One, Get One”, or etc. Details.

Discount Tier
 The threshold (either a currency value or a product quantity value) that must be reached in order for a the corresponding
discount amount
to be applied. All discount types can accept multiple tiers except for therepeat
type. 
Discount Amount
 The amount of the discount, either applied as a set dollar (or other currency) amount or as a percentage of the product price. Details.

Discount Logic
 The combination of the discount type (if specified) with the discount tiers and amounts. For example this could be
allunits110220
or15510350
or150
.
Discount Methods
Four different methods are provided for discounts to dictate what type of discount is applied based on what criteria

discount_quantity_amount
 Accepts: A valid discount string.
 Notes: Discounts by an amount, based on the quantity of tobediscounted products. Abbreviated
$/qty
. 
discount_quantity_percentage
 Accepts: A valid discount string.
 Notes: Discounts by a percentage, based on the quantity of tobediscounted products. Abbreviated
%/qty
. Note that the value is based on the average of all applicable products, so applying this discount to differently priced items will result in an averaged discount. 
discount_price_amount
 Accepts: A valid discount string.
 Notes: Discounts by an amount, based on the price of tobediscounted products. Abbreviated
$/$
. 
discount_price_percentage
 Accepts: A valid discount string.
 Notes: Discounts by a percentage, based on the price of tobediscounted products. Abbreviated
%/$
. Note that the value is based on the average of all applicable products, so applying this discount to differently priced items will result in an averaged discount.
Discount Types

allunits
 Also Called: AllUnits Quantity Discounts
 Description: Discounts the price of all of the products affected by the discount. Also referred to as “volume discounts” or “bulk order discounts.”
 Notes:
allunits
is the default discount type for quantity discounts applied to products. If a discount type isn't specified,allunits
is applied.  Examples:
 Scenario: Buy two products, take $2 off of both.
 Method:
discount_quantity_amount
 Logic:
allunits22
 Scenario: Orders of five or more get a 10% on every item ordered. Orders of 10 or more get a 20% discount on every item ordered.
 Method:
discount_quantity_percentage
 Logic:
allunits5101020

incremental
 Also Called: Incremental Quantity Discounts
 Description: Discounts only the units above the tiers you set.
 Notes: Most useful for individual products or many products with the same price. Not useful for
$/$
discount methods.  Examples:
 Scenario: Buy two products, get additional products at $5 off. (The first two are not discounted.)
 Method:
discount_quantity_amount
 Logic:
incremental35
 Scenario: With a quantity of 110, all products are at 100% (no discount). With a quantity of 150, 10 products would be at 100%, 40 would be at 90%, 50 would be at 85%, and 50 would be at 80%.
 Method:
discount_quantity_percentage
 Logic:
incremental1110511510120

repeat
 Also Called: Buy One, Get One (BOGO), or “Repeatable Incremental Quantity Discounts”
 Description: Repeatable discounts are somewhat similar to
incremental
discounts, but only have a single tier that repeats. Using this method you can achieve “buy one get one free” types of discounts that repeat (buy 1 get 1, or buy 3 get 3). You can also do something like “buy 3 get the 4th at $5 off”, so buying 5 or 6 would only get a single $5 discount, but buying 8 would get a $10 discount.  Notes: Not useful for
$/$
discount methods. Only accepts one tier.  Examples:
 Scenario: Buy one, get one free (100% off).
 Method:
discount_quantity_percentage
 Logic:
repeat2100
 Scenario: Buy 3, get the 4th at 50% off.
 Method:
discount_quantity_percentage
 Logic:
repeat450

single
 Also Called: Single Discount, OneOff Discount; or Coupon mode
 Description: Unlike the other discount types, the
single
discount type applies one single discount and not a quantity discount across all products.  Notes:
single
is the default discount type for coupons, as it makes the most sense in that context. For%/qty
and%/$
asingle
discount type will yield the same discount asallunits
.  Examples:
 Scenario: Buy any 5 products, get $10 off your order.
 Method:
discount_quantity_amount
 Logic:
single510
Syntax
The discount syntax below shows all the pieces to creating a discount. In a coupon or category discount, the discount_method
, Discount_Name
, discount_type
and the discount tiers are specified separately from each other within the FoxyCart administration. See the next section on Creating A Discount for further details on that.
 Example Discount Syntax

discount_method=Discount_Name{discount_typeXAYBZC}
discount_method
: One of the Discount Methods above.Discount_Name
: The text label applied to the discount and displayed to the customer in the cart. For example, “Summer Special” or “Local Coupon Discount”. A discount name is required for discounts to apply properly on cart pageloads.discount_type
: A Discount Type from above. Optional. Will default tosingle
if a coupon, orallunits
otherwise.X
,Y
,Z
: “Discount Tiers”. The threshold at which the Discount Amount will apply.A
,B
,C
: “Discount Amounts”. The amount or percentage discount to apply.
Creating A Discount
There are three different ways that a discount can be applied  automatically at the product level or and the category level, or manually by the customer in the form of a coupon.
Need a hand creating your discount tiers?
Try out our helper interface to create your discount.
Product Discount
A product level discount applies to a single product and that product only. This is often desired for items that may be ordered in bulk, like screws or other hardware items.
For Product Discounts, allunits
is the default discount type unless otherwise specified.
How are they created
Product discounts are added to the cart inside the product add to cart link or form that the product is created in.
How are they added to an order
Product discounts are automatically added with the product when it is added to the cart
How are they displayed
Product discounts are displayed as an option for the given product it applies to
Example
As part of a link:
discount_quantity_percentage=My Discount{allunits5101020}
As part of a form:
<input type=“hidden” name=“discount_quantity_percentage” value=“My Discount{allunits5101020}” />
Category Discount
A category discount is applied to all products that are assigned to that category equally, so categorybased discounts work best when the category contains similarly priced items or you work with percentage based discounts.
If you would like your category discount to be applied only in certain cases (like when a customer is a member of a group that receives the discount), then you can create two categories, one with and one without the discount, and use the discounted category (or not) when adding products to your cart.
The default discount type for category discounts is allunits
.
How are they created
Category discounts are created from within your store's FoxyCart administration, within the settings for each individual category.
How are they added to an order
Category discounts are automatically added to any products associated the category it applies to.
How are they displayed
A discount applied to products from a category level discount appear as an attribute for the relevant products in the cart display. It also modifies the per item price of the product based on the discount.
Example
 Category Discount Type

Discount by a percentage based on the quantity
 Discount Name

My Discount
 Discount Details

allunits5101020
Note
When using a category discount with a type of single, this will distribute the discount equally across all products. This means that in a situation with 2 products, 1 $10 and 1 $20 product, with a discount by an amount based on the quantity of single110
(which says for 1 or more products, discount $10), the discount will apply $5 on each of the two products. Otherwise the discount is applied equally to each product, so for an example, a discount of $10 would mean that $10 is discounted from each product in the category.
Coupon Codes
Unlike product or category quantity discounts, coupon codes apply one single discount as a lineitem in the cart, and do not affect the individual product prices. Coupon codes also can apply to one or many categories, but cannot be productspecific (unless the product is the only product in a given category).
The default discount type for coupons is single
.
How are they created
Coupons are created from within your store's FoxyCart administration, on the coupons page.
How are they added to an order
Coupons can be added in two ways.
Automatically
Coupons can be added with a product add to cart link or form by specifying the coupon
parameter with the coupon's code as the value (after you've created the coupon in the admin). Multiple coupon codes can be added at one time, separated by a comma, for example: coupon=code1,code2,code3
. This means that the customer won't need to take any action for the coupons to be applied, and will appear in their cart when the order matches the coupons requirements.
Here are examples for both link and form addtocart types. I've created a coupon in the admin with a code of 20OFF20
that gives a bulk 20% discount when a customer orders 20 or more products.
Link Example
<a href="https://YOURSTORE.foxycart.com/cart?name=Flute+Swab&price=10&coupon=20OFF20"> Add to Cart </a>
From Example
<form action="https://YOURSTORE.foxycart.com/cart" method="post"> <input="hidden" name="name" value="Flute Swab" /> <input="hidden" name="price" value=10 /> <input="hidden" name="coupon" value="20OFF20" /> <input type="submit" value="Buy It!" /> </form>
If making use of the add to cart link and form encryption  the coupon
parameter does not need to be encrypted.
Manually
A customer can enter a coupon manually on the cart page of the FoxyCart checkout process. If a valid coupon exists for the store, a link to 'Add a coupon' will appear within the carts totals area between the subtotal and the total. Clicking this link will display a text input that customers can enter the code into and click to update the cart and add the coupon.
Something to note here is that if there is currently no valid coupon for the store, then the 'Add a coupon' functionality won't be displayed in the cart. This prevents possible cart abandonment as people may possibly leave your store in search of a coupon that doesn't exist. There are a couple ways that a coupon may not be valid or active:
 The current date is outside of the active date range set for the coupon
 The coupon has been used as many times as is allowed
How are they displayed
A coupon is displayed as a line item in the totals section of the cart as a single discount amount.
Details
Coupon codes have a variety of configuration options in addition to the discounting functionality described above.
 Coupon Name
 The name displayed in the cart, once a coupon has been added. For example, “Loyal Customer 20% Off Coupon”. This allows both the customer and store admin to easily see what coupon has been applied to their cart.
 Coupon Code
 This is the “coupon” itself; the actual text that is distributed by the merchant and entered by the customer. This should be alphanumeric, but care should be taken to ensure it's easily readable (ie. 0 versus O, 1 versus l versus I, etc.). Coupon codes are case insensitive, so
MyCoupon1
,MYCOUPON1
andmycoupon1
are all considered the same.  Coupon Variations
 FoxyCart allows for a single coupon code to be defined, but to generate multiple distinct coupon variations (up to 100 at a time). This allows for easy creation of multiple unique codes, all with identical discount options, which can be very useful for mail merges or other coupon distribution where any individual coupon code may only have 1 single use, but you may need dozens or hundreds (or thousands).
 Coupon Type
 The type of discount you want to apply (see above for details on that)
 Coupon Details
 The discount logic, such as
incremental15210
 Combinable
 If the “combinable” checkbox is left unchecked when creating a coupon it will not be added to the cart if another coupon is already in the cart. Similarly, if this coupon is added first, no other coupons will be able to be added to the cart.
 Taxable
 If the “taxable” checkbox is checked when creating the coupon taxes will be applied before the coupon's discount is applied. Check with your tax professional if you have questions about how you should calculate taxes.
 Category Discounts
 If this box is checked, category discounts will not be applied to the relevant parts of an order (and the coupon discount will be applied instead). As an example, let's say you have a 15% quantity discount (when quantity is 2 or greater) applied for
category=shirts
, and you have 3 shirts in the cart at $10 each. This quantity discount would be $4.50. Now let's say you have a coupon code with this checkbox checked. When that coupon is added to the cart, the quantity discount will be removed, and only the coupon discount will remain. This is most often useful in situations where you do not want coupons discounts to be added together with other discounts.  Line Item Discounts
 This is nearly identical to the “Category Discounts” above, but applies to productlevel discounts.
 Valid Dates
 If the coupon has dates set, it can only be used within those date ranges. The start and end dates are inclusive, so coupon codes can be used on the start and end dates as well. See notes
 Apply to Categories
 Similar to the category quantity discounts, but can be applied to multiple or all categories. So if a coupon code only applies to the TShirt category and there are no TShirts in the cart, no discount will be applied.
 Restrict Usage by Product Code
 If you want to limit which products can use this coupon, you can enter a comma separated listed of product codes or partial product codes using
*
as a wild card at the beginning or end of the value. Soabc123
,fun_*
,*small
would matchabc123
,fun_
andfun_times
, andexamplesmall
. It wouldn't matchabc12
,abc1234
,fun
, orgoodsmalls
. If a code starts with
it will be considered as a blacklist instead, matching everything except products that match that code. For example*small
would match every product that does not have a code that ends insmall
. Whitelists and blacklists can also be combined,foo*, foobar
would match all products that begin withfoo
except any products with a code offoobar
. Currently restricted to a maximum length of 5000 characters.  # of Uses (Total)
 If you want to limit the number of uses this coupon as a whole can be used, enter a number here. If, for example, only the first 50 customers can use the coupon, enter 50 here. This relates to coupon variants and the number of uses per code (below). If you have 1 coupon code and 10 uses, the coupon will not be able to be used after 10 successful transactions. If you have 1 coupon with 100 variants but only 50 uses, only the first 50 uses will be allowed, regardless of the number of uses per code.
 # of Uses (Per Code)
 This is similar to the total number of uses, but only limits individual coupon code variants. So if you have 100 coupon code variants and this value is set to 1, each variant will only be able to be used once. The total uses allowed (above) is a higher priority than this, however, so if a coupon's total uses has already been reached then this value doesn't matter.
 # of Uses (Per Customer)
 If you want to limit the number of uses an individual customer can use a given coupon, enter the number of uses here. For example, if each customer is only allowed to use this coupon once, enter 1. This is based off of the customer's email address, not a payment method, ip address, shipping address or browser cookie, so the customer could conceivably enter a different email address to receive the discount again.
For the three options that limit a coupon based on usage (either in total, or by code or customer), a coupon is only considered used if it applies an actual discount on the transaction. This means for subscriptions that have a future start date, making their initial transaction $0, that won't count towards the usage for a coupon.
Notes
 Time and dates are relative to your store's timezone settings.
 The coupon code entry block is hidden from the cart unless the store has at least one valid coupon, where “valid” means “applicable here and now”.
General Discount Notes
It is important to note that the discount tiers only count against the portion of the cart that will actually receive a discount. So a categorywide quantity discount that has a quantity tier of 5 will not apply if there are only 3 products in the category, regardless the number of products in other categories.
All product and category quantity discounts are applied to the products themselves, and not as a separate line item like a coupon code. So if a product is ordinarily $10 and has a 10% discount, the discount is reflected in the product details and the product price becomes $9.
Product quantity discounts can be combined with category quantity discounts, as well as coupon codes, however it will likely result in confusion to mix productspecific and categoryspecific quantity discounts, so it's best avoided if possible.
Common Discount Examples
Below is a list of common discounts in stores detailing their discount method and logic. For applying to a specific type of discount (product, category or coupon), please see details above.
Buy two products, take $2 off of both.
 Method:
discount_quantity_amount
 Logic:
allunits22
Orders of five or more get a 10% on every item ordered. Orders of 10 or more get a 20% discount on every item ordered.
 Method:
discount_quantity_percentage
 Logic:
allunits5101020
Buy two products, get additional products at $5 off. (The first two are not discounted.)
 Method:
discount_quantity_amount
 Logic:
incremental35
With a quantity of 110, all products are at 100%. With a quantity of 150, 10 products would be at 100%, 40 would be at 90%, 50 would be at 85%, and 50 would be at 80%.
 Method:
discount_quantity_percentage
 Logic:
incremental1110511510120
Buy one, get one free (100% off).
 Method:
discount_quantity_percentage
 Logic:
repeat2100
Buy 3, get the 4th at 50% off.
 Method:
discount_quantity_percentage
 Logic:
repeat450
Buy any 5 products, get $10 off your order.
 Method:
discount_quantity_amount
 Logic:
single510
Take 10% off orders of $99.99 or more.
 Method:
discount_price_percentage
 Logic:
allunits99.9910