Skip to main content
This page lists every developer-facing change to the Bundles Admin API, the Storefront API and the storefront JavaScript events, newest first. Each entry is dated the day the change reached production.
  • 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/bab and GET /api/external/bundle-rules/discount, and in every Build-a-Box configuration from the Storefront API’s GET /bundles/bb/api/build-a-box/by-token/{token}, GET /bundles/bb/api/build-a-box/single-product and GET /bundles/bb/api/build-a-box/get-bundle/{handle} (inside bundle).
  • 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/.
Admin APIStorefront APINew fields
Child product images

showChildProductImages

Bundle rules return showChildProductImages (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.
Admin APIStorefront APINew fields
Edit version

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.
Admin APIStorefront APINew fields
Discount tags

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.
Admin APIStorefront APINew fields
Combo layout, countdown format

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.
JavaScript eventsBreaking changeAction required
Bundle rules and settings on theme storefronts

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) runs callback once 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 runs callback, with bundle_rules empty and only labels in bundle_setting.
  • window._ABConfig.loadAllBundleRules() resolves with every rule once they arrive, or with an empty list if they can’t load.
Who is affected: theme code that reads 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 fills window._ABConfig.bundle_rules in place and dispatches appstle-bundles:rules-loaded on document, with no detail.
Who is affected: theme code that reads volume discount or Buy X Get Y rules from 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.
JavaScript events
Slider cart

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 these CustomEvents 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’s cartOpenSource, and focusReturnAnchor (element) gets focus back when the drawer closes.
  • closeCart() closes the drawer, refreshCart() re-reads the cart, and getCartData() 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 call handler(cart) and wait for it. Return false to stop the checkout, for example when your own validation fails. Pass null to remove the handler. getCheckoutButtonClickHandler() returns the current one.
To change the drawer’s language without a reload, dispatch appstle-slider-cart:locale-changed on document with detail.locale set to the new locale, for example fr.
Admin APIStorefront APINew fields
B2B buyers

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.
JavaScript events
Cart reconcile event

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.state is scheduled when a follow-up change is coming, and done when it has finished.
  • event.detail.id identifies the follow-up. Cart changes made in quick succession share one id.
Re-read the cart on done. Don’t wait for it forever: if it doesn’t arrive, re-read the cart after a timeout.
Admin APIStorefront APINew fields
Purchase options, widget eligibility

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.
Admin APIStorefront APINew fields
Purchase types, discount progress bar

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.
Admin APIStorefront APINew fields
Untracked stock

ignoreChildStockWhenUntracked

Bundle rules return ignoreChildStockWhenUntracked (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.
Storefront APIBreaking changeAction required
Build-a-Box

Build-a-Box calls return only active bundles

  • GET /bundles/bb/api/build-a-box/by-token/{token} returns 404 when the bundle’s status is DRAFT. Before, it returned draft bundles too.
  • GET /bundles/bb/api/build-a-box/single-product leaves out bundles whose status is DRAFT.
Who is affected: storefront code that loads draft Build-a-Box bundles, for example to preview a bundle before it goes live.Action required: handle 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.
Admin APIStorefront APINew fields
Out-of-stock behavior

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.
Admin APIStorefront APINew fields
Combo quantity

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.
Admin APIStorefront APINew fields
Savings badge labels

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.
Admin APIStorefront APINew fields
Savings badge

showThemeProductPriceSavings

Bundle rules return showThemeProductPriceSavings (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.
Admin APIStorefront APINew fields
Add to cart rules

requireCompleteSelectionForAddToCart

Bundle rules return requireCompleteSelectionForAddToCart (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.
Admin APIStorefront APINew fields
Purchase options

enablePurchaseOptionsSelector

Bundle rules return enablePurchaseOptionsSelector (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.
Admin APIStorefront APINew fields
Fixed bundle subscriptions

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.
Admin APIStorefront APINew fields
Tier selection

disableTierUnselect

Bundle rules return disableTierUnselect (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.
Admin APIStorefront APINew fields
POS discounts

disableDiscountOnPos

Bundle rules return disableDiscountOnPos (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.
Admin APIStorefront APINew fields
Tier selling plans

enableTierSellingPlan

Bundle rules return enableTierSellingPlan (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.
Admin APIStorefront APINew fields
Markets, sticky bar, tier quantity

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 or null when the rule isn’t limited to any market.
  • enableStickyBar (boolean) and stickyBarButtonLabel (string).
  • enableTierQuantitySelector (boolean) and hideThemeVariants (boolean).
Reference: Get all bundle rules, Get build-a-box configuration by token.
Admin APIStorefront APINew enum valueAction required
Dedicated subscription layout

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.
Admin APIStorefront APINew fields
Item selection

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.
Admin APIStorefront APINew fields
Bundle title, excluded products

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) and eligibleVariants (string).
  • Low-stock alert: enableLowStockAlert (boolean), lowStockAlertBackgroundColor (string), lowStockAlertLabel (string), lowStockAlertTextColor (string) and lowStockThreshold (integer).
  • Volume discount variant options: volumeDiscountLabelOptionNames (string), volumeDiscountSplitVariantOptions (boolean), volumeDiscountSwatchOptionNames (string) and volumeDiscountVariantOptionLayout (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.
Admin APIStorefront APINew enum valueAction required
Bundle redirect

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.
Admin APIStorefront APINew fields
Countdown timer, discount type

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) and countdownTimerBackgroundColor (string).
  • Discount: buyDiscountType (string) and buyDiscountValue (number). buyDiscountType is PERCENTAGE, FIXED_AMOUNT, FIXED_BUNDLE_AMOUNT, TIERED_DISCOUNT, NO_DISCOUNT or FREE_GIFT.
Reference: Get all bundle rules, Get build-a-box configuration by token.
Admin APIStorefront APINew fields
Purchase type tiers

separateTiersByPurchaseType

Bundle rules return separateTiersByPurchaseType (boolean).Reference: Get all bundle rules, Get build-a-box configuration by token.