Products | Query

Query products. Returns full product models with explicit control over market, store, and customer context.

Primary endpoint for fetching products: single-product lookups, filtered lists, and paginated UI queries. Pagination is capped at offset (Take * Page) of 10,000 — past that, use POST /api/products/Query/Scroll.

All filter fields are documented on the request schema below.

Default values are omitted

To keep responses small, a field is left out when it holds its default value: false, 0, null, the empty date 0001-01-01T00:00:00, the empty id 00000000-0000-0000-0000-000000000000, or an enum's first value. A missing field means that value, not "unknown". "" and [] are real values and are always returned.

A field marked nullable in the schema has null as its default, so it is left out only when it is null — a nullable boolean holding false, or a nullable number holding 0, is still returned.

For the full reference, the ID-lookup matrix, and response-size guidance, see https://docs.omnium.no/docs/Integrations/product-query.

Examples

1. Single product with market pricing. The simplest case — one product, prices filtered to one market.

{
  "productIds": ["PROD-123"],
  "marketIds": ["NOR"]
}

2. Single product with market pricing and tight payload (recommended). Same as above but only the fields you actually need. Variants come back with just skuId and size — every other variant field is stripped. Cart pickers, barcode reverse-lookups, detail views.

{
  "productIds": ["PROD-123"],
  "marketIds": ["NOR"],
  "fields": { "include": ["productId", "name", "prices", "variants.skuId", "variants.size"] }
}

3. Category list page. Paginated browse with market context and a tight response — the canonical product-list-in-a-UI pattern.

{
  "take": 50,
  "page": 1,
  "marketIds": ["NOR"],
  "productCategoryIds": ["CAT-summer-clothing"],
  "isActive": true,
  "fields": { "include": ["productId", "name", "prices", "mainImageUrl", "variants.skuId"] }
}

4. Raw product lookup — all prices, no context filtering. Use includeAllPrices: true to bypass price-context filtering while keeping product-availability filtering. Useful for price management UIs and audits where you need every price for a product, not just the market/store/customer-relevant ones.

{
  "productIds": ["PROD-123"],
  "marketIds": ["NOR"],
  "includeAllPrices": true
}

5. Price context — scope prices independently of availability. Top-level fields filter which products are returned; priceContext controls which prices come back (and how they sort). Each priceContext field overrides its top-level counterpart for pricing only — anything left out falls back to the top-level value, so the common case needs no priceContext at all. Store groups and additional price stores live here only (they never filter products). Below: products available in SWE, priced for the SWE market and the MiraklSellers store group, club prices included.

{
  "marketIds": ["SWE"],
  "productParentIds": ["354931"],
  "isCustomerClubMember": true,
  "priceContext": { "storeGroupIds": ["MiraklSellers"] }
}

6. Saved search as the base query. Run a saved product search (created in the Omnium UI) and override parts of it per request. The saved search supplies the filters; any field set on the request replaces the saved value for that field. Pagination, sorting (when given) and field selection always come from the request. Price context is never taken from the saved search — pass market/store/customer context explicitly to scope prices, as below.

{
  "savedSearchId": "0e3c9c9b-7b53-4c8e-9f2a-1f5d3f0a1234",
  "take": 50,
  "page": 1,
  "marketIds": ["NOR"],
  "sort": [{ "field": "name", "direction": "asc" }]
}

7. Search group as membership. Run a search group (created in the Omnium UI) as membership ANDed with this request. Extra filters on the request AND with membership; they do not replace member saved-search fields. Mutually exclusive with savedSearchId. An unknown id is rejected with 400.

{
  "searchGroupId": "a1b2c3d4-5e6f-7890-abcd-ef1234567890",
  "take": 50,
  "page": 1,
  "marketIds": ["NOR"],
  "productCategoryIds": ["CAT-summer-clothing"]
}

Image and asset URLs follow the first entry of the top-level marketIds (the availability market): when the tenant has per-market CDN settings, that market's CDN host is used. priceContext never affects asset URLs — it scopes prices only.

post/api/products/Query

Request

  • Base URL: https://api.omnium.no (the document declares no server; this is the origin it was published from)
  • URL: https://api.omnium.no/api/products/Query
  • Auth: API key in header Authorization

Request body

takeinteger nullable

Number of items per page. Default applied when null: 10. Allowed range: 1–1000.

pageinteger nullable

Page number (1-indexed). Default applied when null: 1. Max offset (Take * Page) is 10,000. For larger datasets — bulk exports, system syncs, reindexing — use the scroll endpoint instead.

savedSearchIdstring nullable

