Table of Contents

Pricing

/api/integration/pricing — domain: Pricing

PUT /rules

Purpose. Push price list lines — the rules that decide what a given customer pays for a given product at a given quantity, on a given date.

Domain. Pricing, which owns price lists, promotions and bonus-product offers, and which every priced surface calls.

Request

IntegrationEnvelope<PriceListLineDto>.

{
  "source": "BC",
  "timestamp": "2026-08-19T04:00:00Z",
  "data": [
    {
      "ruleId": "PL-TRADE-SHIRT-6",
      "sourceType": "PriceGroup",
      "sourceCode": "TRADE",
      "masterProductNo": "SHIRT",
      "sku": null,
      "itemDiscountGroup": null,
      "amountType": "Price",
      "minQuantity": 6,
      "unitPrice": 21.75,
      "lineDiscountPercent": 0,
      "allowLineDiscount": true,
      "allowInvoiceDiscount": true,
      "startDate": "2026-07-01T00:00:00+10:00",
      "endDate": null
    }
  ]
}
Field Type Required Description
ruleId string Yes The natural key. Reusing an existing value overwrites every field of that rule
sourceType string Yes What the rule applies to — a specific customer, a price group, and so on
sourceCode string The value for that source type, for example the price group code
masterProductNo string Targets every size and colour variant of a master product
sku string Targets one specific variant
itemDiscountGroup string Targets a group of products, matching the value sent to Catalogue
amountType string Yes Whether this rule carries a price or a discount
minQuantity int The quantity break at which the rule starts to apply
unitPrice decimal The unit price, when the rule sets a price
lineDiscountPercent decimal The percentage off, when the rule sets a discount
allowLineDiscount bool Whether a further line discount may be applied on top
allowInvoiceDiscount bool Whether an invoice-level discount may be applied on top
startDate date-time When the rule becomes valid. Null means no lower bound
endDate date-time When the rule stops being valid. Null means no upper bound

Target exactly one of sku, masterProductNo or itemDiscountGroup per rule — they are three levels of specificity, not fields to combine.

Important

Pricing does not use the snapshot model. A rule not present in the payload is not deleted — unlike Customer, Inventory and Tax, where omission means removal. To retire a rule you must set an endDate; sending a payload without it leaves it live.

This is the single most consequential difference between the endpoints on this surface. An integration that assumes snapshot semantics here will accumulate stale rules indefinitely, and stale price rules are a commercial problem, not a tidiness one.

Prices carry four decimal places through the engine and are rounded to two only at the point of display, so a rule of 21.7525 is stored and applied as written.

Response

One entry per rule, keyed by ruleId.

{
  "data": [
    { "key": "PL-TRADE-SHIRT-6", "outcome": "Upserted" }
  ]
}