> For the complete documentation index, see [llms.txt](https://docs.akinon.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.akinon.com/technical-guides/commerce/promotions.md).

# Promotions

The Akinon Promotions module allows you to create various promotional campaigns and apply them to your products, offering customers incentives and discounts to encourage sales.

## <mark style="color:red;">How promotions applied?</mark> <a href="#rntoke829ccm" id="rntoke829ccm"></a>

Promotions have three main parts:

* Base Attributes
* Condition
* Benefit

All promotions are fetched from different sources and sorted by importance. Higher importance promotions are applied first. Promotions are applied to the basket one by one. During the application process, a promotion's condition is checked to determine if it is applicable to the basket. If the condition is met, the promotion's benefit is applied to the basket. Multiple promotions can be applied to a single basket, and a single promotion can be applied multiple times to the same basket, as long as its conditions are met.

## <mark style="color:red;">Promotion Types</mark> <a href="#id-206at7xdli25" id="id-206at7xdli25"></a>

There are several types of promotions available:

* **Site-wide**: Automatically applied to the basket, requiring no specific customer or code. This type of promotion is ideal for store-wide sales events or discounts.
* **Coupon**: Automatically applied to the basket if the customer has an eligible coupon in their account. No code is required. Once used in an order, the coupon's status changes to "used."
* **Coupon Code**: Requires both a specific customer and a unique code to be applied. The customer must manually enter the code at checkout. The code is limited to one customer, and its status changes to "used" after it has been applied in an order.
* **Voucher Code**: Requires a code but not a specific customer. The code is manually entered by the customer during checkout and can be used by multiple customers, making it suitable for public campaigns. After being used in an order, the voucher code's status changes to "used."
* **Bulk Voucher Codes**: These are a set of unique voucher codes generated in bulk for widespread distribution. They are typically used for mass promotional campaigns, such as email marketing or social media promotions. Unlike regular voucher codes, each code within the bulk voucher codes can only be used once. After being applied in an order, the voucher code's status changes to "used."
* **Bulk Coupon**: A collection of unique coupon codes that can be distributed to customers for targeted promotions. Each code is specific to an individual customer and can only be used once. The status of the coupon changes to "used" after it has been applied in an order.

### <mark style="color:red;">Campaign Base Attributes</mark> <a href="#id-4u7hj2nfdi9" id="id-4u7hj2nfdi9"></a>

<table data-header-hidden><thead><tr><th width="211.08203125"></th><th width="247.39453125"></th><th></th></tr></thead><tbody><tr><td><strong>Title</strong></td><td><strong>Description</strong></td><td><strong>Example</strong></td></tr><tr><td><strong>Campaign Name</strong></td><td>The name given to the campaign</td><td></td></tr><tr><td><strong>Campaign Slug</strong></td><td>Campaign Slug</td><td></td></tr><tr><td><strong>Campaign Message</strong></td><td>The message that will appear in the filter and/or basket when the campaign is applied</td><td><em>“You have won X TRY!”, “You have X TRY more to spend”</em> etc.</td></tr><tr><td><p><strong>Maximum Number of Application</strong></p><p><strong>(per Basket)</strong></p></td><td>Information on how many times a campaign will be used in a basket. 0 means unlimited.</td><td>In a case where the Maximum Number of Application is 1, when there is a 50% discount campaign if you buy three products, only 50% discount is provided both for the person who buys three products, and for the person who buys six products.</td></tr><tr><td><p><strong>Maximum Number of Application</strong></p><p><strong>(per Customer)</strong></p></td><td>Information on how much a customer can benefit from a campaign. 0 means unlimited.</td><td></td></tr><tr><td><strong>Importance</strong></td><td>The field to determine which campaign will be applied first in case there is more than one campaign for a product.</td><td>Higher value is more important.</td></tr><tr><td><strong>Start Date</strong></td><td>Campaign Start Date</td><td></td></tr><tr><td><strong>End Date</strong></td><td>Campaign End Date</td><td></td></tr><tr><td><strong>Status</strong></td><td>Campaign Activity Status</td><td><code>Passive</code> and <code>Active</code> options are available. Status changed automatically <code>Used</code> if possible.</td></tr><tr><td><strong>Can be combined with other campaigns</strong></td><td>The checkbox that decides whether the campaign can be combined with other campaigns. If it is not activated, it is not possible to apply more than one campaign to a basket.</td><td></td></tr><tr><td><strong>Show on Product Detail</strong></td><td>The checkbox that decides whether to show the relevant campaign on the Product Detail Page. It is only available for site-wide campaigns.</td><td></td></tr><tr><td><strong>Show on Product List</strong></td><td>The checkbox that decides whether to show the relevant campaign in the Product List. It is only available for site-wide campaigns.</td><td></td></tr><tr><td><strong>Show on Basket</strong></td><td>The checkbox that decides whether to show the relevant campaign in the Basket. It is only available for site-wide campaigns.</td><td></td></tr></tbody></table>

## <mark style="color:red;">Campaign Priority (Importance)</mark> <a href="#campaign-priority-importance" id="campaign-priority-importance"></a>

When more than one campaign is eligible for the same basket or the same product, the order in which the campaigns are evaluated is decided by their **Priority** (also labelled **Importance**) value.

* All eligible campaigns, regardless of their type (site-wide, coupon, voucher code, etc.), are collected and sorted. **Non-combinable campaigns are evaluated first**, and within each group the campaign with the **higher priority value is evaluated first**.
* Campaigns are then applied to the basket **one by one** in that order. Each campaign checks its own condition against the current state of the basket and, if the condition is met, applies its benefit.
* If a **non-combinable** campaign applies successfully, evaluation stops and **no further campaigns are applied** to that basket. This is why a non-combinable campaign is placed at the front of the queue — see [Combining Campaigns](#combining-campaigns).
* Because campaigns are applied sequentially, the campaign that runs first can consume basket items (see [Consume Types](#id-5ly785f89oxw)) and change the amounts that later campaigns see. A later campaign may therefore behave differently depending on what the higher-priority campaigns already did.
* Priority only decides the **evaluation order**. On its own it does **not** stop a lower-priority campaign from also applying — whether two campaigns can apply together is controlled separately by the combining rules described below.

{% hint style="info" %}
When a benefit needs another benefit to run before it (for example, a "make the cheapest item total 30% off" benefit that must apply after the per-collection discounts), give the dependent campaign a **lower** priority so it is evaluated last.
{% endhint %}

## <mark style="color:red;">Combining Campaigns</mark> <a href="#combining-campaigns" id="combining-campaigns"></a>

Whether two eligible campaigns are applied together (stacked) to the same basket is governed by **three independent controls**. They are often confused with one another, so it is important to understand what each one does:

1. **Can be combined with other campaigns** (`is_mergable`, Campaign Information tab)\
   The master switch for stacking. If this checkbox is **disabled**, the campaign is evaluated before combinable campaigns, and once it applies successfully **no other campaign is applied** to the basket — only this single campaign takes effect. If it is **enabled**, the campaign is allowed to co-exist with others, and the next two controls decide how the items are shared.
2. **Application Type / Consume Type** (Campaign Condition and Campaign Action tabs)\
   Decides, at the **item level**, whether the products this campaign touches stay available to other campaigns. The options map to the [Consume Types](#id-5ly785f89oxw):
   * *Campaign products **can** be included in other campaigns* → **Locally** consumed — the items remain available to other campaigns.
   * *Campaign products **cannot** be included in other campaigns* → **Globally** consumed — the items are removed from the shared pool and no other campaign may reuse them.
   * *The campaign is applied **independently** of other campaigns* → **Whatever is available** — the global consumption list is ignored and the campaign consumes items locally.
3. **Consume Group** (`BASKET_OFFER_IS_CONSUME_GROUP_ENABLED`, optional)\
   When enabled, campaigns placed in the same **Condition Application Group** are evaluated sequentially by priority so that only one campaign per group applies at a time, unless items remain after the higher-priority campaign. See [Consume Group in Campaigns](/technical-guides/commerce/consume-group-in-campaigns.md) for detailed examples.

### <mark style="color:red;">How to prevent two campaigns from stacking</mark> <a href="#prevent-stacking" id="prevent-stacking"></a>

Pick the option that matches the business rule:

* **Never stack this campaign with anything** → disable **Can be combined with other campaigns** on that campaign.
* **Allow stacking in general, but do not let another campaign reuse this campaign's items** → keep the campaign combinable and set its Application Type to *cannot be included in other campaigns* (**Globally**). Note that a globally-consumed campaign still applies alongside campaigns that act on **different** items.
* **Allow both campaigns to trigger, but only one at a time on the same items** → put both campaigns in the same **Consume Group** and order them with priority.

{% hint style="warning" %}
A common misconfiguration is expecting *"Campaign products cannot be included in other campaigns"* to stop two campaigns from combining. It does **not**: it only removes this campaign's consumed items from the shared pool. A second, combinable campaign that matches other items in the basket will still apply. To block combining entirely, disable **Can be combined with other campaigns**, and remember that combine settings must be consistent across **all** of the overlapping campaigns, not just one of them.
{% endhint %}

## <mark style="color:red;">Conditions</mark> <a href="#lfeni87btw9i" id="lfeni87btw9i"></a>

Condition is the rule that must be met in order to apply for the promotion. For example, a promotion can be activated when a basket has 3 or more products from a collection. There are 5 types of conditions:

### <mark style="color:red;">Quantity Condition</mark> <a href="#gw72ej3fc8rw" id="gw72ej3fc8rw"></a>

Quantity condition is used to apply a promotion when a certain quantity of products are added to the basket. For example, a promotion can be activated when a basket has 3 or more products from a collection.

Buy 3 T-Shirts, Get 10 TRY Off:

* Condition Type: Quantity
* Condition Value: 3
* Collection: T-Shirt Collection

When the customer adds 2 products from the T-Shirt Collection to the basket, the promotion will not be applied. Upsell products will be displayed. When the customer adds 3 products from the T-Shirt Collection to the basket, the promotion will be applied once. When the customer adds 4 products from the T-Shirt Collection to the basket, the promotion will be applied once. When the customer adds 6 products from the T-Shirt Collection to the basket, the promotion will be applied twice. Discount will be 20 TRY.

**Parameters**:

* **Collection**: The collection to which the products must belong in order to apply the promotion. if the collection is not selected, Condition will match all products.
* **Quantity**: The number of products that must be added to the basket in order to apply the promotion.
* **Overlimit Quantity**: The number of products that makes the promotion unapplicable. For example, if the promotion is activated when 3 products are added to the basket, and the Overlimit Quantity is set to 5, the promotion will be applied when 3 products are added to the basket, but will not be applied when 5 products are added to the basket.
* **Upsell Message**: The message that will be displayed to the customer when the condition is partially applied.
* **Price Sort Type**: The sorting type of the applicable products. The products are sorted by price in ascending or descending order. For example, if the promotion is activated when 3 products are added to the basket, and the Price Sort Type is set to “Lowest Price”, the cheapest 3 products will be applied to the promotion firstly. If the Price Sort Type is set to “Highest Price”, the most expensive 3 products will be applied to the promotion.
* **Consume Type**: The type of consumption of the applicable products. available types are globally, locally, whatever is available. When the Consume Type is set to “Globally”, the products are consumed globally and will not be available for other promotions. When the Consume Type is set to “Locally”, the products are consumed locally and will be available for other promotions. When the Consume Type is set to “Whatever is available”, the global consumption list will be ignored and the products will be consumed locally.

**Consume Type** and **Price Sort Type** are important parameters for the correct functioning of the promotion. Together determine which products will be applied to the promotion. For example, if the promotion is activated when 3 products are added to the basket, and the Price Sort Type is set to “Lowest Price”, the cheapest 3 products will be applied to the promotion. If the Price Sort Type is set to “Highest Price”, the most expensive 3 products will be applied to the promotion. If the Consume Type is set to “Globally”, the products are consumed globally and will not be available for other promotions. If the Consume Type is set to “Locally”, the products are consumed locally and will be available for other promotions. If the Consume Type is set to “Whatever is available”, the global consumption list will be ignored and the products will be consumed locally.

### <mark style="color:red;">Amount Condition</mark> <a href="#avq3gxf6l4ma" id="avq3gxf6l4ma"></a>

Amount condition is used to apply a promotion when a certain amount of money is spent in the basket. For example, a promotion can be activated when the basket has a total of 100 TRY or more from a collection.

Buy 100 TRY Worth of T-Shirts, Get 10 TRY Off: Condition Type: Amount Condition Value: 100 Collection: T-Shirt Collection

When the customer adds 50 TRY worth T-Shirt products to the basket, the promotion will not be applied. Upsell products will be displayed. When the customer adds 100 TRY worth T-Shirt products to the basket, the promotion will be applied once. When the customer adds 150 TRY worth T-Shirt products to the basket, the promotion will be applied once. When the customer adds 200 TRY worth T-Shirt products to the basket, the promotion will be applied twice. The discount will be 20 TRY.

Parameters:

* **Collection**: The collection to which the products must belong in order to apply the promotion. If the collection is not selected, Condition will match all products.
* **Amount**: The amount of money that must be spent in the basket in order to apply for the promotion.
* **Overlimit Amount**: The amount of money that makes the promotion unapplicable. For example, if the promotion is activated when 100 TRY is spent in the basket, and the Overlimit Amount is set to 150 TRY, the promotion will be applied when 100 TRY is spent in the basket, but will not be applied when 150 TRY is spent in the basket.
* **Upsell Message**: The message that will be displayed to the customer when the condition is partially applied.
* **Price Sort Type**: The sorting type of the applicable products. The products are sorted by price in ascending or descending order. For example, if the promotion is activated when 100 TRY is spent in the basket, and the Price Sort Type is set to “Lowest Price”, the cheapest products will be applied to the promotion. If the Price Sort Type is set to “Highest Price”, the most expensive products will be applied to the promotion.
* **Consume Type**: The type of consumption of the applicable products. available types are globally, locally, whatever is available. When the Consume Type is set to “Globally”, the products are consumed globally and will not be available for other promotions. When the Consume Type is set to “Locally”, the products are consumed locally and will be available for other promotions. When the Consume Type is set to “Whatever is available”, the global consumption list will be ignored and the products will be consumed locally.
* **Price Type**: Unit, Discount or Retail price options are available. When the Price Type is set to “Unit”, the products are consumed by default sale price. When the Price Type is set to “Discount”, the products are consumed by discount price. When the Price Type is set to “Retail”, the products are consumed by retail price.

For example, Product A:

* Unit Price: 100 TRY
* Retail Price: 120 TRY
* Discount Price: 100 TRY

First Promotion Condition Type: Amount Condition Value: 100 Condition Price Type: Discount Benefit: 20% Discount

Second Promotion Condition Type: Amount Condition Value: 90 Condition Price Type: Discount Benefit: 50 TRY Discount

When the customer adds 100 TRY worth of Product A to the basket, the first promotion will be applied once. The discount will be 20 TRY. Product A's Price:

* Unit Price: 100 TRY
* Retail Price: 120 TRY
* Discount Price: 80 TRY the second promotion will not be applied. Because the total amount of the basket is 80 TRY according to the discount price. Upsell message will be displayed.

## <mark style="color:red;">Sub Conditions</mark> <a href="#w19n73w26z1k" id="w19n73w26z1k"></a>

Sub conditions are extra conditions that can be added to the main condition. For example, a promotion can be activated when the basket has a total of 100 TRY or more from a collection, and the customer is a member of the VIP group.

| **Condition Types**                            | **Explanations**                                                                | **Can be Applied To**                                 |
| ---------------------------------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------- |
| **By Card Type**                               | By Card Type in Omnitron                                                        | *Payment Step Discount*                               |
| **According to Installments**                  | According to the Installments to be Applied to the Products                     | *Payment Step Discount*                               |
| **By Bank**                                    | By All Banks Coming By Default After Omnitron Installation                      | *Payment Step Discount*                               |
| **By Payment Type**                            | By Payment Types such as Credit Card, Money Order, Pay-On-Delivery etc.         | *Payment Step Discount*                               |
| **Minimum Basket Amount**                      |                                                                                 | *Total Amount, Total Quantity, Payment Step Discount* |
| **e-mail Extension**                           | By Group/Company E-Mail Addresses                                               | *Total Amount, Total Quantity, Payment Step Discount* |
| **e-mail**                                     | By Specific E-Mail Address                                                      | *Total Amount, Total Quantity, Payment Step Discount* |
| **Bin Number**                                 | By the First Six Digits of the Credit Card                                      | *Payment Step Discount*                               |
| **User Feature**                               | According to the Specific Features of the User Signed Up on the Brand Shop Page | *Total Amount, Total Quantity, Payment Step Discount* |
| **Minimum Number of Products Added to Basket** |                                                                                 | *Total Amount, Total Quantity, Payment Step Discount* |
| **Shopping Platform**                          | By Sales Channel                                                                | *Total Amount, Total Quantity, Payment Step Discount* |
| **By User Membership Date**                    |                                                                                 | *Total Amount, Total Quantity, Payment Step Discount* |

### <mark style="color:red;">Consume Types</mark> <a href="#id-5ly785f89oxw" id="id-5ly785f89oxw"></a>

Consume Types in promotions are used to determine whether the products applied in a promotion will be globally consumed or locally consumed. In simple terms, consume types allow promotions to be composed with other promotions.

There are three consume types available in promotions:

* **Globally**: When a promotion is consumed globally, the products applied to the promotion will not be available for other promotions.
* **Locally**: When a promotion is consumed locally, the products applied to the promotion will be available for other promotions.
* **Whatever**: When a promotion is consumed with the "Whatever is available" consume type, the global consumption list will be ignored, and the products applied to the promotion will be consumed locally.

### <mark style="color:red;">Benefit Types</mark> <a href="#iv9fkb5sbhao" id="iv9fkb5sbhao"></a>

Benefits are the discounts that are applied to the products in a promotion. A promotion can have a single benefit. A promotion can be activated multiple times according to the condition. For example, a promotion can be activated when the basket has a total of 100 TRY or more from a collection, and the customer is a member of the VIP group. In this case, the promotion will be activated twice if the basket has a total of 200 TRY or more from the collection, and the customer is a member of the VIP group. There are 6 types of benefits available in promotions:

* **Percent Discount**: The products applied to the promotion will be discounted by the percentage specified in the benefit. For example, if the benefit is set to 20%, the products will be discounted by 20% according to the price type.
* **Fixed Amount Discount**: The fixed amount specified in the benefit will be deducted from the basket total amount and split among the products applied to the promotion. For example, if the benefit is set to 20 TRY, and the basket total amount is 100 TRY, the order total amount will be 80 TRY, and 20 TRY will be split among the products applied to the promotion.
* **Free Shipping**: The products applied to the promotion will be shipped free of charge.
* **Product Based Discount**: The products applied to the promotion will be discounted according to Product Based Discount settings. There are 5 different types of Product Based Discount settings available:
* **Coupon**: A new coupon will be created according to the settings specified in the benefit after order is completed. The coupon will be available for the customer to use in the next orders.
* **Discount Code**: A new discount code will be created according to the settings specified in the benefit after order is completed. The discount code will be available for the customer to use in the next orders.
* **Gift**: The benefit allows the customer to choose a gift from the gifts specified in the benefit. The customer can choose a gift from the gifts specified in the benefit during the checkout process. The gift will be added to the order automatically after the customer chooses a gift.

#### <mark style="color:red;">Percent Discount</mark> <a href="#ni01hsjhqfqu" id="ni01hsjhqfqu"></a>

Percent Discount is the most commonly used benefit type. The products applied to the promotion will be discounted by the percentage specified in the benefit. For example, if the benefit is set to 20%, the products will be discounted by 20% according to the price type. Price Type: Unit, Discount or Retail price options are available. When the Price Type is set to “Unit”, the products are consumed by default sale price. When the Price Type is set to “Discount”, the products are consumed by discount price. When the Price Type is set to “Retail”, the products are consumed by retail price.

For example, Product A:

* Unit Price: 100 TRY
* Retail Price: 120 TRY
* Discount Price: 80 TRY
* Percent Discount: 20%

if Price Type is Unit, the discount will be 20 TRY. if Price Type is Discount, the discount will be 16 TRY. if Price Type is Retail, the discount will be 24 TRY.

Percent Discount consumes the products in the collection. Because the benefit discounts all products which are matched with the benefit collection.

**Parameters**:

* **Collection**: The products applied to the promotion will be discounted by the percentage specified in the benefit. Collection can be null. If the collection is null, All products will benefit from the discount.
* **Price Type**: Unit, Discount or Retail price options are available. When the Price Type is set to “Unit”, the discount is calculated by default sale price. When the Price Type is set to “Discount”, the discount is calculated by discount price. When the Price Type is set to “Retail”, the discount is calculated by retail price.
* **Percentage**: The products applied to the promotion will be discounted by the percentage specified in the benefit. For example, if the benefit is set to 20%, the products will be discounted by 20% according to the price type.

#### <mark style="color:red;">Fixed Amount Discount</mark> <a href="#q0s3l74o1q4z" id="q0s3l74o1q4z"></a>

Fixed Amount Discount is the second most commonly used benefit type. The fixed amount specified in the benefit will be deducted from the basket total amount and split among the products applied to the promotion. For example, if the benefit is set to 20 TRY, and the basket total amount is 100 TRY, the order total amount will be 80 TRY, and 20 TRY will be split among the products applied to the promotion.

**Parameters**:

* **Collection**: The products applied to the promotion will be discounted by the fixed amount specified in the benefit. Collection can be null. If the collection is null, All products will benefit from the discount.
* **Amount**: The fixed amount specified in the benefit will be deducted from the basket total amount and split among the products applied to the promotion. For example, if the benefit is set to 20 TRY, and the basket total amount is 100 TRY, the order total amount will be 80 TRY, and 20 TRY will be split among the products applied to the promotion.

#### <mark style="color:red;">Free Shipping</mark> <a href="#rqkw00frynuh" id="rqkw00frynuh"></a>

Free Shipping is the third most commonly used benefit type. The products applied to the promotion will be shipped free of charge if Shipping Option's calculator is based on "DiscountBasedCalculator".

**Parameters**:

* **Collection**: The products applied to the promotion will be shipped free of charge. Collection can be null. If the collection is null, All products will benefit from the discount.

#### <mark style="color:red;">Product Based Discount</mark> <a href="#fz5zs1da2o69" id="fz5zs1da2o69"></a>

The Product Based Discount is a complex benefit type that offers five different ways to apply discounts on specific products:

* **Product Based Percent Discount**: Applies a percentage discount on selected products, with the option to limit the number of discounted products and sort them by price. This benefit type is useful for promotions like "Buy 3 get 1 free" or "Buy 2 get 1 50% off".
* **Product Based Amount Discount**: Deducts a fixed amount per each eligible product in the basket, making it ideal for promotions like "20 TRY off each product".
* **Product Based Fixed Total Amount Discount**: Discounts the selected products so that their combined price equals a predetermined target amount. This benefit type can be used for promotions like "Buy Any 3 Products and pay only 100 TRY".
* **Product Based Fixed Price**: Sets a fixed price for each eligible product in the promotion, making it suitable for offers like "Buy Any 2 Products and pay only 20 TRY for each product".
* **Product Based Price By Percentage**: Sells the eligible products at a specified percentage of their original price, ideal for promotions that offer products at a fraction of their original cost.

Each sub-type has customizable parameters, including Collection, Price Type, Price Sort Type, and Quantity, allowing for the creation of targeted promotions.

#### <mark style="color:red;">Product Based Discount</mark> <a href="#id-77i8ckfemiqb" id="id-77i8ckfemiqb"></a>

Product Based Discount is the most complex benefit type. The products applied to the promotion will be discounted according to Product Based Discount settings. There are 5 different sub types of Product Based Discount settings available:

* **Product Based Percent Discount**: The products applied to the promotion will be discounted by the percentage specified in the benefit. For example, if the benefit is set to 20%, the products will be discounted by 20% according to the price type.
* **Product Based Amount Discount**: The fixed amount specified in the benefit will be deducted from the basket total amount and split among the products applied to the promotion. For example, if the benefit is set to 20 TRY, and the basket total amount is 100 TRY, the order total amount will be 80 TRY, and 20 TRY will be split among the products applied to the promotion.
* **Product Based Fixed Total Amount Discount**: The products applied to the promotion will be discounted by the total amount specified in the benefit. For example, if the benefit is set to 20 TRY, and the basket total amount is 100 TRY, the order total amount will be 80 TRY, and 20 TRY will be split among the products applied to the promotion.
* **Product Based Fixed Price**: The products applied to the promotion will be sold at the fixed price specified in the benefit. For example, if the benefit is set to 20 TRY, the products will be sold at 20 TRY. There will be enough discount to match the price.
* **Product Based Price By Percentage**: The products applied to the promotion will be sold at the percentage specified in the benefit. For example, if the benefit is set to 20%, the products will be sold at 20% of the sale price. There will be enough discount to match the price.

**Parameters**:

* **Product Based Discount Type**: Product Based Percent Discount, Product Based Amount Discount, Product Based Fixed Total Amount Discount, Product Based Fixed Price, Product Based Price By Percentage Other parameters are based on the sub-type of Product Based Discount.

#### <mark style="color:red;">Product Based Percent Discount</mark> <a href="#ovu4obtst500" id="ovu4obtst500"></a>

"Product Based Percent Discount" is the most commonly used sub-type of Product Based Discount. The products applied to the promotion will be discounted by the percentage specified in the benefit. The biggest difference between Product Based Percent Discount and Percent Discount is that Product Based Percent Discount is that "Product Based Percent Discount" has the ability to limit the number of products which will be discounted and sort products by "price sort type". This ability is very useful when you want to make a discount for the first X products in the collection. For example, if the benefit is set to 20%, and the limit is set to 3, the first 3 products in the collection will be discounted by 20% according to the price type. This benefit allows you to create a promotion like "Buy 3 get 1 free" or "Buy 2 get 1 50% off".

**Parameters**:

* **Collection**: The products applied to the promotion will be discounted by the percentage specified in the benefit. Collection can be null. If the collection is null, All products will benefit from the discount.
* **Price Type**: Unit, Discount or Retail price options are available. When the Price Type is set to “Unit”, the discount is calculated by default sale price. When the Price Type is set to “Discount”, the discount is calculated by discount price. When the Price Type is set to “Retail”, the discount is calculated by retail price.
* **Percentage**: The products applied to the promotion will be discounted by the percentage specified in the benefit. For example, if the benefit is set to 20%, the products will be discounted by 20% according to the price type.
* **Price Sort Type**: The products applied to the promotion will be sorted by the price type specified in the benefit. Price Sort Type can be null. If the Price Sort Type is null, the products will be sorted by the default sort type.
* **Quantity**: The products applied to the promotion will be discounted by the percentage specified in the benefit. The default value is 1. When it is 0 or None, Quantity will be set to 1.

#### <mark style="color:red;">Product Based Amount Discount</mark> <a href="#id-3v9btgs6m2xt" id="id-3v9btgs6m2xt"></a>

"Product Based Amount Discount" makes a discount by fixed amount per product. The fixed amount specified in the benefit will be deducted from the basket total amount and split among the products applied to the promotion. For example, if the benefit is set to 20 TRY, and match 5 products, each product will be discounted by 20 TRY and the discount will be 100 TRY. This benefit allows you to create a promotion like "20 TRY discount for each product".

**Parameters**:

* **Collection**: The products applied to the promotion will be discounted by the percentage specified in the benefit. Collection can be null. If the collection is null, All products will benefit from the discount.
* **Price Sort Type**: The products applied to the promotion will be sorted by the price type specified in the benefit. Price Sort Type can be null. If the Price Sort Type is null, the products will be sorted by the default sort type.
* **Quantity**: Limit the number of products which will be discounted. The default value is 1. When it is 0 or None, Quantity will be set to 1.
* **Amount**: The fixed amount specified in the benefit will be deducted per product.

#### <mark style="color:red;">Product Based Fixed Total Amount Discount</mark> <a href="#kwnl4y4rammb" id="kwnl4y4rammb"></a>

"Product Based Fixed Total Amount Discount" makes a discount to match the total amount specified in the benefit. The products applied to the promotion will be discounted by the total amount specified in the benefit.

This benefit allows you to create a promotion like "Buy Any 3 Products and pay only 100 TRY".

For example, Product A, Product B and Product C match the benefit. The total amount of the products is 180 TRY. The benefit target total amount is 100 TRY. The discount will be 180 - 100 = 80 TRY. The discount will be split among the products.

**Parameters**:

* **Collection**: The products applied to the promotion will be discounted by the percentage specified in the benefit. Collection can be null. If the collection is null, All products will benefit from the discount.
* **Price Sort Type**: The products applied to the promotion will be sorted by the price type specified in the benefit. Price Sort Type can be null. If the Price Sort Type is null, the products will be sorted by the default sort type.
* **Quantity**: Limit the number of products which will be discounted. When it is 0 or None, Quantity will be set to 1. Quantity is used to calculate the total amount of the products. It is so important to set the Quantity correctly.
* **Total Amount**: The target total amount which will be matched by the discount.
* **Price Type**: Unit, Discount or Retail price options are available. When the Price Type is set to “Unit”, the discount is calculated by default sale price. When the Price Type is set to “Discount”, the discount is calculated by discount price. When the Price Type is set to “Retail”, the discount is calculated by retail price.

#### <mark style="color:red;">Product Based Fixed Price</mark> <a href="#jwpb2frxnv67" id="jwpb2frxnv67"></a>

"Product Based Fixed Price" makes a discount to match the fixed price per product specified in the benefit. The products applied to the promotion will be sold at the fixed price specified in the benefit. For example, if the benefit is set to 20 TRY, the products will be sold at 20 TRY. There will be enough discount to match the price. This benefit allows you to create a promotion like "Buy Any 2 Products and pay only 20 TRY for each product".

**Parameters**:

* **Collection**: The products applied to the promotion will be discounted by the percentage specified in the benefit. Collection can be null. If the collection is null, All products will benefit from the discount.
* **Price Sort Type**: The products applied to the promotion will be sorted by the price type specified in the benefit. Price Sort Type can be null. If the Price Sort Type is null, the products will be sorted by the default sort type.
* **Quantity**: Limit the number of products which will be discounted. When it is 0 or None, Quantity will be set to unlimited.
* **Price**: The target price which will be matched by the discount.
* **Price Type**: Unit, Discount or Retail price options are available. When the Price Type is set to “Unit”, the discount is calculated by default sale price. When the Price Type is set to “Discount”, the discount is calculated by discount price. When the Price Type is set to “Retail”, the discount is calculated by retail price.

#### <mark style="color:red;">Product Based Price By Percentage</mark> <a href="#kkrfn8qu4h9r" id="kkrfn8qu4h9r"></a>

"Product Based Price By Percentage" makes a discount to match the price per product specified in the benefit. The products applied to the promotion will be sold at the percentage specified in the benefit. For example, if the benefit is set to 20%, the products will be sold at 20% of the price type. There will be enough discount to match the price.

Another popular usage of a combination of multiple benefits is to create a promotion like "Buy any t-shirt and get 10% discount. Buy any jeans and get a 20% discount. Buy 3 items and get the cheapest item total 30% off".

First, create a promotion with "Product Based Percentage Discount" benefit. Set the percentage to 10% and the quantity to 1. The Collection will be set to "T-Shirt". Priority will be higher than the second benefit. Second, create a promotion with "Product Based Percentage Discount" benefit. Set the percentage to 20% and the quantity to 1. This benefit will be applied to the products which match the promotion. Priority will be higher than the third benefit. Third, create a promotion with "Product Based Price By Percentage" benefit. Set the percentage to (100 - 30) = 70% and the quantity to 1. Price Sort Type will be set to "Cheapest". **Percentage Price Type** will be set to "Unit" and **Price Type** will be set to "Discount". The Collection will be set to "Jeans". Priority must be lower than the first benefit and second promotion. Because the first and second promotion must be applied first. Then the third promotion will be applied to make the remaining discount to match the price. When the cheapest product is a t-shirt, the third promotion will give a 20% discount to match the price. When the cheapest product is a jean, the third promotion will give a 10% discount to match the price.

Discount is calculated by the following formula per product:

```
Target Price = (100 - Percentage) * Percentage Price Type / 100

Discount = max(0, Price Type - Target Price)
```

**Parameters**:

* **Collection**: The products applied to the promotion will be discounted by the percentage specified in the benefit. Collection can be null. If the collection is null, All products will benefit from the discount.
* **Price Sort Type**: The products applied to the promotion will be sorted by the price type specified in the benefit. Price Sort Type can be null. If the Price Sort Type is null, the products will be sorted by the default sort type.
* **Quantity**: Limit the number of products which will be discounted. When it is 0 or None, Quantity will be set to unlimited.
* **Percentage**: The target percentage which will be matched by the discount. For example, if the benefit is set to 20%, the products will be sold at 20% of the price type. Discount will be 80% of the price type.
* **Percentage Type**: Unit, Discount or Retail price options are available. Target price will be calculated by the percentage of the price type specified in the benefit.
* **Price Type**: Unit, Discount or Retail price options are available. This price type will be subtracted by the target price to calculate the discount.

### <mark style="color:red;">Share Benefit on Conditions</mark> <a href="#share-benefit-on-conditions" id="share-benefit-on-conditions"></a>

**Share Benefit on Conditions** (`share_benefit_on_conditions`, surfaced in the Campaign Action tab as **"Distributing to Products that Meet the Terms of Discount"**) is a setting of the multibuy benefit — the benefit behind *Cheapest Item Free* / *Buy X, Pay for Y* campaigns. It controls **how the discount is distributed across the items that took part in the campaign**, and its default value is **enabled (`True`)**.

* **Enabled (`True`, default)**: the discount is **attributed across every item that satisfied the condition**, not only the "free" ones. In a *Buy 3, Pay for 2* campaign, all of the participating items are recorded as benefiting from the campaign, so the discount is distributed across them and can be refunded proportionally per item.
* **Disabled (`False`)**: the discount is attributed **only to the benefit items** (the items that were made free). In a *Buy 3, Pay for 2* campaign the free item absorbs the whole discount and is recorded at **0 TRY**, so when it is returned there is nothing left to refund on that line.

{% hint style="warning" %}
Disabling this setting is the usual cause of "the item refunds as **0 TRY**" reports on *Cheapest Item Free* / *Buy X, Pay for Y* campaigns. When the discount is attributed to a single line instead of being distributed across the participating items, that line has nothing left to refund. Unless there is a specific reason to concentrate the discount, keep **Share Benefit on Conditions enabled** so the amount is distributed evenly across the participating items.
{% endhint %}

## <mark style="color:red;">Troubleshooting: Unexpected Discount Amount</mark> <a href="#troubleshooting-unexpected-discount-amount" id="troubleshooting-unexpected-discount-amount"></a>

When a basket or order shows a discount that is larger, smaller, or distributed differently than expected, the cause is almost always in **how the campaigns were configured**, not in the products. Work through the checks below in order:

1. **List every eligible campaign and its priority.** More than one campaign may match the same basket. Sort them by **Priority (Importance)** — the higher value is evaluated first — and confirm the order matches the intended one. See [Campaign Priority (Importance)](#campaign-priority-importance).
2. **Check whether the campaigns were meant to stack.** If two campaigns applied together and they should not have, verify the **Can be combined with other campaigns** checkbox on **all** of the overlapping campaigns, not just one. A single combinable campaign is enough to allow stacking. See [Combining Campaigns](#combining-campaigns).
3. **Check the Application Type / Consume Type.** Remember that *"Campaign products cannot be included in other campaigns"* only removes the items from the shared pool; it does **not** prevent a second campaign from applying on other items. If exclusivity on the same items is required, use a [Consume Group](/technical-guides/commerce/consume-group-in-campaigns.md).
4. **Confirm the Consume Group setting.** If campaigns share a Condition Application Group but still run in parallel, verify that the `BASKET_OFFER_IS_CONSUME_GROUP_ENABLED` dynamic setting is set to **Yes** (enabled) — its default is off, and without it group assignments are ignored.
5. **For&#x20;*****Cheapest Item Free*****&#x20;/&#x20;*****Buy X, Pay for Y*****&#x20;campaigns, check Share Benefit on Conditions.** If a campaign item is priced at 0 TRY or refunds as 0 TRY, confirm that [Share Benefit on Conditions](#share-benefit-on-conditions) is enabled so the discount is distributed across all participating items.
6. **Re-check the condition and benefit collections and price types.** A discount that is off by a fixed ratio is often a **Price Type** mismatch (Unit vs Discount vs Retail) between the condition and the benefit.

If, after these checks, the amount still cannot be explained by configuration, capture the basket contents, the list of applied campaigns with their priorities, and the resulting discount, and raise the issue with Akinon.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.akinon.com/technical-guides/commerce/promotions.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
