Pricing and Promotions Overview

How pricing works in Omnium — the relationship between price creation, price storage, promotions, and how the right price reaches your customer.

The Big Picture

Understanding pricing in Omnium starts with one key concept: price creation and price storage are separate concerns.

Prices in Omnium are always stored on products (or in a dedicated price index for large catalogs). But prices can be created by many different mechanisms — an API call, a price list, a promotion, or an external system. Once a price is created, it lives on the product like any other price, regardless of where it came from.

This separation means you can mix and match pricing strategies without changing how prices are consumed. Your e-commerce frontend, cart engine, and API integrations all read prices from the same place — the product — no matter how those prices got there.

                        PRICE CREATION
  ┌───────────────────────────────────────────────┐
  │                                               │
  │  Price API    Price Lists    Promotions        │
  │  (ERP sync)   (UI mgmt)     (campaigns)       │
  │     │             │             │              │
  │  Product API  External      Future             │
  │  (in feed)    Price Svc     features           │
  │     │             │             │              │
  └─────┼─────────────┼─────────────┼──────────────┘
        │             │             │
        ▼             ▼             ▼

                     PRICE STORAGE
  ┌───────────────────────────────────────────────┐
  │     Products  (or separate price index)       │
  └───────────────────────────────────────────────┘



                   PRICE CONSUMPTION
  ┌───────────────────────────────────────────────┐
  │  Product pages · Cart / Checkout · API        │
  └───────────────────────────────────────────────┘

How Prices Are Created

Omnium offers several ways to create prices, each suited to different scenarios:

MechanismHow it worksBest for
Price APISend prices directly via PUT /api/prices/AddMany. Prices take effect immediately.Automated sync from ERP or pricing systems
Price ListsCreate a price list in the UI, add products and prices, then activate. Prices are transferred to products on activation.Store managers, controlled overrides, manual management
Product APIInclude prices in the prices array when creating or updating products.Product feeds that include pricing
PromotionsDefine campaign rules. Promotion types that support price generation automatically create prices on matching products.Campaigns, seasonal sales, category discounts
External Price ServiceA connector fetches prices from your own pricing system at query time.Edge cases where prices can't be synced to Omnium

These approaches can be combined freely. For example, you might sync base prices from an ERP via the Price API, use price lists for store-specific overrides, and use promotions for seasonal campaigns — all at the same time. The price prioritization rules determine which price wins when multiple apply.


How Prices Are Stored

All prices end up in one of two places:

  • On the product — The default. Prices are part of the product document and returned with every product query.
  • In a separate price index — For products with very large price sets (150+ prices per product, common in B2B with customer-specific pricing). Prices are stored separately but still returned with product searches.

The storage mechanism is transparent to consumers. Whether a price came from the API, a price list, or a promotion, it looks the same once stored.

For details on price structure, levels, and ID generation, see the Prices reference.


How Prices Are Selected

When a product has multiple valid prices (different markets, stores, customers, date ranges), Omnium uses a prioritization strategy to select the most relevant one:

  1. Unit-specific prices take highest priority
  2. Then store-specific prices
  3. Then store group prices
  4. Then customer-specific prices
  5. Then market-level prices

Within each level, the lowest price wins. For the complete rules and examples, see Price Prioritization.


How Promotions Fit In

Promotions serve a dual purpose in the pricing system:

1. Price generation (pre-cart)

Some promotion types automatically generate prices on products when the promotion is active. These prices appear in product listings and search results, so customers see the promotional price before adding anything to their cart.

Promotion TypeGenerates prices on products
Category / BrandYes
Product SearchYes
Price ListYes
Multi-BuyNo (depends on cart context)
Order AmountNo (depends on cart context)
KitNo (depends on cart context)
ShippingNo (applies to shipping, not products)

When a price-generating promotion is activated, Omnium calculates the promotional price for every matching product and stores it alongside the product's other prices. When the promotion ends or is deactivated, those prices are removed.

2. Cart-time discounts (at checkout)

All promotion types are evaluated when items are in a cart. The promotion engine checks active promotions against the cart contents, customer, market, and store, and applies matching discounts. This is where context-dependent promotions like multi-buy ("3 for 2") and order-amount discounts ("10% off orders over 1,000 NOK") take effect.


