For the complete documentation index, see llms.txt. This page is also available as Markdown.

Discounts on an order

The kinds of discount an order can carry, where each comes from, and how far it reaches.

A discount on an order is described by three things: what kind it is, where it came from, and how much of the order it covers. Every discount, whether typed in by hand or applied by a campaign, is recorded the same way.

Summary

Property
Values

Type

PERCENTAGE, AMOUNT

Origin

MANUAL, CAMPAIGN, LOYALTY, PRICEREDUCTION

Scope

WHOLE_ORDER, SPECIFIC_LINE, SPECIFIC_LINE_LIST, PRODUCT_LIST

Type

Type
Meaning

PERCENTAGE

A percentage off.

AMOUNT

A fixed sum off.

Origin — where the discount came from

Origin is what you look at when someone asks why a line is cheaper than the shelf price.

Origin
Meaning

MANUAL

Someone applied it on the order.

CAMPAIGN

A campaign matched. The discount carries the campaign it came from.

LOYALTY

Applied by the loyalty programme.

PRICEREDUCTION

A price reduction on the product itself, rather than a campaign.

Scope — how much of the order it covers

Scope
Applies to

WHOLE_ORDER

The order total.

SPECIFIC_LINE

One order line.

SPECIFIC_LINE_LIST

A named set of order lines.

PRODUCT_LIST

Every line whose product is in a named set.

PRODUCT_LIST and SPECIFIC_LINE_LIST differ in what they are pinned to. A product list follows the products, so a line added later for a listed product is covered. A line list is pinned to the lines that existed when the discount was applied.

What a discount records

Beyond type, origin and scope, a discount on an order carries:

Field
What it is for

name

What it is called on the receipt

discountCode

The code entered, where one was used

amount

The percentage or the sum, per the type

validTo

When it stops applying

maxUsage

How many times it may be used

discountReasonCode

Why it was given — useful for reporting on manual discounts

campaignUid

The campaign behind it, when the origin is CAMPAIGN

productSkus / orderItemUids

What a PRODUCT_LIST or line-list discount is pinned to

discountReasonCode is worth using consistently. It is the only thing that makes manual discounting reportable after the fact.

Limitations

  • An order can carry more than one discount, and they are recorded separately rather than collapsed into a single figure.

  • A discount does not change a product's cost, so it reduces margin rather than reducing the value of your stock — see How cost price is calculated.


Last updated 19.09.2026

Was this helpful?