# Objects / Promotions

# Promotions

**Object**
## PromotionCriteriaItem

| Fields | Type | Description |
| --- | --- | --- |
| item | [ProductClassificationUnion](/documentation/Unions/Product-Classification-Union#ProductClassificationUnion) | The criteria item |
| exclude | *Boolean* | Whether the item is excluded from the criteria |
| rebate | *Float* | The rebate of the item in the criteria |



**Object**
## PromotionCriteria

| Fields | Type | Description |
| --- | --- | --- |
| buyAmount | *Float!* | The amount of the buy amount type required to active the criteria |
| buyAmountMax | *Float* | The max amount the before the criteria is no longer activated (only used if `quantityType` is set to `MORE`) |
| buyAmountType | [PromotionBuyAmountTypeEnum!](/documentation/Enums/Promotion-Buy-Amount-Type-Enum#PromotionBuyAmountTypeEnum) | The type for the quantity units to calculate the promotion `buyAmount` |
| discountAmount | *Float* | The amount for the promotion discount |
| discountEverydayPromotions | *Boolean* | Whether the promotion discounts the everyday price of the promotion, otherwise the promotion will discount the single price for the products |
| excludeCountQuantity | *Boolean* | Whether the excluded items count towards the `buyAmount` |
| excludePricePoints | *Boolean* | When using `mixedOnly` it excludes all price point from activating the criteria, except for the base quantity |
| items | [[PromotionCriteriaItem]](/documentation/Objects/Promotions#PromotionCriteriaItem) | The list of items in the criteria |
| minQuantity | *Float* | The minimum continuous sell quantity. When the `quantityType` is set to `MORE` this is how many quantity units after the `buyAmount` until the criteria is applied again. |
| mixedOnly | *Boolean* | Only count mixed products towards this criteris |
| optional | *Boolean* | Whether the criteria is required for the promotion to be applied |
| quantityType | [PromotionQuantityTypeEnum!](/documentation/Enums/Promotion-Quantity-Type-Enum#PromotionQuantityTypeEnum) | Whether the quantity amount is `MORE` or `EXACT` |
| type | [PromotionTypeEnum!](/documentation/Enums/Promotion-Type-Enum#PromotionTypeEnum) | The type of discount that the criteria applies |



**Object**
## PromotionSchedule

| Fields | Type | Description |
| --- | --- | --- |
| anchor | [DateTime](/documentation/Types/Date-Time#DateTime) | The anchor date for resolving the schedule |
| period | [TimePeriod](/documentation/Types/Time-Period#TimePeriod) | How often the schedule repeats from the anchor timestamp |
| offset | [TimePeriod](/documentation/Types/Time-Period#TimePeriod) | How long after the resolved period before the promotion becomes active |
| duration | [TimePeriod](/documentation/Types/Time-Period#TimePeriod) | How long the promotion should be active for |



**Object**
## Promotion

> <p>
> Express promotions require the criteria to be set up differently.
> All the express promotion's `criteria` must have only one item on it and cannot be excluded.
> The `criteria` also can only have `type` set to either `SELL_TOTAL`,
> `DISCOUNT_PERCENTAGE` or `DISCOUNT_TOTAL_AMOUNT`.
> When `type` is set to `SELL_TOTAL` the item in the criteria can only be product or family.
> </p>

### Implements
*List of interfaces this object implements*

- [ReportFilterInterface](/documentation/Interfaces/Report-Filter-Interface#ReportFilterInterface)
- [PrintableInterface](/documentation/Interfaces/Printable-Interface#PrintableInterface)

| Fields | Type | Description |
| --- | --- | --- |
| id | [ID!](/documentation/Types/UUID#UUID) | The ID for the promotion |
| mdbId | *Int* | The master database ID for the promotion |
| mdbSyncing | *Boolean!* | Whether the promotion is currently syncing with the master database |
| clientId | *String* | The ID provided by the creator of the promotion, this is only available through the API |
| name | *String!* | The name of the promotion |
| start | [DateTime](/documentation/Types/Date-Time#DateTime) | The start date of the promotion, when the field is `null` the promotion has no start date |
| end | [DateTime](/documentation/Types/Date-Time#DateTime) | The end date of the promotion, when the field is `null` the promotion has no end date |
| promotionCategory | [PromotionCategory](/documentation/Objects/Promotion-Category#PromotionCategory) | The category for the promotion |
| customerGroups | [[CustomerGroup]](/documentation/Objects/Customers#CustomerGroup) | The customer groups that the promotion is available to |
| outlets | [[Outlet]](/documentation/Objects/Outlets#Outlet) | The outlets that the promotion runs on |
| express | *Boolean* | Whether the promotion is an express promotion |
| mixCriteria | *Boolean* | Whether the criteria should mix together as if they were a single criteria |
| criteria | [[PromotionCriteria]](/documentation/Objects/Promotions#PromotionCriteria) | The criteria for the promotion |
| schedule | [PromotionSchedule](/documentation/Objects/Promotions#PromotionSchedule) | The schedule for how often this promotion reoccurs |
| active | *Boolean* | Whether the promotion is active |
| saleMaxApplicationCount | *Int* | The maximum number of times this promotion can be applied to a single sale, if null then it's unlimited |
| activatedBy | *String* | The rules to activate this promotion, currently this can only be specified internally by Shopfront |
| revisions | [PromotionRevisionConnection](#PromotionRevisionConnection) | The recent revisions for the promotion |

## PromotionRevisionConnection
#### Object  —  [ConnectionType](/documentation/General/Connections) of [Revision](/documentation/Objects/Revision#Revision)

### Sortable Fields
*Fields from [Revision](/documentation/Objects/Revision#Revision) that can be used to sort the connection items*

- timestamp