ID of a saved product search (created in the Omnium UI) to run as the base query. The saved search supplies the filters — including UI-only filters that have no counterpart on this model — and every field explicitly set on this request then overrides the saved value for that field (replace semantics: lists and values are replaced, never merged, and an explicitly empty value clears the saved filter). Pagination, sorting (when given) and field selection always come from this request. Price context is never taken from the saved search — pass market/store/customer context explicitly to scope prices. An unknown ID, or the ID of a non-product saved search, is rejected with 400. Mutually exclusive with Omnium.Public.Products.Query.OmniumProductQueryRequestBase.SearchGroupId.

searchGroupIdstring nullable

ID of a search group to AND onto this query as membership. Mutually exclusive with Omnium.Public.Products.Query.OmniumProductQueryRequestBase.SavedSearchId. Extra filters on this request AND with membership; they do not replace member saved-search fields. Unknown id → 400.

marketIdsstring[] nullable

Filter products by market IDs (product availability). Also the default market for pricing unless overridden by Omnium.Public.Products.Query.OmniumProductQueryRequestBase.PriceContext. The first market is the primary context for price sorting and language resolution.

marketGroupIdsstring[] nullable

Filter products by market group IDs (product availability); all member markets are included. Also the default market scope for pricing unless overridden by Omnium.Public.Products.Query.OmniumProductQueryRequestBase.PriceContext.

isMarketRequiredboolean nullable

Controls how products without any market are treated. A product with no markets counts as available in every market, so it matches any market filter by default.

  • true: the product must carry one of the requested markets — products with no market are excluded.
  • false: products with no market are returned alongside the market matches.
  • null (default): the tenant configuration decides. Only applies when Omnium.Public.Products.Query.OmniumProductQueryRequestBase.MarketIds or Omnium.Public.Products.Query.OmniumProductQueryRequestBase.MarketGroupIds is set.
storeIdsstring[] nullable

Filter products by store IDs (assortment availability). Also the default store scope for pricing unless overridden by Omnium.Public.Products.Query.OmniumProductQueryRequestBase.PriceContext. The first store is the primary context for price sorting and assortment.

customerIdstring nullable

Customer ID for customer assortment filtering (availability) and customer-specific pricing. The price customer can be overridden independently via Omnium.Public.Products.Query.OmniumProductQueryRequestBase.PriceContext.

customerGroupsstring[] nullable

Customer groups for assortment (availability) and group-specific pricing. The price groups can be overridden independently via Omnium.Public.Products.Query.OmniumProductQueryRequestBase.PriceContext.

priceValidFromstring date-time nullable

Only return prices valid from this date

priceValidTostring date-time nullable

Only return prices valid until this date

includeAllPricesboolean

When true, all prices are returned regardless of price context. Products are still filtered by the top-level availability fields. Use this for data export or price management scenarios. Default: false. Overridable via Omnium.Public.Products.Query.OmniumProductQueryRequestBase.PriceContext.

isCustomerClubMemberboolean nullable

Controls customer club (member) pricing. Club prices are excluded by default.

  • true: treated as a club member — club prices are included and the single 'price' field can be a club price (the lowest applicable price wins).
  • null (default) or false: club prices are excluded and the single 'price' field is the lowest non-club price. Overridable via Omnium.Public.Products.Query.OmniumProductQueryRequestBase.PriceContext. Ignored when Omnium.Public.Products.Query.OmniumProductQueryRequestBase.IncludeAllPrices is true.
searchTextstring nullable

Free text search query. Max 300 characters.

productIdsstring[] nullable

Filter by Product.ProductId (your business product ID). Strict match — does not search SKU or other ID fields. Use Omnium.Public.Products.Query.OmniumProductQueryRequestBase.SkuIds for SKU lookups, Omnium.Public.Products.Query.OmniumProductQueryRequestBase.Ids for internal IDs, or Omnium.Public.Products.Query.OmniumProductQueryRequestBase.AnyIds when the ID type is unknown.

skuIdsstring[] nullable

Filter by SKU. Matches Product.SkuId OR Variants[].SkuId — a SKU is treated as a single logical concept regardless of whether it lives at the product or variant level.

idsstring[] nullable

Filter by Product.Id (the internal Omnium document identifier). Strict match. Most consumers should use Omnium.Public.Products.Query.OmniumProductQueryRequestBase.ProductIds instead.

anyIdsstring[] nullable

Filter by ANY ID type. Matches against Product.ProductId, Product.SkuId, Product.Id, Product.ParentId, or Variants[].SkuId. Use this when you don't know which type of ID you have (e.g. barcode scanning, dirty data imports, customer-provided IDs). Prefer the strict fields (Omnium.Public.Products.Query.OmniumProductQueryRequestBase.ProductIds, Omnium.Public.Products.Query.OmniumProductQueryRequestBase.SkuIds, Omnium.Public.Products.Query.OmniumProductQueryRequestBase.Ids) when the ID type is known — they are more predictable.

