Discounts are per-market promotions — reads use read_markets, writes use write_markets. Four types share one endpoint set: percentage, fixed_amount (a per-currency amounts map, base currency required), free_shipping, and buy_x_get_y; the validation matrix is strict, so each type requires exactly its own fields and rejects the others'. Coupon codes are unique per market (case-insensitive) and every discount holds a unique priority slot. status is DERIVED from the schedule at read time — disabled is the only stored state, and enabling recomputes from the dates.
Relation labels are scope-gated: a discount's targeting and eligibility always return as bare IDs, and the hydrated labels (product titles, customer names and emails, group names) appear only when your token also holds read_products or read_customers — the can_view_products/can_view_customers booleans in the response say which labels were redacted. Fetch /markets/{marketId}/discounts/limits first: every cap, range, and enum a client needs comes from there, never hardcoded.
Endpoints#
Get discount limits
Fetch discount validation limits and enum sets.
Returns everything needed to build a valid discount without hardcoding: the per-market cap, name/code lengths, the enum sets (types, activations, applies-to, customer eligibilities, BXGY get/item types, statuses), per-type capability flags, relation caps (max products/collections/categories/customers/groups per discount, max BXGY items), value ranges (percentage bounds, money maximums, quantity and priority ranges, usage-limit caps, the -1 unlimited sentinel), and the list/sort vocabulary.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
404MARKET_NOT_FOUNDMarket does not exist in this store.
List discounts
List a market's discounts.
Returns paginated discounts with their definitions; relation ids are returned by the detail endpoint, not the list. Filters: status (active/scheduled/expired/disabled — status always reflects the current schedule, so filtering by expired finds every discount whose end date has passed), type, activation, and search by name or coupon code. Pagination and sorting bounds come from the discount limits.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
Query parameters
| Name | Type | Description |
|---|---|---|
page
|
integer |
Page number. |
per_page
|
integer |
Page size (service-capped). |
status
|
string |
Filter by status: |
type
|
string |
Filter by type: |
activation
|
string |
Filter by activation: |
search
|
string |
Search by discount name or coupon code. |
sort_by
|
string |
Sort column from the discount limits (priority, name, type, activation, usage_count, created_at, updated_at). |
sort_direction
|
string |
Sort direction. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400MARKET_DISCOUNT_FILTER_INVALIDstatus/type/activation filter is not a supported value.
-
400MARKET_DISCOUNT_SEARCH_TOO_LONGSearch query exceeds the discount limits max length.
-
400MARKET_DISCOUNT_LIST_INVALID_SORT_BYsort_by is not a discount sort column.
-
400MARKET_DISCOUNT_LIST_INVALID_SORT_DIRECTIONsort_direction is not asc or desc.
-
404MARKET_NOT_FOUNDMarket does not exist in this store.
Create a discount
Create a discount in a market.
Creates a discount. The validation matrix is strict per type: percentage requires value; fixed_amount requires a base-currency amounts entry; free_shipping has no value; buy_x_get_y requires quantities, get mode, and non-empty buy/get target sets; bundle requires 2–20 unique product/variant components plus either fixed set prices or a percentage off. Bundle and BXGY component IDs must resolve inside the token's store. coupon requires a case-insensitively unique code while automatic rejects the code field. Priority is unique per market. Generic targeting and eligibility lists are accepted only when selected by their matching mode. Fires discounts/create.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
required
|
string |
Discount name. |
type
required
|
string |
|
activation
required
|
string |
|
code
|
string |
Coupon code — required for |
priority
required
|
integer |
Evaluation priority — unique per market. |
value
|
number |
Percentage value (0–100] — |
amounts
|
object |
Currency-code → amount map — |
applies_to
required
|
string |
|
product_ids
|
array<integer> |
Target product ids — required exactly when applies_to is |
collection_ids
|
array<string> |
Target collection ids — required exactly when applies_to is |
category_ids
|
array<integer> |
Target category ids — required exactly when applies_to is |
customer_eligibility
required
|
string |
|
customer_ids
|
array<string> |
Eligible customer ids — required exactly for |
group_ids
|
array<string> |
Eligible customer-group ids — required exactly for |
exclude_sale_items
|
boolean |
Skip items already on sale. |
min_subtotal
|
object |
Minimum order subtotal per currency (base currency entry required when set). |
min_quantity
|
integer |
Minimum order item count. Accepted only by discount types whose limits capability declares support. |
max_discount
|
object |
Cap on the computed discount per currency. Percentage type only. |
starts_at
|
string |
Schedule start in the store timezone, formatted as YYYY-MM-DDTHH:mm:ss with no timezone suffix. Status derives from the window. |
ends_at
|
string |
Schedule end in the same store-local format — must be after starts_at. |
usage_limit
|
integer |
Total redemption cap; -1 = unlimited. |
per_customer_limit
|
integer |
Per-customer redemption cap; -1 = unlimited. |
first_order_only
|
boolean |
Restrict to a customer's first order. |
show_in_cart
|
boolean |
Surface a coupon in the cart before checkout. Automatic discounts reject this field when true. |
bxgy_buy_quantity
|
integer |
BXGY: quantity the buyer must add from the buy set. |
bxgy_get_quantity
|
integer |
BXGY: quantity granted from the get set. |
bxgy_get_type
|
string |
BXGY: |
bxgy_get_value
|
number |
BXGY: get-side value for |
bxgy_max_uses
|
integer |
BXGY: how many times the pattern may apply per order. |
bxgy_buy_items
|
array<object> |
BXGY buy set: {item_type: product|collection|category, item_id} — no duplicates. |
bxgy_get_items
|
array<object> |
BXGY get set — same shape as the buy set. |
bundle_value_mode
|
string |
Bundle pricing mode: |
bundle_prices
|
object |
Bundle fixed set price by currency. Required for fixed_price mode and must include the store base currency. |
bundle_percentage
|
number |
Percentage off each complete component set. Required for percentage mode. |
bundle_max_sets
|
integer |
Maximum complete sets discounted per order; omit or use -1 for unlimited. |
bundle_items
|
array<object> |
Bundle components: 2–20 unique |
Errors
-
400DISCOUNT_NAME_REQUIREDName is empty after normalization.
-
400DISCOUNT_NAME_TOO_LONGName exceeds the limit.
-
400DISCOUNT_TYPE_INVALIDtype is not a supported discount type.
-
400DISCOUNT_ACTIVATION_INVALIDactivation is not coupon or automatic.
-
400DISCOUNT_CODE_REQUIREDcoupon activation without a code.
-
400DISCOUNT_CODE_AUTOMATIC_FORBIDDENautomatic activation with a code.
-
400DISCOUNT_PRIORITY_RANGEpriority is outside the allowed range.
-
400DISCOUNT_VALUE_RANGEpercentage value is not in (0, 100].
-
400DISCOUNT_AMOUNTS_REQUIREDfixed_amount without an amounts map.
-
400DISCOUNT_CURRENCY_BASE_REQUIREDA money map is missing the store's base currency entry.
-
400DISCOUNT_CURRENCY_INVALIDA money map entry uses a currency not assigned to the market.
-
400DISCOUNT_VALUE_FORBIDDENvalue sent for a type that doesn't take one.
-
400DISCOUNT_AMOUNTS_FORBIDDENamounts sent for a type that doesn't take them.
-
400DISCOUNT_BXGY_FIELDS_FORBIDDENBXGY fields sent for a non-BXGY type.
-
400DISCOUNT_BXGY_BUY_REQUIREDBXGY requires at least one valid buy item.
-
400DISCOUNT_BXGY_GET_REQUIREDBXGY requires at least one valid get item.
-
400DISCOUNT_BUNDLE_FIELDS_FORBIDDENBundle fields sent for a non-bundle type.
-
400DISCOUNT_BUNDLE_MODE_REQUIREDBundle pricing mode is required.
-
400DISCOUNT_BUNDLE_MODE_INVALIDBundle pricing mode is not fixed_price or percentage.
-
400DISCOUNT_BUNDLE_PRICE_REQUIREDA fixed-price bundle is missing its currency price map.
-
400DISCOUNT_BUNDLE_PERCENT_REQUIREDA percentage bundle is missing a valid percentage.
-
400DISCOUNT_BUNDLE_ITEMS_RANGEBundle component count is outside the limits response range.
-
400DISCOUNT_BUNDLE_ITEM_DUPLICATEThe same product or variant appears more than once in the bundle.
-
400DISCOUNT_BUNDLE_ITEM_QUANTITYA bundle component quantity is outside the limits response range.
-
400DISCOUNT_BUNDLE_MAX_SETS_RANGEbundle_max_sets is outside the limits response range and is not unlimited.
-
400DISCOUNT_MAX_DISCOUNT_FORBIDDENmax_discount was sent for a type that does not support it.
-
400DISCOUNT_ENTIRE_ORDER_ONLYfree_shipping, buy_x_get_y, or bundle with targeting other than entire_order.
-
400DISCOUNT_APPLIES_TO_INVALIDapplies_to is not a supported value.
-
400DISCOUNT_TARGETS_REQUIREDSpecific targeting/eligibility without its ID list.
-
400DISCOUNT_TARGETS_FORBIDDENAn ID list sent for a non-matching targeting/eligibility.
-
400DISCOUNT_ELIGIBILITY_INVALIDcustomer_eligibility is not a supported value.
-
400DISCOUNT_MIN_QUANTITY_FORBIDDENmin_quantity was sent for a discount type that does not support it.
-
400DISCOUNT_USAGE_LIMIT_RANGEusage_limit is outside the allowed range (and not -1).
-
400DISCOUNT_PER_CUSTOMER_RANGEper_customer_limit is outside the allowed range (and not -1).
-
400MARKET_DISCOUNT_DATE_INVALIDends_at is not after starts_at, or a date failed to parse.
-
400MARKET_DISCOUNT_RELATION_LIMIT_REACHEDA relation list exceeds its per-discount cap.
-
400MARKET_DISCOUNT_RELATION_DUPLICATEA target or eligibility id appears more than once in its list.
-
404MARKET_NOT_FOUNDMarket does not exist in this store.
-
409MARKET_DISCOUNT_CODE_DUPLICATEA discount with this code already exists in the market (codes are case-insensitive).
-
409MARKET_DISCOUNT_PRIORITY_DUPLICATEA discount already occupies this priority slot in the market.
-
409MARKET_DISCOUNT_LIMIT_REACHEDThe market's discount cap has been reached.
Get a discount
Fetch one discount with hydrated relations.
Returns the discount with its relation refs. Ref IDs always return; the hydrated LABELS (product titles, customer names and emails, group names) are other scopes' data and return only when the token also holds read_products (products/collections/categories/BXGY items) or read_customers (customers/groups) — the can_view_products/can_view_customers booleans in the response say which labels were redacted. status always reflects the current schedule.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
discountId
required
|
string |
Discount id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
404MARKET_NOT_FOUNDMarket does not exist in this store.
-
404MARKET_DISCOUNT_NOT_FOUNDDiscount does not exist in this market.
Update a discount
Replace a discount's definition.
Full update — the same validation matrix as create runs against the complete new definition, and the relation lists replace the existing ones. A disabled discount stays disabled through updates (only the enable endpoint re-activates); otherwise the status follows the new schedule. Fires discounts/update.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
discountId
required
|
string |
Discount id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
required
|
string |
Discount name. |
type
required
|
string |
|
activation
required
|
string |
|
code
|
string |
Coupon code — required for |
priority
required
|
integer |
Evaluation priority — unique per market. |
value
|
number |
Percentage value (0–100] — |
amounts
|
object |
Currency-code → amount map — |
applies_to
required
|
string |
|
product_ids
|
array<integer> |
Target product ids — required exactly when applies_to is |
collection_ids
|
array<string> |
Target collection ids — required exactly when applies_to is |
category_ids
|
array<integer> |
Target category ids — required exactly when applies_to is |
customer_eligibility
required
|
string |
|
customer_ids
|
array<string> |
Eligible customer ids — required exactly for |
group_ids
|
array<string> |
Eligible customer-group ids — required exactly for |
exclude_sale_items
|
boolean |
Skip items already on sale. |
min_subtotal
|
object |
Minimum order subtotal per currency (base currency entry required when set). |
min_quantity
|
integer |
Minimum order item count. Accepted only by discount types whose limits capability declares support. |
max_discount
|
object |
Cap on the computed discount per currency. Percentage type only. |
starts_at
|
string |
Schedule start in the store timezone, formatted as YYYY-MM-DDTHH:mm:ss with no timezone suffix. Status derives from the window. |
ends_at
|
string |
Schedule end in the same store-local format — must be after starts_at. |
usage_limit
|
integer |
Total redemption cap; -1 = unlimited. |
per_customer_limit
|
integer |
Per-customer redemption cap; -1 = unlimited. |
first_order_only
|
boolean |
Restrict to a customer's first order. |
show_in_cart
|
boolean |
Surface a coupon in the cart before checkout. Automatic discounts reject this field when true. |
bxgy_buy_quantity
|
integer |
BXGY: quantity the buyer must add from the buy set. |
bxgy_get_quantity
|
integer |
BXGY: quantity granted from the get set. |
bxgy_get_type
|
string |
BXGY: |
bxgy_get_value
|
number |
BXGY: get-side value for |
bxgy_max_uses
|
integer |
BXGY: how many times the pattern may apply per order. |
bxgy_buy_items
|
array<object> |
BXGY buy set: {item_type: product|collection|category, item_id} — no duplicates. |
bxgy_get_items
|
array<object> |
BXGY get set — same shape as the buy set. |
bundle_value_mode
|
string |
Bundle pricing mode: |
bundle_prices
|
object |
Bundle fixed set price by currency. Required for fixed_price mode and must include the store base currency. |
bundle_percentage
|
number |
Percentage off each complete component set. Required for percentage mode. |
bundle_max_sets
|
integer |
Maximum complete sets discounted per order; omit or use -1 for unlimited. |
bundle_items
|
array<object> |
Bundle components: 2–20 unique |
Errors
-
400DISCOUNT_NAME_REQUIREDName is empty after normalization.
-
400DISCOUNT_NAME_TOO_LONGName exceeds the limit.
-
400DISCOUNT_TYPE_INVALIDtype is not a supported discount type.
-
400DISCOUNT_ACTIVATION_INVALIDactivation is not coupon or automatic.
-
400DISCOUNT_CODE_REQUIREDcoupon activation without a code.
-
400DISCOUNT_CODE_AUTOMATIC_FORBIDDENautomatic activation with a code.
-
400DISCOUNT_PRIORITY_RANGEpriority is outside the allowed range.
-
400DISCOUNT_VALUE_RANGEpercentage value is not in (0, 100].
-
400DISCOUNT_AMOUNTS_REQUIREDfixed_amount without an amounts map.
-
400DISCOUNT_CURRENCY_BASE_REQUIREDA money map is missing the store's base currency entry.
-
400DISCOUNT_CURRENCY_INVALIDA money map entry uses a currency not assigned to the market.
-
400DISCOUNT_VALUE_FORBIDDENvalue sent for a type that doesn't take one.
-
400DISCOUNT_AMOUNTS_FORBIDDENamounts sent for a type that doesn't take them.
-
400DISCOUNT_BXGY_FIELDS_FORBIDDENBXGY fields sent for a non-BXGY type.
-
400DISCOUNT_BXGY_BUY_REQUIREDBXGY requires at least one valid buy item.
-
400DISCOUNT_BXGY_GET_REQUIREDBXGY requires at least one valid get item.
-
400DISCOUNT_BUNDLE_FIELDS_FORBIDDENBundle fields sent for a non-bundle type.
-
400DISCOUNT_BUNDLE_MODE_REQUIREDBundle pricing mode is required.
-
400DISCOUNT_BUNDLE_MODE_INVALIDBundle pricing mode is not fixed_price or percentage.
-
400DISCOUNT_BUNDLE_PRICE_REQUIREDA fixed-price bundle is missing its currency price map.
-
400DISCOUNT_BUNDLE_PERCENT_REQUIREDA percentage bundle is missing a valid percentage.
-
400DISCOUNT_BUNDLE_ITEMS_RANGEBundle component count is outside the limits response range.
-
400DISCOUNT_BUNDLE_ITEM_DUPLICATEThe same product or variant appears more than once in the bundle.
-
400DISCOUNT_BUNDLE_ITEM_QUANTITYA bundle component quantity is outside the limits response range.
-
400DISCOUNT_BUNDLE_MAX_SETS_RANGEbundle_max_sets is outside the limits response range and is not unlimited.
-
400DISCOUNT_MAX_DISCOUNT_FORBIDDENmax_discount was sent for a type that does not support it.
-
400DISCOUNT_ENTIRE_ORDER_ONLYfree_shipping, buy_x_get_y, or bundle with targeting other than entire_order.
-
400DISCOUNT_APPLIES_TO_INVALIDapplies_to is not a supported value.
-
400DISCOUNT_TARGETS_REQUIREDSpecific targeting/eligibility without its ID list.
-
400DISCOUNT_TARGETS_FORBIDDENAn ID list sent for a non-matching targeting/eligibility.
-
400DISCOUNT_ELIGIBILITY_INVALIDcustomer_eligibility is not a supported value.
-
400DISCOUNT_MIN_QUANTITY_FORBIDDENmin_quantity was sent for a discount type that does not support it.
-
400DISCOUNT_USAGE_LIMIT_RANGEusage_limit is outside the allowed range (and not -1).
-
400DISCOUNT_PER_CUSTOMER_RANGEper_customer_limit is outside the allowed range (and not -1).
-
400MARKET_DISCOUNT_DATE_INVALIDends_at is not after starts_at, or a date failed to parse.
-
400MARKET_DISCOUNT_RELATION_LIMIT_REACHEDA relation list exceeds its per-discount cap.
-
400MARKET_DISCOUNT_RELATION_DUPLICATEA target or eligibility id appears more than once in its list.
-
404MARKET_NOT_FOUNDMarket does not exist in this store.
-
409MARKET_DISCOUNT_CODE_DUPLICATEA discount with this code already exists in the market (codes are case-insensitive).
-
409MARKET_DISCOUNT_PRIORITY_DUPLICATEA discount already occupies this priority slot in the market.
-
409MARKET_DISCOUNT_LIMIT_REACHEDThe market's discount cap has been reached.
-
404MARKET_DISCOUNT_NOT_FOUNDDiscount does not exist in this market.
Delete a discount
Delete a discount.
Deletes the discount together with its targeting, eligibility, BXGY item lists, and bundle component set. Usage history is retained for reporting. Fires discounts/delete.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
discountId
required
|
string |
Discount id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
404MARKET_NOT_FOUNDMarket does not exist in this store.
-
404MARKET_DISCOUNT_NOT_FOUNDDiscount does not exist in this market.
Enable a discount
Re-enable a disabled discount.
Re-enables the discount. The resulting status follows the schedule — a discount whose window already passed comes back as expired, a future one as scheduled, otherwise active. Fires discounts/update.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
discountId
required
|
string |
Discount id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400MARKET_DISCOUNT_STATUS_INVALIDRequested status is not enable/disable.
-
404MARKET_NOT_FOUNDMarket does not exist in this store.
-
404MARKET_DISCOUNT_NOT_FOUNDDiscount does not exist in this market.
Disable a discount
Disable a discount.
Disables the discount. It stays disabled through schedule changes and updates until you enable it again. Fires discounts/update.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
discountId
required
|
string |
Discount id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400MARKET_DISCOUNT_STATUS_INVALIDRequested status is not enable/disable.
-
404MARKET_NOT_FOUNDMarket does not exist in this store.
-
404MARKET_DISCOUNT_NOT_FOUNDDiscount does not exist in this market.
Get discount settings
Fetch a market's discount-stacking settings.
Returns how discounts combine in this market. single applies one non-shipping discount; stack applies eligible automatic discounts and a coupon subset up to coupon_limit. At most one shipping discount applies, and it combines with a non-shipping result only when product_shipping_combine is enabled. priority_mode decides every forced choice. Markets without explicitly saved settings return the platform defaults. Allowed values and ranges return in limits.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
404MARKET_NOT_FOUNDMarket does not exist in this store.
Update discount settings
Partially update a market's discount-stacking settings.
Atomically updates only the provided fields. Concurrent partial updates cannot replace unrelated fields. Values outside the sets and ranges in limits are rejected; coupon_limit can never exceed the platform maximum returned there. A request that changes no values emits no audit entry or webhook; a changed request fires discount_settings/update.
Path parameters
| Name | Type | Description |
|---|---|---|
marketId
required
|
uuid |
Market id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
stacking_mode
|
string |
|
priority_mode
|
string |
|
coupon_limit
|
integer |
Maximum coupon codes applied in stack mode. The priority mode chooses the subset at the limit; the platform cap comes from |
auto_coupon_combine
|
boolean |
In stack mode, whether coupon codes can combine with automatic discounts. |
product_shipping_combine
|
boolean |
In either stacking mode, whether one shipping discount can combine with non-shipping discounts. |
Errors
-
400MARKET_STACKING_MODE_INVALIDstacking_mode is not single or stack.
-
400MARKET_PRIORITY_MODE_INVALIDpriority_mode is not best_for_customer or manual.
-
400MARKET_COUPON_LIMIT_OUT_OF_RANGEcoupon_limit is outside 1..the platform cap.
-
404MARKET_NOT_FOUNDMarket does not exist in this store.
Webhook events#
Discount webhook events fire transactionally with every write — including enable/disable (as discounts/update) and settings changes. The event cards below include the topic, subscription scope, store permission, payload schema, and sample payload. Payload relations are bare IDs, matching the API's label redaction.
Discount created
Fired when a discount is created in a market.
Payload fields
| Field | Type | Description |
|---|---|---|
discount.id |
string |
Always present |
discount.market_id |
string |
Can be removed/added via the Payload builder |
discount.name |
string |
Can be removed/added via the Payload builder |
discount.type |
string |
Can be removed/added via the Payload builder |
discount.activation |
string |
Can be removed/added via the Payload builder |
discount.code |
string |
Can be removed/added via the Payload builder |
discount.status |
string |
Can be removed/added via the Payload builder |
discount.priority |
integer |
Can be removed/added via the Payload builder |
discount.value |
number |
Can be removed/added via the Payload builder |
discount.amounts |
object |
Can be removed/added via the Payload builder |
discount.applies_to |
string |
Can be removed/added via the Payload builder |
discount.exclude_sale_items |
boolean |
Can be removed/added via the Payload builder |
discount.min_subtotal |
object |
Can be removed/added via the Payload builder |
discount.min_quantity |
integer |
Can be removed/added via the Payload builder |
discount.max_discount |
object |
Can be removed/added via the Payload builder |
discount.usage_limit |
integer |
Can be removed/added via the Payload builder |
discount.usage_count |
integer |
Can be removed/added via the Payload builder |
discount.per_customer_limit |
integer |
Can be removed/added via the Payload builder |
discount.customer_eligibility |
string |
Can be removed/added via the Payload builder |
discount.first_order_only |
boolean |
Can be removed/added via the Payload builder |
discount.show_in_cart |
boolean |
Can be removed/added via the Payload builder |
discount.bxgy_buy_quantity |
integer |
Can be removed/added via the Payload builder |
discount.bxgy_get_quantity |
integer |
Can be removed/added via the Payload builder |
discount.bxgy_get_type |
string |
Can be removed/added via the Payload builder |
discount.bxgy_get_value |
number |
Can be removed/added via the Payload builder |
discount.bxgy_max_uses |
integer |
Can be removed/added via the Payload builder |
discount.bxgy_buy_items[*].item_type |
string |
Can be removed/added via the Payload builder |
discount.bxgy_buy_items[*].item_id |
string |
Can be removed/added via the Payload builder |
discount.bxgy_get_items[*].item_type |
string |
Can be removed/added via the Payload builder |
discount.bxgy_get_items[*].item_id |
string |
Can be removed/added via the Payload builder |
discount.bundle_value_mode |
string |
Can be removed/added via the Payload builder |
discount.bundle_percentage |
number |
Can be removed/added via the Payload builder |
discount.bundle_prices |
object |
Can be removed/added via the Payload builder |
discount.bundle_max_sets |
integer |
Can be removed/added via the Payload builder |
discount.bundle_items[*].item_type |
string |
Can be removed/added via the Payload builder |
discount.bundle_items[*].item_id |
string |
Can be removed/added via the Payload builder |
discount.bundle_items[*].quantity |
integer |
Can be removed/added via the Payload builder |
discount.product_ids |
array |
Can be removed/added via the Payload builder |
discount.collection_ids |
array |
Can be removed/added via the Payload builder |
discount.category_ids |
array |
Can be removed/added via the Payload builder |
discount.customer_ids |
array |
Can be removed/added via the Payload builder |
discount.group_ids |
array |
Can be removed/added via the Payload builder |
discount.starts_at |
string |
Can be removed/added via the Payload builder |
discount.ends_at |
string |
Can be removed/added via the Payload builder |
discount.created_at |
string |
Can be removed/added via the Payload builder |
discount.updated_at |
string |
Can be removed/added via the Payload builder |
Discount updated
Fired when a discount changes — definition, targeting, schedule, limits, or enabled state.
Payload fields
| Field | Type | Description |
|---|---|---|
discount.id |
string |
Always present |
discount.market_id |
string |
Can be removed/added via the Payload builder |
discount.name |
string |
Can be removed/added via the Payload builder |
discount.type |
string |
Can be removed/added via the Payload builder |
discount.activation |
string |
Can be removed/added via the Payload builder |
discount.code |
string |
Can be removed/added via the Payload builder |
discount.status |
string |
Can be removed/added via the Payload builder |
discount.priority |
integer |
Can be removed/added via the Payload builder |
discount.value |
number |
Can be removed/added via the Payload builder |
discount.amounts |
object |
Can be removed/added via the Payload builder |
discount.applies_to |
string |
Can be removed/added via the Payload builder |
discount.exclude_sale_items |
boolean |
Can be removed/added via the Payload builder |
discount.min_subtotal |
object |
Can be removed/added via the Payload builder |
discount.min_quantity |
integer |
Can be removed/added via the Payload builder |
discount.max_discount |
object |
Can be removed/added via the Payload builder |
discount.usage_limit |
integer |
Can be removed/added via the Payload builder |
discount.usage_count |
integer |
Can be removed/added via the Payload builder |
discount.per_customer_limit |
integer |
Can be removed/added via the Payload builder |
discount.customer_eligibility |
string |
Can be removed/added via the Payload builder |
discount.first_order_only |
boolean |
Can be removed/added via the Payload builder |
discount.show_in_cart |
boolean |
Can be removed/added via the Payload builder |
discount.bxgy_buy_quantity |
integer |
Can be removed/added via the Payload builder |
discount.bxgy_get_quantity |
integer |
Can be removed/added via the Payload builder |
discount.bxgy_get_type |
string |
Can be removed/added via the Payload builder |
discount.bxgy_get_value |
number |
Can be removed/added via the Payload builder |
discount.bxgy_max_uses |
integer |
Can be removed/added via the Payload builder |
discount.bxgy_buy_items[*].item_type |
string |
Can be removed/added via the Payload builder |
discount.bxgy_buy_items[*].item_id |
string |
Can be removed/added via the Payload builder |
discount.bxgy_get_items[*].item_type |
string |
Can be removed/added via the Payload builder |
discount.bxgy_get_items[*].item_id |
string |
Can be removed/added via the Payload builder |
discount.bundle_value_mode |
string |
Can be removed/added via the Payload builder |
discount.bundle_percentage |
number |
Can be removed/added via the Payload builder |
discount.bundle_prices |
object |
Can be removed/added via the Payload builder |
discount.bundle_max_sets |
integer |
Can be removed/added via the Payload builder |
discount.bundle_items[*].item_type |
string |
Can be removed/added via the Payload builder |
discount.bundle_items[*].item_id |
string |
Can be removed/added via the Payload builder |
discount.bundle_items[*].quantity |
integer |
Can be removed/added via the Payload builder |
discount.product_ids |
array |
Can be removed/added via the Payload builder |
discount.collection_ids |
array |
Can be removed/added via the Payload builder |
discount.category_ids |
array |
Can be removed/added via the Payload builder |
discount.customer_ids |
array |
Can be removed/added via the Payload builder |
discount.group_ids |
array |
Can be removed/added via the Payload builder |
discount.starts_at |
string |
Can be removed/added via the Payload builder |
discount.ends_at |
string |
Can be removed/added via the Payload builder |
discount.created_at |
string |
Can be removed/added via the Payload builder |
discount.updated_at |
string |
Can be removed/added via the Payload builder |
Discount deleted
Fired when a discount is deleted.
Payload fields
| Field | Type | Description |
|---|---|---|
id |
string |
Always present |
market_id |
string |
Can be removed/added via the Payload builder |
name |
string |
Can be removed/added via the Payload builder |
Discount settings updated
Fired when a market's discount-stacking settings change.
Payload fields
| Field | Type | Description |
|---|---|---|
discount_settings.market_id |
string |
Always present |
discount_settings.stacking_mode |
string |
Can be removed/added via the Payload builder |
discount_settings.priority_mode |
string |
Can be removed/added via the Payload builder |
discount_settings.coupon_limit |
integer |
Can be removed/added via the Payload builder |
discount_settings.auto_coupon_combine |
boolean |
Can be removed/added via the Payload builder |
discount_settings.product_shipping_combine |
boolean |
Can be removed/added via the Payload builder |