Limit rules constrain what counts as a valid bundle (minimums, maximums, multiples). They’re returned in limitRules[] on GET /bundles/:id.
{ "type" : "total-number-of-products" , "operation" : "gte" , "value" : "3" , "sectionId" : null }
Field Type Description typestringThe rule type (below). operationstringgt | gte | lt | lte | eq.valuestringThe threshold. sectionIdnumber | nullnull = applies to the whole bundle; otherwise scoped to a section.
typeConstrains bundle-priceThe bundle price after discount. bundle-price-before-discountThe bundle price before discount. total-number-of-productsTotal count of all products in the bundle. amount-of-one-productMax quantity of any single product. number-of-different-productsCount of distinct products. multiples-ofThe product count must be a multiple of value (e.g. 6, 12, 18).
`multiples-of` ignores `operation`
For the multiples-of rule, the operation field is not used — the rule simply checks that the count is divisible by value.
Rules are evaluated once all sections are filled. The SDK’s builder exposes violations as errors and reflects overall validity through isValid / isComplete.
Only rules that target the bundle are returned to headless consumers (rules that gate free items are handled internally).
Surface rule failures in your UI
Read builder.errors from useBundleBuilder to show why a selection isn’t yet valid (e.g. “Add at least 3 products”). Each error has a type and a human-readable message.