Products Endpoint
The products endpoints return your finished, store-ready catalog: resolved titles and descriptions, converted prices, computed stock, images, and attributes — everything your storefront needs to publish a product.
All requests require a bearer token. See Authentication.
List products
Section titled “List products”GET /v1/productsReturns a paginated list of the products in a store’s catalog, ordered by product ID.
Query parameters
Section titled “Query parameters”| Parameter | Type | Default | Description |
|---|---|---|---|
store |
string | default store | Slug of the store to read. Omit to use your default store. |
per_page |
integer | 50 |
Products per page. Clamped to the range 1–200. |
page |
integer | 1 |
Page number to return. |
Example request
Section titled “Example request”curl "https://api.malovex.com/v1/products?store=eu-store&per_page=50" \ -H "Authorization: Bearer mlx_xxx"Example response
Section titled “Example response”{ "data": [ { "id": 1, "sku": "MX-000001", "ean": "4000000000001", "title": "Product 1", "description": "A great product from Supplier 1.", "manufacturer": "Manufacturer 1", "images": [ "https://cdn.malovex.com/media/products/1/a1b2c3.jpg" ], "store": "eu-store", "excluded": false, "exclusion_reason": null, "attributes": [ { "key": "color", "label": "Color", "value": "Black" }, { "key": "weight", "label": "Weight (kg)", "value": "1.2" } ], "prices": [ { "customer_group_id": 1, "customer_group": "Retail", "base_cost": 42.00, "computed_price": 59.99, "currency": "EUR", "applied_rule_id": 7 } ], "stock": 120 } ], "store": "eu-store", "meta": { "current_page": 1, "per_page": 50, "last_page": 4, "total": 173 }}Pagination
Section titled “Pagination”The list is paginated. Read the meta block to page through the full catalog:
| Field | Description |
|---|---|
current_page |
The page this response represents. |
per_page |
Products per page in this response. |
last_page |
The final page number. |
total |
Total products across all pages. |
Request the next page with ?page=2, and so on, until current_page equals last_page.
Retrieve a product
Section titled “Retrieve a product”GET /v1/products/{id}Returns one product’s full payload — the same object shape as an item in the list.
Example request
Section titled “Example request”curl "https://api.malovex.com/v1/products/1?store=eu-store" \ -H "Authorization: Bearer mlx_xxx"Example response
Section titled “Example response”{ "data": { "id": 1, "sku": "MX-000001", "ean": "4000000000001", "title": "Product 1", "description": "A great product from Supplier 1.", "manufacturer": "Manufacturer 1", "images": ["https://cdn.malovex.com/media/products/1/a1b2c3.jpg"], "store": "eu-store", "excluded": false, "exclusion_reason": null, "attributes": [ { "key": "color", "label": "Color", "value": "Black" } ], "prices": [ { "customer_group_id": 1, "customer_group": "Retail", "base_cost": 42.00, "computed_price": 59.99, "currency": "EUR", "applied_rule_id": 7 } ], "stock": 120 }}A request for a product that isn’t in your catalog returns 404.
The product object
Section titled “The product object”Every product payload is resolved for the store you requested — titles and descriptions in the store’s locale, prices in the store’s currency.
| Field | Type | Description |
|---|---|---|
id |
integer | Malovex’s product ID. Stable — use it as your key. |
sku |
string | null | The exported SKU, built from your SKU pattern. |
ean |
string | null | The product’s primary EAN. |
title |
string | null | Title, resolved into the store’s locale. |
description |
string | null | Description, resolved into the store’s locale. |
manufacturer |
string | null | Manufacturer name, or null if none is set. |
images |
array of strings | Ordered list of image URLs (see below). |
store |
string | The slug of the store this payload was resolved for. |
excluded |
boolean | Whether the product is excluded from this store’s export. |
exclusion_reason |
string | null | Why it’s excluded, when excluded is true. |
attributes |
array of objects | Resolved attributes (see below). |
prices |
array of objects | One entry per customer group (see Prices). |
stock |
integer | Sellable quantity for the store (see below). |
Images
Section titled “Images”Image URLs point at Malovex-hosted copies once an image has been mirrored, so your storefront isn’t dependent on the original supplier’s servers. Until an image is mirrored, its original URL is served. Images whose source has gone permanently dead are dropped from the array, so every URL in images is one Malovex expects to be reachable.
Attributes
Section titled “Attributes”Each attribute is an object with three fields:
| Field | Description |
|---|---|
key |
The attribute’s stable key, e.g. color. |
label |
The display label in the store’s locale, including a unit where one applies, e.g. Weight (kg). |
value |
The resolved value. |
Attributes reflect any overrides you’ve made, layered over the values imported from your suppliers.
stock is a single sellable quantity, already accounting for the sell-own-first rule:
- If you hold your own stock for the product,
stockis your own quantity plus the best supplier’s quantity — your stock sells first, and the supplier backfills once yours runs out. - If you hold no own stock,
stockis simply the best supplier’s quantity. - If there are no offers at all,
stockis0.
List stores
Section titled “List stores”GET /v1/storesReturns your active stores so you know which slugs to pass as ?store=. Ordered with the default store first.
Example request
Section titled “Example request”curl https://api.malovex.com/v1/stores \ -H "Authorization: Bearer mlx_xxx"Example response
Section titled “Example response”{ "data": [ { "slug": "eu-store", "name": "EU Store", "locale": "en", "currency": "EUR", "is_default": true }, { "slug": "uk-store", "name": "UK Store", "locale": "en", "currency": "GBP", "is_default": false } ]}| Field | Description |
|---|---|
slug |
Pass this as ?store= on the other endpoints. |
name |
The store’s display name. |
locale |
The store’s content language. |
currency |
The currency prices are returned in. |
is_default |
Whether this is your default store. |