Skip to navigation

GraphQL Storefront API: companyRoles filter renamed to searchTerm

The filters argument of customer.activeCompany.companyRoles now takes searchTerm instead of search, so it matches the searchTerm filter on searchProducts.

  • Renamed filter: CompanyRolesFiltersInput.search is now CompanyRolesFiltersInput.searchTerm. It still takes a free-text term that narrows the list of roles.
  • Breaking change: queries that send filters: { search: ... } fail validation. Replace search with searchTerm.
  • Scope: only the companyRoles filter changes. companyRoles was introduced in the October 28, 2026 Company user management entry, and the other fields it announced are unchanged.

For details, see List the assignable Company roles.


Import coupon codes into bulk coupon promotions from a CSV file

The Promotions V3 API now supports importing coupon codes from a CSV file into a bulk coupon promotion and reports the import’s progress through a promotion task.

  • Import coupon codes: the new POST /promotions/{promotion_id}/import-codes endpoint accepts a .csv file of up to 20 MB. Each row contains a code and, optionally, its usage limits and validity window. The whole file is validated before any codes are created, and invalid rows are listed in the response.
  • Track the import: the new GET /promotions/latest-task endpoint returns the store’s latest import task, which tracks created codes, skipped duplicate codes, and failure information. Poll the endpoint for up-to-date information about the task.
  • One import at a time: a store runs one import at a time. Uploading another file while an import is queued or processing returns a 429.

For details, see Import Coupon Codes.


Stencil wishlist pages change starting December 8, 2026

Beginning December 8, 2026, the {{wishlist}} object on wishlist details pages and public wishlist share pages will change as described below, including a theme-breaking change to URL fields. The change rolls out gradually, and you will see it on every storefront over the following weeks.

  • Absolute URLs: on each item in {{wishlist.items}}, url, add_to_cart_url, pre_order_add_to_cart_url, add_to_wishlist_url, and remove_url will include the storefront scheme and domain, and so will each url in {{wishlist.pagination.links}}. For example, /wishlist.php?wishlistid=12&page=2 will become https://www.example.com/wishlist.php?wishlistid=12&page=2. share_url will stay a storefront-relative path.
  • Action required: if your theme prefixes these URLs with a domain or base path, remove that prefix and render the value as-is. Themes that render the values directly, including Cornerstone, need no changes.
  • Hidden products: an item whose product is hidden from the storefront will show as “Product not found” with no price, image, or add-to-cart button, the same way a deleted product shows today.
  • Stock: stock_level, out_of_stock_message, show_cart_action, and add_to_cart_url will reflect the same stock that product and category pages show. Items that appeared out of stock while stock was available will show an add-to-cart button.
  • Options: has_options will be false when a product’s options don’t appear on its product page, so the item will show an add-to-cart button instead of “Choose options”.
  • Images: an image that isn’t assigned to the product will no longer appear as the item’s image, and the theme will show its placeholder instead. An empty image.alt will be filled with the product name. Images that share a sort order will be listed in images by image ID.
  • Custom fields: custom_fields will leave out fields the merchant hid, and will be null when no visible fields remain. Entries will no longer include is_visible.
  • Other properties: summary will always be an empty string. Items with a release date will include release_date. Items will no longer include brand_id or category_ids, which are always empty today.

For the wishlist properties, see the Stencil object reference.