Submit master data records
/api/v2/master-dataMaster Data in FuseCreate or update products in your catalogue. Accepts an array of master data records. The whole batch is accepted with a 202, or rejected with a 400 that lists every failing record and field.
Examples
Complete, valid payloads for the scenarios we see most. Pick one to load it into the panel.
Values shown like YOUR_SITE are your own configuration, not literals — substitute the values from your onboarding pack. The sandbox checks shape only, so a payload can pass there and still be rejected by the warehouse.
- SKU ID
product.identifiers.skuId - Business ID
product.identifiers.businessId - NMFC Code
product.identifiers.nmfcCode - Description
product.information.description - Country of origin
product.information.countryOfOrigin - Classification groups
product.classification.groups - Hazardous (empty if not hazardous)
product.quality.hazardCode
Request schema
The body is an array of records in this shape. Pick a scenario above to see a complete, valid payload.
▶productobjectThe product being created or updated. One record per SKU.
▶identifiersobjectHow this product is identified, in your systems and ours.
- skuIdstringmandatorymin length 1Your primary SKU code — the identifier every order line refers back to.
- businessIdstringmandatorymin length 1Your Fuse business ID. Must match the businessId you authenticate with.
- customerIdstringAn end-customer account this product belongs to, where you segment your catalogue per customer.
- nmfcCodestringmandatoryNational Motor Freight Classification code — the freight class used on shipping paperwork and carrier rating. Not validated against a lookup; carried through to shipping documents as-is. Provide it for any product that ships palletised/LTL in North America; use your freight forwarder's classification.
▶informationobjectDescriptive details shown on warehouse screens and paperwork.
- statusstringProduct lifecycle status in your catalogue.
- descriptionstringmandatorymin length 1Short product description — appears on pick screens, labels, and delivery paperwork.
- textstringLonger free-text description, where the short one is not enough.
- categoriesarray of stringFree-form category labels for your own reporting.
- countryOfOriginstringmandatoryISO 3166 country code where the product is manufactured — required for customs on export orders.
- costnumberUnit cost price, used for insurance and customs valuation.
▶classificationobjectHow the product is grouped and packed.
- groupsarray of stringmandatoryClassification groups — free-form reporting buckets, not validated lookups. By convention the first entry is a business/customer-driven grouping and the second a product-type grouping.
- boxUnitstringThe pack level a full box represents (e.g. INNER).
- boxQuantityintegerUnits per full box.
- itemUnitstringThe selling unit of measure — a real warehouse unit code ("EA" is the common each/unit code); descriptive strings like "EACH" are rejected downstream.
▶lifecycleobjectBatch, expiry, serial, and rotation behaviour — how stock of this product is tracked and picked.
- lifeintegerShelf life in days.
- expiryRequiredstring"1" if every receipt must capture an expiry date, otherwise "0" (defaults to "0"). Pair with an expiry-aware rotationMethod or expiry is captured at goods-in and then ignored at pick.
- productionRequiredstring"1" if every receipt must capture a production date, otherwise "0".
- batchRequiredstring"1" if stock is batch-tracked, otherwise "0". One-character flags — not "Y"/"N".
- serialRequiredstring"1" if each unit carries a serial number, otherwise "0".
- countrystringCountry restriction for stock rotation rules, where used.
- rotationMethodstringWarehouse rotation lookup code (max 2 characters) deciding which stock is picked first. Unset defaults to "X1" (lowest slot quantity — no date awareness); batch/expiry-tracked products should set an expiry-aware code such as "F0" (FIFO by expiry) or "F4" (FEFO).
- typestringProduct type lookup code, where your setup uses one.
- classstringProduct class lookup code, where your setup uses one.
- valuestringProduct value band, where your setup uses one.
▶dimensionsobjectPhysical dimensions and weights, for cartonisation and freight quoting.
▶boxobjectDimensions of a full box (outer pack).
- heightnumberBox height in your account's configured unit.
- widthnumberBox width.
- depthnumberBox depth.
- weightnumberBox gross weight.
▶itemobjectDimensions of a single selling unit.
- heightnumberItem height.
- widthnumberItem width.
- depthnumberItem depth.
- weightnumberItem weight.
▶qualityobjectQuality-control and hazard classification.
- stagestringInbound QC stage this product routes through, where used.
- qastringQuality-assurance code, where used.
- qcstringQuality-control code, where used.
- hazardCodestringmandatoryHazard classification lookup code for dangerous goods. Empty string means not hazardous; a hazmat product carries the code your site has configured.
▶maintenanceobjectAdministrative maintenance flags.
- maintenanceIndicatorstringMaintenance state indicator, where used.
- dateHeldstringDate the product record was placed on hold.
▶valuesobjectPack-quantity values.
- innernumberUnits per inner pack (multipack).
▶manufacturerobjectManufacturer details for reporting and paperwork.
- namestringManufacturer name.
- codestringYour code for the manufacturer.
▶customisationsarray of objectFree-form key/value metadata attached to the product. Note: master data uses key/value; sales orders and work orders use name/value.
- keystringmin length 1Attribute name (e.g. Colour, Season).
- valuestringmin length 1Attribute value.
▶alternativesarray of objectAdditional barcodes for the same SKU. The type is a barcode-type lookup code (max 2 characters) — "10" each/unit, "08" inner pack, "09" outer case. An unrecognised or over-length type is silently dropped rather than rejected.
- barcodestringThe barcode value (EAN/UPC).
- typestringBarcode-type lookup code — "10" unit, "08" inner, "09" outer.
- referencestringPack-quantity convention for pack barcodes: "INN,<qty>" or "OUT,<qty>"; the unit code (e.g. "EA") for unit barcodes.
▶nmfcobjectFreight-classification detail backing the header NMFC code — density, class, and unit of measure for carrier rating. Provide when your products ship LTL/palletised and your forwarder rates by NMFC.
- codestringThe NMFC item code.
- classstringThe freight class (e.g. 55–500) for this item.
- descriptionstringThe commodity description as it should appear on the bill of lading.
- unitOfMeasurestringUnit the density/class is expressed against.
- densitynumberDensity (weight per cubic unit) used to derive the freight class.
Headers
AuthorizationBasic base64(businessId:apiKey)requiredHTTP Basic. Username is your businessId, password is your API key.
Content-Typeapplication/jsonrequiredx-correlation-idoptionalYour own trace id for this request. Adopted for every log line Fuse writes while processing it, and returned as `correlationId` in the response body. Omitted: Fuse generates one.
Content-Typeapplication/jsonrequiredOn 202.
Content-Typeapplication/problem+jsonrequiredOn 400, 401.
Responses
application/jsonEvery record passed validation and is queued for the warehouse.
{
"success": true,
"recordCount": 1,
"messageIds": [
"11384719623456789"
],
"correlationId": "550e8400-e29b-41d4-a716-446655440000"
}Body fields
- successbooleanIndicates if the request was successfully accepted
- recordCountnumberNumber of records accepted for processing
- messageIdsarray of stringPub/Sub message IDs for tracking
- correlationIdstringCorrelation ID for request tracing
application/problem+jsonNo record was accepted. Every failing record is listed, by its index in the array you sent.
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "Bad Request",
"status": 400,
"detail": "Validation failed for one or more records",
"instance": "/api/v2/master-data",
"errors": [
{
"index": 0,
"errors": [
"identifiers.businessId: Required",
"shipmentLines.0.quantities.ordered: Expected number, received string"
]
}
]
}Body fields
- typestringA URI reference that identifies the problem type
- titlestringA short, human-readable summary of the problem type
- statusnumberThe HTTP status code generated by the origin server for this occurrence of the problem
- detailstringA human-readable explanation specific to this occurrence of the problem
- instancestringA URI reference that identifies the specific occurrence of the problem
- errorsarray of objectValidation errors (extension field for 400 Bad Request responses). For field-level validation errors (from Zod), this is an array of FieldValidationErrorDto. For batch validation errors, this is an array of RecordValidationErrorDto.
application/problem+jsonCredentials missing, malformed, or not recognised for this business.
{
"type": "https://tools.ietf.org/html/rfc7235#section-3.1",
"title": "Unauthorized",
"status": 401,
"detail": "Unauthorized",
"instance": "/api/v2/master-data"
}Body fields
- typestringA URI reference that identifies the problem type
- titlestringA short, human-readable summary of the problem type
- statusnumberThe HTTP status code generated by the origin server for this occurrence of the problem
- detailstringA human-readable explanation specific to this occurrence of the problem
- instancestringA URI reference that identifies the specific occurrence of the problem
- errorsarray of objectValidation errors (extension field for 400 Bad Request responses). For field-level validation errors (from Zod), this is an array of FieldValidationErrorDto. For batch validation errors, this is an array of RecordValidationErrorDto.