Catalogue
/api/integration/catalogue — domain: Catalogue
Pushes the product master into Commerce. This is what makes anything appear in search, in browse or on a product page.
PUT /products
Purpose. Upsert products by SKU. Everything a shopper sees about a product — its description, variant attributes, marketing copy, dimensions and tax grouping — arrives here.
Domain. Catalogue, which owns products, brands and categories, and which feeds the search index from them.
Request
IntegrationEnvelope<ProductUpsertDto>.
{
"source": "BC",
"timestamp": "2026-08-19T04:00:00Z",
"data": [
{
"sku": "SHIRT-BLK-M",
"masterProductNo": "SHIRT",
"name": "Classic Shirt",
"description": "Classic Shirt Black M",
"blocked": false,
"unitOfMeasure": "EA",
"unitPrice": 24.50,
"weight": 0.32,
"length": 30,
"width": 22,
"height": 4,
"category": "SHIRTS",
"size": "M",
"color": "Black",
"stratificationCode": "A",
"isDefaultColor": true,
"subBrand": "Acme Pro",
"gender": "Mens",
"brandCode": "ACME",
"styleDescription": "Tailored cotton shirt with a straight hem.",
"fabricComposition": "100% cotton",
"styleFeatures": "Chest pocket. Reinforced cuffs.",
"complianceIcons": "AS-NZS-4399",
"sizeFit": "Regular",
"modelSize": "M",
"modelHeight": "185cm",
"careInstructions": "Machine wash cold. Do not tumble dry.",
"ean": "9312345678907",
"sleeveLength": "Short",
"fabricType": "Cotton",
"taxGroupCode": "GST",
"gstProductPostingGroup": "STD",
"itemDiscountGroup": "APPAREL"
}
]
}
| Field | Type | Required | Description |
|---|---|---|---|
sku |
string(20) | Yes | The natural key. Identifies one buyable variant — a single size in a single colour |
masterProductNo |
string(20) | Groups every size and colour variant under one product. Drives the product page | |
name |
string(100) | Short display name | |
description |
string(100) | Longer display description, typically including the variant | |
blocked |
bool | true hides the product from every customer-facing query — search, browse and lookup |
|
unitOfMeasure |
string(10) | The unit a quantity of 1 represents, for example each or pack | |
unitPrice |
decimal | A list price. What a customer actually pays comes from Pricing, not from here | |
weight |
decimal | Unit weight. Used to select a freight rate band | |
length |
decimal | Unit dimension, used for freight | |
width |
decimal | Unit dimension, used for freight | |
height |
decimal | Unit dimension, used for freight | |
category |
string(20) | Category code. Places the product in browse, and is a search facet | |
size |
string(50) | Size label for this variant | |
color |
string(50) | Colour name for this variant. A search facet | |
stratificationCode |
string(10) | Upstream classification code, filterable but not faceted | |
isDefaultColor |
bool | Marks which colourway represents the master product in listings | |
subBrand |
string(200) | Sub-brand label, shown but not used for entitlement | |
gender |
string(50) | A search facet | |
brandCode |
string(20) | Brand code. This is what customer entitlement is checked against | |
styleDescription |
string(1000) | Marketing copy for the product page | |
fabricComposition |
string(500) | Material composition, shown on the product page | |
styleFeatures |
string(1000) | Feature list, shown on the product page | |
complianceIcons |
string(500) | Compliance or standards markings to display | |
sizeFit |
string(50) | Fit guidance, for example regular or slim | |
modelSize |
string(10) | The size worn by the model in photography | |
modelHeight |
string(50) | The height of the model in photography | |
careInstructions |
string(500) | Washing and care text | |
ean |
string(20) | Barcode. Also the lookup key for the Public API | |
sleeveLength |
string(50) | Stored but never indexed — see the warning below | |
fabricType |
string(50) | Stored but never indexed — see the warning below | |
taxGroupCode |
string(50) | Join key into Tax jurisdiction rates | |
gstProductPostingGroup |
string(50) | Join key into Tax GST posting rates | |
itemDiscountGroup |
string(50) | Join key into Pricing, for rules targeting a group of products |
Warning
sleeveLength and fabricType are accepted and stored, but the search index never receives
them — the view feeding the indexer does not project either column. They cannot be searched or
faceted on until that changes. Sending them is harmless; expecting them to be filterable is not.
Response
IntegrationResponse<IntegrationResultItem> — one entry per product, keyed by sku.
{
"data": [
{ "key": "SHIRT-BLK-M", "outcome": "Upserted" }
]
}