Promotion Types at a Glance

TypeScopeExample
Category / BrandOrder line"20% off all Nike products"
Multi-BuyOrder line"Buy 2, get 1 free" or "3 for 499 NOK"
Tiered PricingOrder line"1 for 199, 2 for 349, 3 for 449"
Conditional PricingOrder lineCustom prices that activate when multi-buy conditions are met
Kit / BundleOrder line"Complete outfit — 20% off when buying shirt + pants + shoes"
Product SearchOrder line"15% off all items tagged 'clearance'"
Price ListOrder lineApply prices from a specific price list as a promotion
Order AmountOrder"100 NOK off orders over 1,000 NOK"
ShippingShipping"Free shipping on orders over 500 NOK"

Promotion Conditions and Targeting

Every promotion can be targeted using a combination of conditions:

Who sees it

ConditionDescription
MarketsApply only in specific markets
StoresApply only in specific stores (or exclude specific stores)
Customer groupsApply only to customers in specific groups
Customer club membersRestrict to loyalty program members
Order typesApply only to certain order types (e.g., B2C only)

What it applies to (product-level promotions)

FilterDescription
CategoriesInclude or exclude product categories
BrandsInclude or exclude brands
Products / SKUsTarget or exclude specific products
SeasonsInclude or exclude seasonal collections
PropertiesFilter by custom product properties (e.g., color, material)

When it's active

ConditionDescription
Active from / toDate range for the promotion
Coupon codeRequire a code to activate
Minimum order amountRequire a minimum cart value
Minimum quantityRequire a minimum number of items

Coupon Codes

Promotions can optionally require a coupon code. Three types are supported:

TypeDescription
Primary couponA single code for the promotion (e.g., SUMMER25)
Additional couponsMultiple codes for the same promotion, optionally single-use
Personal couponsCodes assigned to individual customers (via their customer profile or the loyalty program)

When a coupon code is required, the promotion does not generate prices on products — it only applies at cart time when the customer enters the code.


Promotion Priority and Stacking

Priority

Promotions are evaluated in order:

  1. By type — Order-line promotions first, then shipping, then order-level
  2. By priority value — Lower numbers are evaluated first (use increments like 100, 200, 300 to leave room for future campaigns)
  3. By discount value — Higher discounts are preferred when priorities are equal

Stacking rules

SettingEffect
CanBeCombinedWithOtherPromotionsWhen false, this promotion is mutually exclusive — only the best single promotion applies
AlwaysApplyForces the promotion to apply regardless of other stacking rules
DisallowCombinationWithCouponDiscountsPrevents combining with any coupon-activated promotion
CanNotBeCombinedWithTagsPrevents combining with promotions that have specific tags

Test your promotion combinations before major campaigns. Unexpected stacking can lead to larger discounts than intended. Use the priority system and combination rules to control the outcome.


Common Pricing Patterns

Base prices with store overrides

  1. Sync base prices (RRP) from your ERP via the Price API
  2. Store managers create price lists in the UI for local adjustments
  3. Price prioritization ensures the store-specific price wins when available

B2B customer-specific pricing

  1. Sync customer-specific prices via the Price API with the customerId or customerGroup field
  2. Enable separate price storage if you have large price sets
  3. Customer group promotions give additional discounts on top

Seasonal campaigns

  1. Create a promotion with date range, category/brand filters, and discount
  2. Omnium generates promotional prices on matching products
  3. Customers see the campaign price in search results and product pages
  4. When the campaign ends, promotional prices are automatically removed

Coupon-only campaigns

  1. Create a promotion with a coupon code and no date-based price generation
  2. The promotion only applies when the customer enters the code at checkout
  3. Useful for influencer codes, loyalty rewards, or targeted offers

TopicLink
Price structure and storagePrices Reference
Getting prices into OmniumSetting Up Prices
Which price winsPrice Prioritization
Price list managementPrice Lists
Tax handlingPrices and Tax
Lowest price displayLowest Price
Promotion engine detailsPromotions
Multi-buy promotionsMultiBuy API Reference
Kit / bundle promotionsKit Promotions API Reference
Tiered pricingTiered Pricing API Reference
Conditional pricingConditional Pricing API Reference
Order amount discountsOrder Amount API Reference
Product search promotionsProduct Search API Reference