Skip to main content

Create a Discount Campaign

How It Works​

Discounts are evaluated in real time when a transaction arrives at the Streaming API:

  1. The engine fetches all active discounts for the company.
  2. Each discount's conditions (Victory Conditions and Application Conditions) are checked against the cart and customer.
  3. Qualifying discounts are ranked by priority; stackability rules are applied.
  4. The final set of discounts is applied to the cart and the response returns the adjusted prices.

Configuration​

Go to Loyalty and Promotional engine β†’ Discounts β†’ New Discount in the Owner App.

The form is organized into sections:


1. Description​

FieldRequiredDescription
Nameβœ“Discount name. Can be configured in multiple languages when shown in customer-facing experiences.
DescriptionOptional internal note. Informational only; it does not affect discount eligibility, calculation, application, or checkout behavior.
Statusβœ“Active or Inactive
AvailabilityStart and end date for when the discount can fire
Currencyβœ“Defines the campaign's country scope and monetary unit. See Currency scope below.
Categoryβœ“Defines the campaign's application group and priority. Categories with a lower priority number are evaluated first; within the same category, campaigns can compete (highest discount wins) or stack. Also used for reporting and filtering. See Stackability.
Recurrence typeβœ“How often the discount can fire per customer: Daily, Weekly (select days), Monthly (select days 1–31), Monthly – last day, or no recurrence
Recurrence daysConditionalRequired when recurrence = Weekly (days of week) or Monthly (days 1–31)
Coupon requiredWhen enabled, the promotion can only be applied by presenting a coupon code. Reveals the Coupon section below.

Currency scope: the selected currency limits the countries where the campaign can apply. Create separate campaigns for different currencies to keep country scope, budgets, and reporting clear. A campaign configured in EUR should target EUR countries; a GBP campaign should be a separate campaign with its own limits and availability. If the selected currency differs from the company's base currency, a conversion rate between both currencies must exist.


2. Events​

For discounts, the trigger is always Cart β€” the discount is evaluated against the live transaction at checkout.


3. Select Customers​

Controls which customers are eligible for this discount:

OptionBehavior
All customersApplied to all customers, enrolled or not
Loyalty membersApplied only to enrolled loyalty members; optionally filter by Registration Countries, Tiers, or Custom Properties
TargetedDiscount is delivered exclusively via Targeted Delivery campaigns to a specific audience

4. Victory Conditions​

Configure the conditions that must be met for the discount to apply. Conditions are grouped by category:

Cart-level conditions

ConditionWhat it checks
TotalMinimum cart total (after previous discounts)
Original totalMinimum cart total before any discount
Total minus additional costTotal minus configured additional costs (e.g. shipping)
CountryCountry of the store where the purchase occurs
StoreSpecific store(s)
Store CategoryGroup of stores by category
PaymentPayment method used

Line-level conditions

ConditionWhat it checks
Item ProductSpecific products in the cart (by product ID or product code)
Item Product CategoryProduct categories present in the cart
Product IDRaw list of product IDs or codes (comma-separated)
Item AttributesCustom line-item attributes on cart lines

Customer-level conditions (available in Loyalty Members mode)

ConditionWhat it checks
TierCustomer's current loyalty tier
Customer Registration CountriesCountry used when the customer enrolled
Client AttributesCustom customer profile attributes
Calculated AttributesAuto-derived customer KPIs (e.g. average cart, purchase frequency)
Customer IDSpecific customer IDs

All conditions within a group can be combined with AND or OR logic.


5. Application Conditions​

Optional secondary conditions that restrict where the effect is applied within the cart. Victory Conditions decide whether the discount can apply; Application Conditions decide which lines or cart components receive the discount.

Cart event β€” available application conditions:

ConditionPurpose
Item ProductApply the discount only to specific products selected from the catalog
Item Product CategoryApply the discount only to products in specific categories
Product ID / CodeApply the discount to products by raw product ID or code list
Item AttributesApply the discount only to lines matching custom attributes
Additional costApply the discount to a specific cart additional cost, such as shipping or service fees, when configured

Discount Application Conditions are intentionally line/additional-cost scoped. They are used to answer: "where does the discount land after the campaign has qualified?"

Use this when the trigger and the benefit are different:

Business caseVictory ConditionsApplication Conditions
Cart threshold discount on a categoryCart total β‰₯ €50Apply 20% only to Beverages
Cross-category offerCustomer buys Product AApply discount to Product B
Bundle / BOGOCustomer buys the required groupApply benefit to the item(s) selected by the bundle

These filters belong in Victory Conditions, not Application Conditions:

FilterWhy
Customer, tier, registration country, calculated attributesThey decide whether the customer is eligible
Country, store, store categoryThey decide whether the cart context qualifies
Cart total, original total, total minus additional costThey decide whether the cart amount qualifies
Payment methodIt decides whether the payment context qualifies

For cart percentage and ratio effects, Application Conditions are usually required so the engine knows which lines provide the calculation base.

For integration-level detail on rule_application, see Discounts β€” Application.


6. Promotion Effects​

Select the effect type and configure its value. One effect is configured per discount campaign.

