# Promotions and gift cards

<figure><img src="/files/QrlAnyrGvHpvyy6XiJu1" alt=""><figcaption></figcaption></figure>

{% hint style="info" icon="lightbulb" %}
Promotions and gift cards are two separate but complementary discount mechanisms — promotions reduce order amounts based on configurable rules, while gift cards act as a pre-purchased payment source.
{% endhint %}

## Promotions

[Promotions](/core-api-reference/promotions.md) allow you to offer special discounts to customers. Commerce Layer currently supports the following promotion types:

* **Percentage Discount** — adds a percentage discount to the order subtotal (if associated with an SKU list, the discount applies only to SKUs in that list).
* **Free Shipping** — sets the shipping amount to zero.
* **Fixed Amount** — adds a fixed amount discount to the order.
* **Free Gift** — sets to zero the price of SKUs belonging to a specific list.
* **Fixed Price** — imposes a fixed price for SKUs belonging to a specific list.
* **Buy X Pay Y** — offers a discount corresponding to X-Y units of a product for free for any X units of the same product added to the order (associated with an SKU list, and can also be used in *cheapest free* mode).
* **Flex Promotion** — used in conjunction with the [Rules Engine](#rules-engine) to apply discounts based on fully custom order rules.

Promotions can be defined by currency or restricted to a market (in the latter case the currency is inherited from the market's price list). Commerce Layer also lets you integrate any promotional engine not supported by default via [external promotions](/core/external-resources/external-promotions.md). Every promotion is configured with [activation rules](#activation-rules) that must be satisfied before the discount is applied — these can include market, time range, order amount, coupon codes, and more.

Some promotions can be reserved for specific customers — for example, via a VIP or private sales model where only customers belonging to a specific group have access to the promotions in a given market and get the associated price list. Alternatively, you can associate customers with specific tags and trigger different promotions based on those tags.

When multiple promotions are active on the same order at the same time, they are applied in a default sequence [based on promotion type](/core-api-reference/promotions.md#priority-and-order-of-application). You can change that order by specifying a custom *priority*. Promotions can also be marked as *exclusive* so that, if triggered, no other concurrent promotion is applied.

## Activation rules

Promotions are enabled by default and can be disabled and re-enabled at any time.

[Activation rules](/core-api-reference/promotion_rules.md) are the conditions that must be satisfied before an enabled promotion is triggered. If no activation rule is associated with an active promotion, the discount is applied to all orders in scope. Available rules include:

* **Time range of validity** — the activation and expiration time of the promotion.
* **Currency / Market** — the currency of the promotion (inherited from the price list of the associated market, if defined).
* **Total usage limit** — the total number of times the promotion can be applied.
* **Order amount** — the minimum order total required for the promotion to activate.
* **SKU list** — the SKUs an order must contain for the promotion to activate.
* **Coupon** — coupon codes that must be applied for the promotion to activate.
* **Custom filters** — based on specific conditions that the order or its associated resources must meet.

You can update the rules for any promotion at any time. For the SKU list rule, you can choose whether the promotion activates if the order contains *any* SKUs in the list or *all* of them. For an SKU list rule to apply to bundles, the two resources must share the same SKU list — in that case there is no partial SKU matching.

{% hint style="info" %}
Promotions based on coupons are **unlimited**. Other promotion types are subject to a limit of **10 active promotions per organization** (this may vary depending on your plan). If more than 10 are active at the same time, only the 10 with the highest priority are applied.
{% endhint %}

## Rules engine

The [Rules Engine](https://docs.commercelayer.io/rules-engine/) is available for enterprise customers. It enables you to define almost any kind of promotional rule — from the simplest to the most complex — using a DSL with conditions and actions.

To use the Rules Engine with promotions, you create a [flex promotion](/core-api-reference/flex_promotions.md) and define the order rules at your leisure. Supported [action types](/rules-engine/actions/types.md) include:

* **Percentage** — applies a percentage discount to the amount of the selected field.
* **Fixed amount** — applies a fixed discount to the unit amount of the selected field.
* **Fixed price** — overwrites the unit amount of the selected field with the specified value.
* **Free gift** — applies a 100% discount to line items added to the cart as free gifts.
* **Buy X pay Y** — if the quantity of the selected items is a multiple of X, only the same multiple of Y units are considered for the total price computation.
* **Every X discount Y** — applies a fixed amount discount of value Y for each interval defined by the value X on the amount of a specific field.

The discount is automatically applied to any order that satisfies the given conditions. You can also [validate a flex promotion](/rules-engine/check-and-validation.md) against a specific order to preview how the rules would apply before going live.

## Gift cards

[Gift cards](/core-api-reference/gift_cards.md) are a unique type of payment method. Customers can purchase gift cards and use them to pay for an order. All gift cards must be activated before use. There are two types:

* **Rechargeable** — card balance can be used and reloaded at any time.
* **Non-rechargeable** — card balance cannot be reloaded.

Both types can also be:

* **Single-use** — card balance can only be used once.
* **Multi-use** — card balance can be used multiple times until no balance remains.

The availability or usage of gift cards can be restricted by associating them with one or more markets. The market's currency must match the card's currency.

## Gift card recipients

[Gift card recipients](/core-api-reference/gift_card_recipients.md) allow you to associate a recipient with a purchased gift card. When a customer purchases a gift card, they may want to send it to someone — you can integrate an email or transaction service to send the gift card digitally, or physically print and ship it. When a gift card is redeemed, the recipient is associated with the customer that placed the order.


---

# Agent Instructions: 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:

```
GET https://docs.commercelayer.io/data-model/promo-and-loyalty/promotions-and-gift-cards.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
