Skip to main content

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".

PredicateMatch Logic
trafficSourceORGANIC, PAID, SOCIAL, EMAIL, REFERRAL, DIRECT, PARTNER
utmSourceExact match (case-insensitive)
utmMediumExact match
utmCampaignExact match
partnerIdExact match
loyaltyTierMinTier >= this value
loyaltyTierMaxTier <= this value

Rule Effects

EffectDescription
channelIdOverride the pricing channel
additionalMultiplierMultiplier on base price (0.90 = 10% off)
disablePromotionsHide all promotions
disableCouponsHide all coupons
disableBankOffersHide all bank offers
allowedPromotionIdsWhitelist specific promotions
allowedBankOfferIdsWhitelist specific bank offers
allowedCouponIdsWhitelist specific coupons
additionalOfferIdsInject extra offers