The create page gives the operator-level explanation. The most complete technical reference for field names, JSON shape, distributions, effect limits, and integration troubleshooting is Reading from GET β€” Effects.

EffectWhat it doesExampleKey constraints
PercentageReduces the eligible amount by a percentage.20% off Beverages for loyalty members.Supports Distribution, Limit of effects, and Bundle/Group.
Direct ValueSubtracts a fixed monetary amount from the eligible amount.€5 off when cart total is at least €50.Supports Distribution and Limit of effects; can be used with Bundle/Group for grouped fixed discounts.
RatioGrants a spend-scaled monetary effect for each configured monetary unit.€1 benefit for every €10 spent on eligible items.Supports Distribution and Limit of effects; useful for proportional benefits.
Combo PriceSets a fixed final price for a qualifying group of items.Product A + Product B for €10; 3 items from a category for €9.99.Cart-only. Use total or individual_items_pro_rata distribution. Usually works with Bundle/Group and is always Highest Discount.
StrikethroughReplaces the line price with a promotional price from a product-to-price map.Product sent at €3.00, promotional price €1.00 β†’ €2.00 discount and line treated as €1.00.Cart-only. Applies line by line, uses individual_items, and is always Highest Discount.
FormulaUses a pre-calculated promotional price sent by an external pricing engine.External system sends promoPrice; Loyal Guru calculates cart line total minus promoPrice.Cart-only. Requires the agreed line attribute, uses individual_items, and does not use Bundle/Group.

Distribution determines how the effect is spread across matching lines:

DistributionBehavior
totalApplies the effect once to the total qualifying amount or group.
individual_itemsApplies the effect per qualifying unit or line.
individual_items_pro_rataCalculates the total benefit and splits it proportionally across qualifying lines.

Limit of effects caps how many times the effect applies per transaction. With simple line effects, it usually caps units. With Bundle/Group mechanics, each complete group counts as one application.

Bundle / Group links the victory conditions (items that trigger the discount) to the application conditions (items that receive the benefit), enabling BOGO, combo, and cross-category group mechanics. For the concept and examples, see Discount Types β€” Bundles.

Effect limits and bundles (API)​

Only for Cart events with percentage, direct_value, or combo_price effects:

OptionDescription
Effect limit (limits)Max effect applications per transaction (0 = unlimited). With bundles, each application is usually one group (e.g. limits: 2 = at most two 2x1 groups).
Bundle / group (rule_group)Forms groups from nested quantity in victory conditions (group size) and applies benefit per nested quantity in application (units per group). Detailed 2x1 / bundle examples: Reading from GET β€” Bundle mechanics.

Effect limits and bundles are not available for Custom Event, Trigger, or Challenge events.


7. Limits​

Dedicated section after Effects. Controls campaign-level frequency and budget caps:

SettingDescription
Chances to accrueMaximum number of times this discount can fire across all customers (campaign-total cap). Soft limit β€” refreshed every ~5 minutes.
Chances to accrue per customerMaximum number of times a single customer can benefit from this discount. Real-time check per transaction.
Campaign budgetMaximum total monetary discount value issued (in the company's default currency). Soft limit β€” refreshed every ~5 minutes.
Maximum discount per transactionCap on the discount amount applied in a single transaction. Applied in real time.

Leave any limit field empty for unlimited. For the full model β€” enforcement order, examples, and the company-wide global cap β€” see Limits.


8. Stackability​

SettingDescription
StackableThis discount can combine with other active discounts
Highest discountOnly the single highest-value discount applies (excludes others at the same level)
PriorityNumeric priority β€” higher value takes precedence in conflicts
info

Stackability is automatically set to Highest Discount when the effect type is Combo Price, Strikethrough, or has Bundle/Group enabled.

For the full model β€” categories, priority, Highest Discount, Stackable, and evaluation order β€” see Stackability.


9. Partners​

Optional. Associate this discount with a specific partner (e.g., a CPG brand co-funding the promotion). Used for partner ROI reporting.


10. Coupon​

Visible only when Coupon required is enabled in the Description section.

Sub-sectionFields
CodesUniversal (one shared code) or per-customer codes
Static codeDefine a specific code string (e.g. SUMMER20). Leave blank for auto-generated codes.
Auto redeemWhen enabled, the coupon is applied automatically without customer action
ActivationWhen the coupon becomes valid β€” from delivery date or from activation date
ExpirationDays after activation or fixed dates
PrintableAllow the coupon to be printed at POS; configure separate print activation/expiration window
External ID / KeyOptional integration identifiers for external system mapping

Creating campaigns via API​

Campaigns created in the Owner App are evaluated automatically when a transaction reaches the Streaming API. You control how discounts are applied per transaction using the apply_discounts flag in POST /carts:

apply_discountsWhat Loyal Guru does
true (default)Evaluates campaigns, calculates the discount, and modifies the cart line values in the response. The POS applies the returned prices directly.
falseEvaluates campaigns and returns which promotions apply, but does not modify cart line values. The POS or e-commerce system applies the discount amounts itself.

For the full API schema and integration guide, see Discounts β€” Integrations.