Table of Contents

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" }
  ]
}