Order Promotions
Order promotions apply discounts during checkout or draft order creation when specific conditions are met. Unlike catalogue promotions, these discounts don't appear on product pages - they activate based on cart contents.
How Order Promotions Work​
Order promotions evaluate checkout/draft order amount and apply rewards when conditions match. The system:
- Checks all applicable order promotion rules
- Compares potential savings from each qualifying rule
- Applies only the rule providing maximum savings
Order discounts calculate from base prices (prices after catalogue promotions).
Reward Types​
Order promotions support two reward types:
Subtotal Discount​
Reduces the subtotal price by a fixed amount or percentage.
Promotions with SUBTOTAL_DISCOUNT do not work with the TAX_APP strategy.
To Do: VERIFY
Gift Reward​
Adds a free product to the order. You define which variants can be given as gifts, and the system selects the one with the highest discounted price.
Gift details:
- Created as a new line with unit and total price of 0
- Only one gift per checkout/draft order
- Limited to 500 gift variants per promotion rule
- Marked with
isGift: trueon the line
Creating Order Promotion​
In Dashboard To Do:
Defining Order Predicates​
Order predicates define conditions based on checkout/order attributes:
baseSubtotalPrice: Sum of line prices (after catalogue discounts)baseTotalPrice: Subtotal plus shipping
Price-based predicates require all assigned channels to have the same currency.
Examples​
10% off when subtotal exceeds $20:
{
"orderPredicate": {
"discountedObjectPredicate": {
"baseSubtotalPrice": {
"range": { "gte": 20 }
}
}
},
"rewardValueType": "PERCENTAGE",
"rewardValue": 10,
"rewardType": "SUBTOTAL_DISCOUNT"
}
$5 off when total exceeds $50:
{
"orderPredicate": {
"discountedObjectPredicate": {
"baseTotalPrice": {
"range": { "gte": 50 }
}
}
},
"rewardValueType": "FIXED",
"rewardValue": 5,
"rewardType": "SUBTOTAL_DISCOUNT"
}
Gift vs Subtotal Discount Selection​
When both gift and subtotal discount rules qualify, Saleor compares savings:
- For gift rules: Uses the highest-value gift variant's discounted price
- For subtotal rules: Calculates the actual discount amount
- Applies whichever provides greater savings
Order Promotions in Checkout​
When an order promotion applies, the discount appears on:
checkout.discount.amount: The order promotion discount valuecheckout.discountName: The promotion rule name- Line prices: Reduced proportionally
Example Checkout with Order Discount​
{
"checkout": {
"discount": { "amount": 5.0 },
"discountName": "Example order promo: order rule",
"subtotalPrice": { "gross": { "amount": 35.0 } },
"lines": [
{
"undiscountedTotalPrice": { "amount": 40.0 },
"totalPrice": { "gross": { "amount": 35.0 } },
"unitPrice": { "gross": { "amount": 17.5 } },
"undiscountedUnitPrice": { "amount": 20.0 }
}
]
}
}
Completed Order with Order Discount​
{
"order": {
"total": { "gross": { "amount": 42.5 } },
"undiscountedTotal": { "gross": { "amount": 47.5 } },
"discounts": [
{
"name": "Example order promo: order rule",
"type": "ORDER_PROMOTION",
"valueType": "FIXED",
"amount": { "amount": 5.0 }
}
]
}
}
Example Checkout with Gift​
{
"checkout": {
"discount": { "amount": 0.0 },
"lines": [
{
"isGift": false,
"totalPrice": { "gross": { "amount": 40.0 } }
},
{
"isGift": true,
"totalPrice": { "gross": { "amount": 0.0 } },
"undiscountedUnitPrice": { "amount": 50.0 }
}
]
}
}
Combining with Catalogue Promotions​
Order and catalogue promotions can apply together:
- Catalogue promotion reduces the product price
- Order promotion applies to the already-discounted subtotal
The total discount is the sum of both:
{
"checkout": {
"discount": { "amount": 5.0 },
"lines": [
{
"undiscountedTotalPrice": { "amount": 40.0 },
"totalPrice": { "gross": { "amount": 23.0 } },
"variant": {
"pricing": {
"onSale": true,
"discount": { "gross": { "amount": 6.0 } }
}
}
}
]
}
}
In this example: $6 catalogue discount × 2 items + $5 order discount = $17 total savings.
Order Promotions and Vouchers​
Order promotions cannot combine with vouchers. When a voucher code is added:
- The order promotion discount is removed
- Only the voucher discount applies
Limits​
- Maximum 100 promotion rules with
ORDERpredicate type - Maximum 500 gift variants per promotion rule
Business Use Cases​
- Spend thresholds: "Get 10% off orders over $100"
- Free shipping equivalent: "$10 off when you spend $75"
- Gift with purchase: "Free sample when you spend $50"
- Basket builders: Encourage larger orders with tiered discounts
Related​
- Promotions Overview
- Promotions API - Create order promotions via API