Dynamic Pricing
Dynamic pricing rules adjust prices and filter offers based on the visitor's traffic context. Configure different experiences for partners, marketing campaigns, and loyalty tiers.
How It Works
Visitor arrives (partner_id=VISA)
│
PricingContextService.resolve(trafficContext)
│ Iterates rules by priority (highest first)
│ First matching rule wins
│
├─ Match: "Visa Partnership" rule
│ channelId: null (use default)
│ additionalMultiplier: 0.95 (5% off)
│ disablePromotions: true
│ disableCoupons: true
│ allowedBankOfferIds: [visa-offer-1, visa-offer-2]
│
└─ PricingAdjustment applied to:
├─ OfferResolutionService → filters promotions/bank offers
├─ ContextualOfferService → returns only Visa offers
└─ Listing search → prices reflect Visa multiplier
Rule Predicates
All predicates are optional. null means "match any".
| Predicate | Match Logic |
|---|---|
trafficSource | ORGANIC, PAID, SOCIAL, EMAIL, REFERRAL, DIRECT, PARTNER |
utmSource | Exact match (case-insensitive) |
utmMedium | Exact match |
utmCampaign | Exact match |
partnerId | Exact match |
loyaltyTierMin | Tier >= this value |
loyaltyTierMax | Tier <= this value |
Rule Effects
| Effect | Description |
|---|---|
channelId | Override the pricing channel |
additionalMultiplier | Multiplier on base price (0.90 = 10% off) |
disablePromotions | Hide all promotions |
disableCoupons | Hide all coupons |
disableBankOffers | Hide all bank offers |
allowedPromotionIds | Whitelist specific promotions |
allowedBankOfferIds | Whitelist specific bank offers |
allowedCouponIds | Whitelist specific coupons |
additionalOfferIds | Inject extra offers |