- Additive changes (new endpoints, new response fields, new optional parameters, new values of an existing field) don’t break a client that ignores what it doesn’t know. Parse JSON leniently and don’t treat enum fields as closed lists.
- Entries tagged Action required may need a code change in your integration. Each one says who is affected and what to do.
- When an entry says bundle rules return a field, the field is in every bundle rule from the Admin API’s
GET /api/external/bundle-rules,GET /api/external/bundle-rules/babandGET /api/external/bundle-rules/discount, and in every Build-a-Box configuration from the Storefront API’sGET /bundles/bb/api/build-a-box/by-token/{token},GET /bundles/bb/api/build-a-box/single-productandGET /bundles/bb/api/build-a-box/get-bundle/{handle}(insidebundle). - The API reference is generated from the live API, so it always shows the current contract. The Admin API base URL is
https://bundles-admin.appstle.com, and Storefront API paths start with/bundles/bb/or/bundles/cp/.
showChildProductImages
Bundle rules return showChildProductImages (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.editVersion
Bundle rules return editVersion (integer). It starts at 0 and goes up by one each time the rule is saved.The reference also lists expectedEditVersion and expectedFixedPricingProducts. The app uses them only when it saves a rule: responses return expectedEditVersion as null and never include expectedFixedPricingProducts.Reference: Get all bundle rules, Get build-a-box configuration by token.discountTags
Bundle rules return discountTags (string), the comma-separated tags the app sets on the rule’s Shopify discount. null means the app leaves the discount’s tags alone, and an empty string means it cleared them.Reference: Get all bundle rules, Get build-a-box configuration by token.New combo layout, countdown format and free product limit fields
Bundle rules return three new fields:comboProductLayout (string), countdownTimerFormat (string) and limitFreeProductToConfiguredQuantity (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.Rules and settings in window._ABConfig can arrive after the page loads
On some stores, the Bundles theme embed now starts each page with window._ABConfig.bundle_rules empty and only labels in window._ABConfig.bundle_setting. It fetches the rest right away. When they arrive, it fills both objects in place and dispatches appstle-bundles:rules-loaded on document.window._ABConfig.whenConfigReady(callback)runscallbackonce the settings and the page’s rules are in place, or at once on a page that loaded with them. If the fetch fails, it still runscallback, withbundle_rulesempty and only labels inbundle_setting.window._ABConfig.loadAllBundleRules()resolves with every rule once they arrive, or with an empty list if they can’t load.
window._ABConfig.bundle_rules or window._ABConfig.bundle_setting as the page loads, including code that reads only the rules for the product on the page.Action required: run that code in window._ABConfig.whenConfigReady(callback). To read every rule, use await window._ABConfig.loadAllBundleRules().Reference: Reading bundle configuration.JavaScript eventsAdmin APIStorefront APINew fieldsBreaking changeAction required
Bundle rules on theme storefronts, combo product choice
window._ABConfig.bundle_rules can load in parts
On some stores, the Bundles theme embed no longer puts every bundle rule in window._ABConfig.bundle_rules when the page loads. It can leave out volume discount and Buy X Get Y rules that apply to specific products, unless the page is the product page of one of those products, or one of them is in the cart.window._ABConfig.loadAllBundleRules()returns a promise that resolves with every rule, at once when the page already has them all. If the rest can’t load, it resolves with the rules the page has.- The embed fetches the rest only when code calls
loadAllBundleRules(), so call it rather than wait for an event. When the rest arrive, the embed fillswindow._ABConfig.bundle_rulesin place and dispatchesappstle-bundles:rules-loadedondocument, with nodetail.
window._ABConfig.bundle_rules as the page loads, for example to show bundle discounts on collection pages.Action required: to read every rule, use await window._ABConfig.loadAllBundleRules().Reference: Reading bundle configuration.New combo product choice and Buy X Get Y display fields
Bundle rules return two new booleans:enableComboProductChoice and showBuyXGetYVariantsSeparately.Reference: Get all bundle rules, Get build-a-box configuration by token.Slider cart events and JavaScript API
The slider cart is the cart drawer that the Appstle Slider Cart app embed adds to a theme. It dispatches theseCustomEvents on document. Every event.detail includes timestamp (milliseconds since the epoch).On the cart page, closing the drawer takes the shopper back to the page they came from, and no
close event fires.The slider cart also sets window.appstleSliderCartApi:openCart(options)opens the drawer. Every option is optional:refetchCart(boolean) re-reads the cart as the drawer opens,source(string) becomes the open event’scartOpenSource, andfocusReturnAnchor(element) gets focus back when the drawer closes.closeCart()closes the drawer,refreshCart()re-reads the cart, andgetCartData()returns the cart the drawer last read.updateTieredPromotionsBar()re-reads the cart and updates the tiered promotions bar. Call it after your own code changes the cart. It does nothing when the bar is off.setCheckoutButtonClickHandler(handler)makes the checkout button callhandler(cart)and wait for it. Returnfalseto stop the checkout, for example when your own validation fails. Passnullto remove the handler.getCheckoutButtonClickHandler()returns the current one.
appstle-slider-cart:locale-changed on document with detail.locale set to the new locale, for example fr.excludeB2BCustomers
Bundle rules return excludeB2BCustomers (boolean). It’s true when the merchant has set the rule not to apply to buyers purchasing for a Shopify B2B company.Reference: Get all bundle rules, Get build-a-box configuration by token.appstle-bundles:reconcile
After a cart change, the Bundles storefront script can change the cart again to keep bundle quantities and discounts in step. It dispatches appstle-bundles:reconcile on window, so a cart drawer can wait for that before it re-reads the cart.event.detail.stateisscheduledwhen a follow-up change is coming, anddonewhen it has finished.event.detail.ididentifies the follow-up. Cart changes made in quick succession share oneid.
done. Don’t wait for it forever: if it doesn’t arrive, re-read the cart after a timeout.New section purchase option and widget eligibility fields
Bundle rules return two new booleans:enableSectionPurchaseOptions and showWidgetToNonEligibleCustomers.Reference: Get all bundle rules, Get build-a-box configuration by token.New purchase type and discount progress bar fields
Bundle rules return two new booleans:allowMixedPurchaseTypes and showDynamicBundleDiscountProgressBar.Reference: Get all bundle rules, Get build-a-box configuration by token.ignoreChildStockWhenUntracked
Bundle rules return ignoreChildStockWhenUntracked (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.Build-a-Box calls return only active bundles
GET /bundles/bb/api/build-a-box/by-token/{token}returns404when the bundle’sstatusisDRAFT. Before, it returned draft bundles too.GET /bundles/bb/api/build-a-box/single-productleaves out bundles whosestatusisDRAFT.
404 from the by-token call, and set a bundle’s status to ACTIVE before you load it on the storefront.Reference: Get build-a-box configuration by token, Get single-product build-a-box configuration.outOfStockChildBehavior
Bundle rules return outOfStockChildBehavior (string), which is REMOVE_ITEM_ONLY or REMOVE_ENTIRE_BUNDLE.Reference: Get all bundle rules, Get build-a-box configuration by token.New combo quantity fields
Bundle rules return two new fields:comboQuantityMax (integer) and enableComboQuantitySelector (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.New savings badge label fields
Bundle rules return two new strings:themeSavingsBadgeLabel and themeSubscriptionSavingsBadgeLabel.Reference: Get all bundle rules, Get build-a-box configuration by token.showThemeProductPriceSavings
Bundle rules return showThemeProductPriceSavings (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.requireCompleteSelectionForAddToCart
Bundle rules return requireCompleteSelectionForAddToCart (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.enablePurchaseOptionsSelector
Bundle rules return enablePurchaseOptionsSelector (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.New fixed bundle subscription fields
Bundle rules return two new fields:disableFixedBundleSubscription (boolean) and fixedBundleSubscriptionType (string), which is INLINE or DEDICATED.Reference: Get all bundle rules, Get build-a-box configuration by token.disableTierUnselect
Bundle rules return disableTierUnselect (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.disableDiscountOnPos
Bundle rules return disableDiscountOnPos (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.enableTierSellingPlan
Bundle rules return enableTierSellingPlan (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.New market, sticky bar and tier quantity fields
Bundle rules return five new fields:allowedMarkets(string): the Shopify market IDs the rule is limited to, separated by commas. It’s empty ornullwhen the rule isn’t limited to any market.enableStickyBar(boolean) andstickyBarButtonLabel(string).enableTierQuantitySelector(boolean) andhideThemeVariants(boolean).
New value LAYOUT_FOUR for the dedicated subscription layout
dedicatedSubscriptionLayout has a new value, LAYOUT_FOUR, next to LAYOUT_ONE, LAYOUT_TWO and LAYOUT_THREE.Who is affected: clients that map dedicatedSubscriptionLayout to a fixed list of values.Action required: accept values you don’t recognize.Reference: Get all bundle rules, Get build-a-box configuration by token.New item selection fields
Bundle rules return two new fields:requireItemSelection (boolean) and requireItemSelectionLabel (string).Reference: Get all bundle rules, Get build-a-box configuration by token.excludedProducts and hideBundleTitle
Bundle rules return two new fields: excludedProducts (string) and hideBundleTitle (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.Admin APIStorefront APINew fieldsNew enum valueAction required
Eligibility, low-stock alerts, volume discounts
New fields and a new productSelectionType value
Bundle rules return 13 new fields:- Eligibility:
applyDiscountOnlyIfAddedFromWidget(boolean),eligibleCollectionData(string),eligibleProductSelectionType(string) andeligibleVariants(string). - Low-stock alert:
enableLowStockAlert(boolean),lowStockAlertBackgroundColor(string),lowStockAlertLabel(string),lowStockAlertTextColor(string) andlowStockThreshold(integer). - Volume discount variant options:
volumeDiscountLabelOptionNames(string),volumeDiscountSplitVariantOptions(boolean),volumeDiscountSwatchOptionNames(string) andvolumeDiscountVariantOptionLayout(string).
productSelectionType has a new value, ALL_PRODUCTS, next to PRODUCT and COLLECTION. The Admin API’s productSelectionType.equals and productSelectionType.notEquals filters accept it too.Who is affected: clients that map productSelectionType to a fixed list of values.Action required: accept values you don’t recognize.Reference: Get all bundle rules, Get build-a-box configuration by token.New value CART_DRAWER for the bundle redirect
bundleRedirect has a new value, CART_DRAWER, next to CART, CHECKOUT, CUSTOM and NONE. The Admin API’s bundleRedirect.equals and bundleRedirect.notEquals filters accept it too.Who is affected: clients that map bundleRedirect to a fixed list of values.Action required: accept values you don’t recognize.Reference: Get all bundle rules, Get build-a-box configuration by token.New countdown timer and discount type fields
Bundle rules return nine new fields:- Countdown timer:
enableCountdownTimer(boolean),countdownTimerMode(string),countdownTimerTitle(string),countdownTimerDurationMinutes(integer),countdownTimerFontSize(integer),countdownTimerTextColor(string) andcountdownTimerBackgroundColor(string). - Discount:
buyDiscountType(string) andbuyDiscountValue(number).buyDiscountTypeisPERCENTAGE,FIXED_AMOUNT,FIXED_BUNDLE_AMOUNT,TIERED_DISCOUNT,NO_DISCOUNTorFREE_GIFT.
separateTiersByPurchaseType
Bundle rules return separateTiersByPurchaseType (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.