- Ordering
Rules-based promotion expressions
Custom rule-based expressions for order promotions provide extensive flexibility to meet diverse business requirements. This implementation of Flexibility over Features enables developers to create customized if-then statements that solve more scenarios than fixed promotion types.
Promotion structure
Core components
Every promotion requires two expressions:
-
EligibleExpression: Evaluates order state- Returns true/false
- Determines promotion applicability
-
ValueExpression: Calculates discount- Returns monetary value
- Subtracts from order subtotal
Available properties
order: Matches Order model fromv1/orders- Includes extended properties (xp)
items: Provides collection functions
Collection functions
Line item operations
items.any(): True if any item matches filteritems.all(): True if all items match filteritems.quantity(): Sum of matching quantitiesitems.count(): Number of matching line itemsitems.total(): Dollar amount comparison
Product categorization
product.incategory(): Direct category assignmentproduct.inparentcategory(): Category or child assignment
Array operations
contains(): Value exists in arraycount(): Matching array itemsany(): Any array item matchesall(): All array items match
Property operations
in(): Value exists in list- Supports comma-delimited lists
Implementation examples
Array operations
javascript
Expression operators
Comparison operators
- Equal:
= - Less than:
< - Greater than:
> - Less/equal:
<= - Greater/equal:
>=
Logical operators
- And:
and - Or:
or - Not:
not
Mathematical operators
- Addition:
+ - Subtraction:
- - Multiplication:
* - Division:
/ - Modulo:
%
Helper functions
Minimum value
javascript
- Returns smaller argument
- Type conversion rules apply
- Integer vs decimal handling
Maximum value
javascript
- Returns larger argument
- Type conversion rules apply
- Integer vs decimal handling
Conditional logic
javascript
- Evaluates multiple conditions
- Returns matching value
- Last parameter is default
Rounding
javascript
- Rounds to specified decimals
- Supports expressions
- Precise control
Promotion limits
Line item promotions
Requires LineItemLevel: true
Item limit
ItemLimitPerOrder: Maximum items- Applies discount per item
- Excludes quantity limit
Quantity limit
QuantityLimitPerOrder: Maximum quantity- Applies discount per unit
- Excludes item limit
Sort order
ItemSortBy: Property-based sorting- Supports descending with
! - Includes extended properties
- Default:
DateAddedascending
Example configuration
30% off least expensive 3 items over $50:
json
Common scenarios
Order-level discounts
javascript
Product-specific discounts
javascript
Category discounts
javascript
Quantity-based discounts
javascript
BOGO (scales with quantity)
javascript
User-based discounts
javascript
Advanced scenarios
javascript
Implementation notes
Limitations
- Expression length: 400 characters
- Optimize for efficiency
- Evaluated at application and submit
Requirements
- Order history requires Premium Search
- Proper promotion assignments
- User access via
GET v1/me/promotions
Related reading
If you have suggestions for improving this article, let us know!