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.
How Prices Are Created
Omnium offers several ways to create prices, each suited to different scenarios:
| Mechanism | How it works | Best for |
|---|---|---|
| Price API | Send prices directly via PUT /api/prices/AddMany. Prices take effect immediately. | Automated sync from ERP or pricing systems |
| Price Lists | Create 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 API | Include prices in the prices array when creating or updating products. | Product feeds that include pricing |
| Promotions | Define campaign rules. Promotion types that support price generation automatically create prices on matching products. | Campaigns, seasonal sales, category discounts |
| External Price Service | A 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:
- Unit-specific prices take highest priority
- Then store-specific prices
- Then store group prices
- Then customer-specific prices
- 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 Type | Generates prices on products |
|---|---|
| Category / Brand | Yes |
| Product Search | Yes |
| Price List | Yes |
| Multi-Buy | No (depends on cart context) |
| Order Amount | No (depends on cart context) |
| Kit | No (depends on cart context) |
| Shipping | No (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
| Type | Scope | Example |
|---|---|---|
| Category / Brand | Order line | "20% off all Nike products" |
| Multi-Buy | Order line | "Buy 2, get 1 free" or "3 for 499 NOK" |
| Tiered Pricing | Order line | "1 for 199, 2 for 349, 3 for 449" |
| Conditional Pricing | Order line | Custom prices that activate when multi-buy conditions are met |
| Kit / Bundle | Order line | "Complete outfit — 20% off when buying shirt + pants + shoes" |
| Product Search | Order line | "15% off all items tagged 'clearance'" |
| Price List | Order line | Apply prices from a specific price list as a promotion |
| Order Amount | Order | "100 NOK off orders over 1,000 NOK" |
| Shipping | Shipping | "Free shipping on orders over 500 NOK" |
Promotion Conditions and Targeting
Every promotion can be targeted using a combination of conditions:
Who sees it
| Condition | Description |
|---|---|
| Markets | Apply only in specific markets |
| Stores | Apply only in specific stores (or exclude specific stores) |
| Customer groups | Apply only to customers in specific groups |
| Customer club members | Restrict to loyalty program members |
| Order types | Apply only to certain order types (e.g., B2C only) |
What it applies to (product-level promotions)
| Filter | Description |
|---|---|
| Categories | Include or exclude product categories |
| Brands | Include or exclude brands |
| Products / SKUs | Target or exclude specific products |
| Seasons | Include or exclude seasonal collections |
| Properties | Filter by custom product properties (e.g., color, material) |
When it's active
| Condition | Description |
|---|---|
| Active from / to | Date range for the promotion |
| Coupon code | Require a code to activate |
| Minimum order amount | Require a minimum cart value |
| Minimum quantity | Require a minimum number of items |
Coupon Codes
Promotions can optionally require a coupon code. Three types are supported:
| Type | Description |
|---|---|
| Primary coupon | A single code for the promotion (e.g., SUMMER25) |
| Additional coupons | Multiple codes for the same promotion, optionally single-use |
| Personal coupons | Codes 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:
- By type — Order-line promotions first, then shipping, then order-level
- By priority value — Lower numbers are evaluated first (use increments like 100, 200, 300 to leave room for future campaigns)
- By discount value — Higher discounts are preferred when priorities are equal
Stacking rules
| Setting | Effect |
|---|---|
CanBeCombinedWithOtherPromotions | When false, this promotion is mutually exclusive — only the best single promotion applies |
AlwaysApply | Forces the promotion to apply regardless of other stacking rules |
DisallowCombinationWithCouponDiscounts | Prevents combining with any coupon-activated promotion |
CanNotBeCombinedWithTags | Prevents 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
- Sync base prices (RRP) from your ERP via the Price API
- Store managers create price lists in the UI for local adjustments
- Price prioritization ensures the store-specific price wins when available
B2B customer-specific pricing
- Sync customer-specific prices via the Price API with the
customerIdorcustomerGroupfield - Enable separate price storage if you have large price sets
- Customer group promotions give additional discounts on top
Seasonal campaigns
- Create a promotion with date range, category/brand filters, and discount
- Omnium generates promotional prices on matching products
- Customers see the campaign price in search results and product pages
- When the campaign ends, promotional prices are automatically removed
Coupon-only campaigns
- Create a promotion with a coupon code and no date-based price generation
- The promotion only applies when the customer enters the code at checkout
- Useful for influencer codes, loyalty rewards, or targeted offers
Related Documentation
| Topic | Link |
|---|---|
| Price structure and storage | Prices Reference |
| Getting prices into Omnium | Setting Up Prices |
| Which price wins | Price Prioritization |
| Price list management | Price Lists |
| Tax handling | Prices and Tax |
| Lowest price display | Lowest Price |
| Promotion engine details | Promotions |
| Multi-buy promotions | MultiBuy API Reference |
| Kit / bundle promotions | Kit Promotions API Reference |
| Tiered pricing | Tiered Pricing API Reference |
| Conditional pricing | Conditional Pricing API Reference |
| Order amount discounts | Order Amount API Reference |
| Product search promotions | Product Search API Reference |
