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.
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
Response
Query successful
Changes
No recorded changes to this operation across all 1 revision of this API.