productParentIdsstring[] nullable

Filter by parent product IDs

productCategoryIdsstring[] nullable

Filter by product category IDs

excludedProductCategoryIdsstring[] nullable

Product category IDs to exclude from results

excludedProductIdsstring[] nullable

Product IDs to exclude from results

gtinsstring[] nullable

Filter by GTIN codes (searches EAN, GTINS, and Units.EAN on products and variants)

tagsstring[] nullable

Filter by product tags

excludedTagsstring[] nullable

Tags to exclude from results

externalIdsstring[] nullable

Filter by external IDs

supplierIdsstring[] nullable

Filter by supplier IDs

supplierSkuIdsstring[] nullable

Filter by supplier SKU IDs

seoUrisstring[] nullable

Filter by SEO URIs

componentIdsstring[] nullable

Filter by component IDs (returns products containing any of the specified component IDs)

promotionIdsstring[] nullable

Filter by promotion IDs (returns products with active prices matching any of the specified promotion IDs)

assortmentCodeIdsstring[] nullable

Filter by assortment code IDs

ignoreCustomerAssortmentboolean

If true, the customer's assortment codes from the price context will not be applied as a filter

isAssortmentCodesRequiredboolean nullable

When true, the product must have a matching assortment code. When null, uses the tenant configuration default.

productTypestring nullable

Filter by product type

isActiveboolean nullable

True: only active products. False: only inactive products. Null: both.

isSkuboolean nullable

True: only SKU products (without variants). False: only non-SKU products. Null: both.

isBundleboolean nullable

True: only bundle products. False: only non-bundles. Null: both.

isPackageboolean nullable

True: only package products. False: only non-packages. Null: both.

isDeletedboolean nullable

True: only deleted products. False: only non-deleted products. Null (default): both.

isInStockboolean nullable

True: only products in stock. False: only products not in stock. Null: both. Should be combined with InStockWarehouseIds or InStockMarketIds for specific filtering.

isOnSaleboolean nullable

True: only products on sale. False: only products not on sale. Null: both.

isPublishedboolean nullable

True: only products published today. Null: no publication filter.

isMainProductVariantboolean nullable

True: only main product variants. Null: both.

isAvailableOnlineboolean nullable

True: only products available online. False: only products not available online. Null: both.

isLocalProductboolean nullable

True: only local products. False: only non-local products. Null: both. Only relevant when IsLocalProductsEnabled is enabled in product settings.

modifiedFromstring date-time nullable

Filter products modified on or after this date

modifiedTostring date-time nullable

Filter products modified on or before this date

startPublishFromstring date-time nullable

Filter products published on or after this date

startPublishTostring date-time nullable

Filter products published on or before this date

stopPublishFromstring date-time nullable

Filter products with publication end date on or after this date

stopPublishTostring date-time nullable

Filter products with publication end date on or before this date

priceFromnumber nullable

Filter products with price greater than or equal to this value. Uses the first market from MarketIds for price resolution.

priceTonumber nullable

Filter products with price less than or equal to this value. Uses the first market from MarketIds for price resolution.

priceActivatedFromstring date-time nullable

Filter products with prices activated on or after this date

priceActivatedTostring date-time nullable

Filter products with prices activated on or before this date

priceDeactivatedFromstring date-time nullable

Filter products with prices deactivated on or after this date

priceDeactivatedTostring date-time nullable

Filter products with prices deactivated on or before this date

isUnionDeltaQueryboolean nullable

When true, uses OR logic for delta queries: returns products modified OR with price changes. When false (default), uses AND logic.

productLanguagestring nullable

Language code (e.g. "en", "no", "es") for filtering product content

ignoreLanguageFilterboolean nullable

When true, ignores language filtering and searches across all languages. When false/null, uses the specified ProductLanguage. If no language is specified and markets are provided, resolves language from the market.

inStockWarehouseIdsstring[] nullable

Warehouse IDs for the IsInStock filter. If not set, IsInStock matches any warehouse.

inStockMarketIdsstring[] nullable

Market IDs for the IsInStock filter. If not set, IsInStock matches any market.

includeInventoryForSelectedStoresboolean nullable

When true, inventory data for selected stores is included in the response

propertyListIdstring nullable

Property list ID controlling which properties are RETURNED in the response (response shaping, not filtering). Uses predefined named property lists from tenant settings — only properties whose keys are in the named list will be present on the returned products.

Response

Query successful

totalHitsinteger

Total number of items matching the query (not just this page)

Changes

No recorded changes to this operation across all 1 revision of this API.