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