# PromotionEffect

object type

The canned effect — ONE flat render of the contracts discriminated union (the CollectionPredicate render pattern): kind selects the arm; each arm's fields are present on it and absent elsewhere. Percentages ride integer ppm (10% = 100000); amounts are integer minor units in the org default currency; effects only REDUCE — never uplift.

## Fields

| Field | Type | Notes |
| --- | --- | --- |
| `kind` | [PromotionEffectType](/types/PromotionEffectType/) `PromotionEffectType!` | No further notes. |
| `percentPpm` | [Int](/types/#scalars) | percent_off: the ppm ((0, 1000000]). |
| `amountMinor` | [Int](/types/#scalars) | amount_off: the absolute reduction (minor units). |
| `target` | [PromotionEffectTarget](/types/PromotionEffectTarget/) | percent_off/amount_off: where the figure lands. |
| `unitPriceMinor` | [Int](/types/#scalars) | fixed_price: the target UNIT price — each matched line reduces so its running subtotal = unit × qty; already-below = no-op (LINE-only by construction). |
| `buyQty` | [Int](/types/#scalars) | buy_x_get_y: the buy quantity (X). |
| `getQty` | [Int](/types/#scalars) | buy_x_get_y: the get quantity (Y) per reward group. |
| `getScope` | [PromotionBogoScope](/types/PromotionBogoScope/) | No further notes. |
| `getProductScope` | [PromotionProductScope](/types/PromotionProductScope/) | buy_x_get_y getScope=different: the get-item scope (REQUIRED iff different). |
| `benefitPercentPpm` | [Int](/types/#scalars) | buy_x_get_y: ABSENT = free (100%); bundle_combo: the percent benefit (XOR benefitAmountMinor). |
| `benefitAmountMinor` | [Int](/types/#scalars) | bundle_combo: the amount benefit PER COMBO (× the multiplier k; largest-remainder across participants; XOR benefitPercentPpm). |
| `components` | [PromotionBundleComponent](/types/PromotionBundleComponent/) `[PromotionBundleComponent!]` | bundle_combo: the components (2..8 — a single-component qty deal is buy_x_get_y/minQty). |
| `giftVariantId` | [ID](/types/#scalars) | free_gift (DEFERRED): the gifted Variant. |
| `qty` | [Int](/types/#scalars) | free_gift (DEFERRED): the gift quantity. |
