<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://elasticpath.dev/changelog</id>
    <title>Elastic Path Documentation Blog</title>
    <updated>2026-10-01T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://elasticpath.dev/changelog"/>
    <subtitle>Elastic Path Cloud Services Changelog</subtitle>
    <icon>https://elasticpath.dev/favicon.ico</icon>
    <rights>Copyright © 2026 Elastic Path</rights>
    <entry>
        <title type="html"><![CDATA[Tiered cart subtotal discounts in a single promotion]]></title>
        <id>https://elasticpath.dev/changelog/2026/10/01/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/10/01/2026/changelog"/>
        <updated>2026-10-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Tiered cart subtotal discounts in a single promotion]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Tiered cart subtotal discounts in a single promotion</p>
<p>You can now set up all tiers of a tiered cart discount in one promotion in Promotions Builder. Each tier is its own <strong>Cart discount</strong> action with a cart subtotal range, so you no longer need a separate promotion for each tier.</p>
<p>What's New?</p>
<ul>
<li><strong>Cart subtotal ranges on cart discounts</strong> - Use <strong>+refine</strong> on a cart discount action to add a <strong>Cart subtotal range</strong>. The discount applies only when the cart subtotal is within that range, inclusive of both amounts</li>
<li><strong>Multiple tiers per promotion</strong> - Add one cart discount action per tier, and use <strong>Duplicate action</strong> to copy an existing tier, including its range and inclusions, then change the percentage and range</li>
<li><strong>Inclusions and exclusions on ranges</strong> - Add inclusions or exclusions, such as a category, to a range to control which items count toward the cart subtotal for that tier. When a tier applies, the discount applies to the whole cart subtotal</li>
<li><strong>Open-ended top tier</strong> - Leave the maximum amount blank to apply a tier to any cart subtotal equal to or greater than the minimum amount</li>
</ul>
<p>Promotions Builder doesn't check tiers for overlaps or gaps, so make sure your ranges don't overlap and only one tier applies to a cart. Create the lowest tier first and add higher tiers in ascending order. Otherwise, a higher tier's discount can reduce the cart subtotal into a lower tier's range and both discounts apply.</p>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/guides/How-To/promotions-builder/tiered-promotion">Tiered Promotion</a></li>
<li><a href="https://elasticpath.dev/docs/commerce-manager/promotions-builder/creating-a-promotion-in-promotions-builder#creating-a-cart-discount-promotion">Creating a Cart Discount Promotion</a></li>
<li><a href="https://elasticpath.dev/docs/commerce-manager/promotions-builder/creating-a-promotion-in-promotions-builder#creating-tiered-cart-discounts">Creating Tiered Cart Discounts</a></li>
</ul>]]></content>
        <category label="Promotions Builder" term="Promotions Builder"/>
        <category label="Commerce Manager" term="Commerce Manager"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Order shipping group events available to webhooks and integrations]]></title>
        <id>https://elasticpath.dev/changelog/2026/09/29/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/09/29/2026/changelog"/>
        <updated>2026-09-29T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Order shipping group events]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Order shipping group events</p>
<p>Integrations can now observe changes to order shipping groups. Two new observable events are available for webhooks and message queue integrations.</p>
<p>What's New?</p>
<ul>
<li><strong><code>order-shipping-group.created</code></strong> - Triggered when a shipping group is added to an order, including shipping groups created at checkout from a cart with shipping groups</li>
<li><strong><code>order-shipping-group.updated</code></strong> - Triggered when an order shipping group is updated, for example a change to its shipping address, tracking reference, or delivery estimate</li>
<li><strong>Order item linkage</strong> - The delivered shipping group payload includes <code>relationships.items</code>, identifying the order items the shipping group applies to</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/integrations/integrations-introduction#observable-events">Observable Events</a></li>
<li><a href="https://elasticpath.dev/docs/api/carts/get-order-shipping-groups">Retrieve all shipping groups for an order</a></li>
</ul>]]></content>
        <category label="Carts & Orders" term="Carts & Orders"/>
        <category label="Integrations" term="Integrations"/>
        <category label="API" term="API"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Cart item custom fields returned in cart include responses]]></title>
        <id>https://elasticpath.dev/changelog/2026/09/25/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/09/25/2026/changelog"/>
        <updated>2026-09-25T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Cart item custom fields in include=items responses]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Cart item custom fields in <code>include=items</code> responses</p>
<p>Retrieving a single cart with <code>include=items</code> now returns each item's custom fields, the same data you get from Get Cart Items. Storefronts can read a cart and its fully described items in one request instead of two.</p>
<p>What's New?</p>
<ul>
<li><strong>Consistent item data</strong> - Fields defined on the <code>cart_items</code> flow now appear on every item under <code>included.items</code> in <code>GET /v2/carts/:id?include=items</code>, exactly as they do in <code>GET /v2/carts/:id/items</code></li>
<li><strong>Fewer requests</strong> - Storefronts that called Get Cart Items only to read item custom fields can drop that call</li>
<li><strong>No change without a flow</strong> - Stores that have not defined a <code>cart_items</code> flow see no difference in the response</li>
</ul>
<p>What's Changed?</p>
<ul>
<li><strong>Cart event payloads</strong> - <code>cart.created</code> and <code>cart.updated</code> events delivered to webhooks and message queues are built from this same cart response, so the items in those payloads now carry the same custom fields. The change is additive; existing keys are unchanged</li>
<li><strong>Payload size</strong> - Each field on the <code>cart_items</code> flow adds one key to every included item, <code>null</code> when unset. SQS queues cap messages at 256 KiB and elide included resources above that limit, so stores with a wide <code>cart_items</code> flow and large carts may want to check their headroom</li>
</ul>
<p>This applies to single-cart reads only. The cart list endpoint, orders, and quotes are unchanged.</p>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/carts/get-a-cart">Get a Cart</a></li>
<li><a href="https://elasticpath.dev/docs/api/carts/get-cart-items">Get Cart Items</a></li>
<li><a href="https://elasticpath.dev/docs/api/flows/flows-service-introduction">Flows</a></li>
<li><a href="https://elasticpath.dev/docs/api/integrations/integrations-introduction#observable-events">Observable Events</a></li>
<li><a href="https://elasticpath.dev/guides/How-To/Integrations/sqs-queues">Configure SQS Events</a></li>
</ul>]]></content>
        <category label="Carts & Orders" term="Carts & Orders"/>
        <category label="Integrations" term="Integrations"/>
        <category label="API" term="API"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Custom User Roles in Commerce Manager]]></title>
        <id>https://elasticpath.dev/changelog/2026/09/23/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/09/23/2026/changelog"/>
        <updated>2026-09-23T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MAJOR Custom User Roles]]></summary>
        <content type="html"><![CDATA[<p><strong>MAJOR</strong> Custom User Roles</p>
<p>Commerce Manager now supports custom user roles, so admins can define exactly the access each team member needs instead of choosing from the built-in standard roles alone. Manage roles from <strong>Settings &gt; Team &gt; Roles</strong>.</p>
<p>What's New?</p>
<ul>
<li><strong>Create Custom Roles</strong> - Define a role with a name, description, and a per-permission-group access level (No access, View, or Manage) across areas like Catalogs, Orders, Content and Pages, Team, and more</li>
<li><strong>Standard and Custom role tabs</strong> - The Roles page lists the built-in standard roles and your custom roles separately, with a permissions summary showing how many groups have View vs. Manage access</li>
<li><strong>Assign custom roles to team members</strong> - Choose a standard or custom role when inviting a new team member or editing an existing one</li>
<li><strong>Organization-owned roles</strong> - A role created at the organization level is inherited, read-only, by every store in the organization; duplicating it creates a store-owned copy you can edit independently</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/commerce-manager/team-management/custom-roles">Custom Roles</a></li>
<li><a href="https://elasticpath.dev/docs/commerce-manager/team-management">Team Management</a></li>
<li><a href="https://elasticpath.dev/docs/api/permissions">Permissions API</a></li>
</ul>]]></content>
        <category label="Commerce Manager" term="Commerce Manager"/>
        <category label="Settings" term="Settings"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Subscription Proration Previews and Pending Cancellation]]></title>
        <id>https://elasticpath.dev/changelog/2026/08/27/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/08/27/2026/changelog"/>
        <updated>2026-08-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Proration Preview Endpoint]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Proration Preview Endpoint</p>
<p>You can now preview the cost impact of a subscription plan or pricing option change before submitting it, so subscribers can see what they'll be charged or refunded ahead of time.</p>
<p>What's New?</p>
<ul>
<li><strong>Proration preview endpoint</strong> - Compute the proration amounts a prospective plan or pricing option change would produce, without persisting anything or affecting billing</li>
<li><strong>Clear rejection reasons</strong> - A response with <code>would_prorate: false</code> isn't an error - it tells you why the change wouldn't result in a proration (for example, <code>no_change</code> or <code>negative_amount</code>)</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/subscriptions/create-subscription-proration-preview">Preview a subscription proration</a></li>
</ul>
<hr>
<p><strong>MINOR</strong> Cancel Pending Subscriptions Before Go-Live</p>
<p>Subscriptions that haven't yet reached their <code>go_live_after</code> date can now be canceled directly, without needing to wait for the subscription to become active.</p>
<p>What's New?</p>
<ul>
<li><strong>Immediate cancellation for pending subscriptions</strong> - Canceling a <code>pending</code> subscription (one with no invoices yet) is always immediate, since there's no billing period in progress to defer to</li>
<li><strong>Self-service for subscribers</strong> - Subscribers can cancel their own pending subscription without needing to set the <code>cancel_immediately</code> flag</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/subscriptions/create-subscription-state">Create a subscription state</a></li>
</ul>]]></content>
        <category label="Subscriptions" term="Subscriptions"/>
        <category label="API" term="API"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Catalog Search query-triggered boost and bury with search rules]]></title>
        <id>https://elasticpath.dev/changelog/2026/08/10/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/08/10/2026/changelog"/>
        <updated>2026-08-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Catalog Search query-triggered boost and bury with search rules]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Catalog Search query-triggered boost and bury with search rules</p>
<p>Catalog Search now supports <strong>search rules</strong> in <strong>rule groups</strong> so merchandisers can boost, bury, pin, hide, rewrite, or filter results when a shopper query or browse listing matches a trigger.</p>
<p>What's New?</p>
<ul>
<li><strong>Search rule groups</strong> - Named containers for query-time merchandising rules</li>
<li><strong>Search rules</strong> - Exact, contains, and browse triggers with boost/bury, pin, hide, query rewrite, and rule filter actions</li>
<li><strong>Profile <code>rule_groups</code></strong> - Attach ordered rule group IDs to a search profile to activate the rules engine</li>
<li><strong>Ordering controls</strong> - <code>execution_order</code> within a group and <code>stop_after_match</code> across the profile pipeline</li>
<li><strong><code>matched_rules</code> on search results</strong> - See which rule and rule group IDs matched a full search (not autocomplete)</li>
</ul>
<p>What's Changed?</p>
<ul>
<li>Always-on profile boosts remain available for every search on a profile; search rules apply only when a trigger matches</li>
<li>Autocomplete does not evaluate search rules</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/guides/How-To/Catalogs/Search/using-search-rules">Using Search Rules</a></li>
<li><a href="https://elasticpath.dev/guides/How-To/Catalogs/Search/setting-up-search#attaching-search-rule-groups">Setting Up Catalog Search</a></li>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/search-rule-groups">Search Rule Groups API</a></li>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/search-rules">Search Rules API</a></li>
</ul>]]></content>
        <category label="Catalog Search" term="Catalog Search"/>
        <category label="API" term="API"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Catalog Search Indexed Fields replaces Searchable Fields for schema discovery]]></title>
        <id>https://elasticpath.dev/changelog/2026/08/10/2026/indexed-fields-changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/08/10/2026/indexed-fields-changelog"/>
        <updated>2026-08-10T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Catalog Search Indexed Fields replaces Searchable Fields for schema discovery]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Catalog Search Indexed Fields replaces Searchable Fields for schema discovery</p>
<p>Use <strong>Indexed Fields</strong> to list every field in the search index — including numeric, boolean, and date fields — with flags for how each field can be used.</p>
<p>What's New?</p>
<ul>
<li><strong><code>GET /pcm/catalogs/search/indexed-fields</code></strong> - Returns all exposed indexed fields of every type</li>
<li><strong><code>searchable</code> and <code>filterable</code> flags</strong> - See whether a field can be used as a full-text query field and in filter expressions</li>
<li><strong>Guide coverage</strong> - <a href="https://elasticpath.dev/guides/How-To/Catalogs/Search/setting-up-search#list-indexed-fields">List Indexed Fields</a> in Setting Up Catalog Search, with links from filtering, faceting, and sorting guides</li>
</ul>
<p>What's Changed?</p>
<ul>
<li><strong><code>GET /pcm/catalogs/searchable-fields</code> is deprecated</strong> - Prefer Indexed Fields. Searchable Fields returns only text query fields and does not cover fields needed for filtering and sorting</li>
<li>Searchable Fields remains available for existing integrations; migrate to Indexed Fields for complete schema discovery</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/guides/How-To/Catalogs/Search/setting-up-search#list-indexed-fields">List Indexed Fields</a></li>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/indexed-fields">Indexed Fields API</a></li>
<li><a href="https://elasticpath.dev/guides/How-To/Catalogs/Search/setting-up-search">Setting Up Catalog Search</a></li>
</ul>]]></content>
        <category label="Catalog Search" term="Catalog Search"/>
        <category label="API" term="API"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Price books and product configurations in Commerce Manager]]></title>
        <id>https://elasticpath.dev/changelog/2026/08/03/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/08/03/2026/changelog"/>
        <updated>2026-08-03T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MAJOR New price books and product configurations experience]]></summary>
        <content type="html"><![CDATA[<p><strong>MAJOR</strong> New price books and product configurations experience</p>
<p>To make price books and product configurations consistent with recent updates to product pages, we have released a redesigned user interface for these areas in Commerce Manager.</p>
<p>What's New?</p>
<ul>
<li><strong>New price book UI</strong> - The price book list design has been updated. Within the price books editor, the pricing table has been refreshed, and products are added to it from a searchable slide-in sheet. Currencies can be shown and hidden with the column selector on the product list. The price modifiers UI has also been updated, and can be accessed via a new tab within the editor.</li>
<li><strong>Templates &amp; attributes</strong> - Templates and attributes are now a single page, with attributes created and edited inline under their owning template</li>
<li><strong>Variations</strong> - A dedicated list and editor, with variation options managed in slide-in sheets</li>
<li><strong>Product relationships</strong> - Previously "Custom relationships", now with its own list and editor view</li>
</ul>]]></content>
        <category label="Commerce Manager" term="Commerce Manager"/>
        <category label="Product Experience Manager" term="Product Experience Manager"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Deprecation of with_tax and without_tax attributes in Orders filtering]]></title>
        <id>https://elasticpath.dev/changelog/2026/07/22/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/07/22/2026/changelog"/>
        <updated>2026-07-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Deprecation notice of withtax and withouttax attributes when filtering Orders]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Deprecation notice of <code>with_tax</code> and <code>without_tax</code> attributes when filtering Orders</p>
<p>As of July 22, 2026, filtering orders using the <code>with_tax</code> and <code>without_tax</code> attributes on the <code>GET /v2/orders</code> endpoint is deprecated. This capability will be removed on October 19, 2026.</p>
<p>What's Changed?</p>
<ul>
<li><strong>Deprecated as of July 22, 2026</strong> - Requests to <code>GET /v2/orders?filter=</code> using the <code>with_tax</code> and <code>without_tax</code> attributes continue to work during the deprecation period, but we recommend removing any dependency on these filters now</li>
<li><strong>Removed on October 19, 2026</strong> - After this date, requests to <code>GET /v2/orders?filter=</code> filtered using the <code>with_tax</code> and <code>without_tax</code> attributes will return an error</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/carts/get-customer-orders">Get all Orders</a></li>
</ul>]]></content>
        <category label="Carts & Orders" term="Carts & Orders"/>
        <category label="API" term="API"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Catalog rules can specify a search profile for shopper segments]]></title>
        <id>https://elasticpath.dev/changelog/2026/07/16/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/07/16/2026/changelog"/>
        <updated>2026-07-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Catalog rules can specify a search profile for shopper segments]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Catalog rules can specify a search profile for shopper segments</p>
<p>Catalog rules can optionally include a search profile so shopper search follows the same segment as catalog and pricing — without hard-coding <code>search_profile</code> in your storefront.</p>
<p>What's New?</p>
<ul>
<li><strong>Optional <code>search_profile_slug</code> on catalog rules</strong> - Attach a search profile when configuring the rule for an account, customer, channel, or context tag</li>
<li><strong>Automatic profile on shopper search</strong> - Matching shopper search and multi-search use that profile for filters, ranking, and related search behavior; a valid rule slug takes precedence over the <code>search_profile</code> query parameter</li>
<li><strong><code>EP-Search-Profile</code> response header</strong> - See which profile was applied (<code>SYSTEMS_DEFAULT_PROFILE</code> when the built-in default is used)</li>
<li><strong>Price and assortment together</strong> - Use the same rule for price books and searchable assortment (for example a reseller-only category filter on the profile)</li>
</ul>
<p>What's Changed?</p>
<ul>
<li><strong>Shopper search profile resolution</strong> - Catalog rule slug (when valid) → <code>search_profile</code> query parameter → tenant default → built-in default</li>
<li><strong>Admin search unchanged</strong> - Explicit catalog/release search does not apply catalog rule profiles</li>
<li><strong>Safe fallthrough</strong> - An invalid or stale rule slug does not fail the search; Catalog Search falls through to the next resolution source</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/guides/How-To/Catalogs/Search/setting-up-search#how-a-search-profile-is-chosen">How a search profile is chosen</a></li>
<li><a href="https://elasticpath.dev/guides/How-To/Catalogs/price_segmentation#segment-product-assortment-with-a-search-profile">Price Segmentation — product assortment</a></li>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/catalog-search-introduction">Catalog Search API</a></li>
<li><a href="https://elasticpath.dev/guides/How-To/Catalogs/Search/setting-up-search">Setting Up Catalog Search</a></li>
</ul>]]></content>
        <category label="Catalog Search" term="Catalog Search"/>
        <category label="Catalogs" term="Catalogs"/>
        <category label="API" term="API"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Upcoming deprecation of advanced promotion usage filtering (cm_search) in standard Promotions]]></title>
        <id>https://elasticpath.dev/changelog/2026/07/08/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/07/08/2026/changelog"/>
        <updated>2026-07-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Upcoming deprecation of cm_search advanced promotion usage filtering in standard Promotions]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Upcoming deprecation of <code>cm_search</code> advanced promotion usage filtering in standard Promotions</p>
<p>As of July 8, 2026, the advanced promotion usage filtering enabled by passing the <code>EP-Public-Search-Type: cm_search</code> header to the <code>GET /v2/promotions</code> endpoint is deprecated. This capability will be removed on October 6, 2026.</p>
<p>What's Changed?</p>
<ul>
<li><strong>Deprecated as of July 8, 2026</strong> - Requests to <code>GET /v2/promotions</code> with the <code>EP-Public-Search-Type: cm_search</code> header continue to work during the deprecation period, but we recommend removing any dependency on this header now</li>
<li><strong>Removed on October 6, 2026</strong> - After this date, the <code>EP-Public-Search-Type: cm_search</code> header and its advanced usage filter attributes (such as <code>promo_name</code>, <code>promo_status</code>, <code>code_code</code>, <code>order_id</code>, and <code>order_customer_email</code>) are no longer supported on this endpoint</li>
<li><strong>Standard filtering is unaffected</strong> - Filtering promotions with <code>eq(code,...)</code> on <code>GET /v2/promotions</code> continues to work as before</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/promotions/get-all-promotions">Get all Promotions</a></li>
<li><a href="https://elasticpath.dev/docs/api/promotions/promotions-standard-introduction">Promotions Standard Introduction</a></li>
</ul>]]></content>
        <category label="Promotions Standard" term="Promotions Standard"/>
        <category label="API" term="API"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Subscription Details and Invoice Improvements in Commerce Manager]]></title>
        <id>https://elasticpath.dev/changelog/2026/06/26/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/06/26/2026/changelog"/>
        <updated>2026-06-26T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Improved Subscription and Invoice Management]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Improved Subscription and Invoice Management</p>
<p>We've made it easier to review subscriptions and invoices in Commerce Manager, with quicker access to details, clearer invoice context, and a smoother browsing experience.</p>
<p>What's New?</p>
<ul>
<li><strong>Stripe payment ID in invoices</strong> - The invoices table now displays the associated Stripe payment ID, so you can quickly reconcile payments</li>
<li><strong>Subscription details in a sheet</strong> - Subscription details now open in a side sheet instead of a separate page, showing a focused version of the Subscriber view scoped to a single subscription and its invoices</li>
<li><strong>Richer subscription sheet</strong> - The sheet now includes subscriber details, a link to the subscriber, and that subscription's invoices in one place</li>
<li><strong>Clearer invoice context</strong> - In the Subscriber panel, each invoice now shows which subscription it belongs to via a subscription link/column and on the "last invoice" card</li>
<li><strong>Pagination fix</strong> - Fixed a bug where invoice pagination would reset when closing the sheet</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/commerce-manager/subscriptions/invoicing/viewing-invoices">Viewing Invoices</a></li>
<li><a href="https://elasticpath.dev/docs/commerce-manager/subscriptions/subscriptions/managing-active-subscriptions">Managing Active Subscriptions</a></li>
</ul>]]></content>
        <category label="Commerce Manager" term="Commerce Manager"/>
        <category label="Subscriptions" term="Subscriptions"/>
        <category label="Payments" term="Payments"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Address line 3 support for shipping and billing addresses]]></title>
        <id>https://elasticpath.dev/changelog/2026/06/22/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/06/22/2026/changelog"/>
        <updated>2026-06-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Address line 3 support for shipping and billing addresses]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Address line 3 support for shipping and billing addresses</p>
<p>Shipping and billing addresses on orders and shipping groups now support a <code>line_3</code> field, giving merchants a third address line for complex address requirements.</p>
<p>What's New?</p>
<ul>
<li><strong><code>line_3</code> on order shipping address</strong> - The <code>shipping_address</code> object on orders now accepts and returns a <code>line_3</code> field</li>
<li><strong><code>line_3</code> on order billing address</strong> - The <code>billing_address</code> object on orders now also supports <code>line_3</code></li>
<li><strong>Shipping groups support</strong> - <code>line_3</code> is available when creating and updating shipping groups on both carts and orders</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/carts/checkout-api">Checkout</a></li>
<li><a href="https://elasticpath.dev/docs/api/carts/create-order-shipping-group">Create a Shipping Group for an Order</a></li>
</ul>]]></content>
        <category label="Carts & Orders" term="Carts & Orders"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Catalog Search: relevance scores, synonym tuning, and date field faceting]]></title>
        <id>https://elasticpath.dev/changelog/2026/06/17/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/06/17/2026/changelog"/>
        <updated>2026-06-17T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Text match relevance scores on search results]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Text match relevance scores on search results</p>
<p>Search hits now return a breakdown of how their text relevance score was derived, giving merchandisers a window into ranking decisions for debugging and relevance tuning.</p>
<p>What's New?</p>
<ul>
<li><strong><code>text_match_info</code> on each hit</strong> - Every hit includes the overall relevance <code>score</code> plus additional signals such as <code>best_field_score</code>, <code>best_field_weight</code>, <code>fields_matched</code>, <code>tokens_matched</code>, <code>num_tokens_dropped</code>, and <code>typo_prefix_score</code></li>
<li><strong>Diagnose ranking</strong> - Use these signals to understand why one product ranks above another, or to build custom relative metrics for relevance evaluation</li>
<li><strong>Internal ranking signals, not display metrics</strong> - Scores are not normalized to a 0–100 scale and are only comparable within the same result set, so they are intended for debugging rather than shopper-facing "match %" display</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/search">Search</a></li>
</ul>
<hr>
<p><strong>MINOR</strong> Synonym tuning settings on search profiles</p>
<p>Search profiles now expose a dedicated <code>synonym_settings</code> object so you can control how synonym matches are ranked and resolved at search time, independent of typo tolerance settings.</p>
<p>What's New?</p>
<ul>
<li><strong>Demote synonym matches</strong> - Set <code>demote_synonym_match</code> to rank results matched via a synonym below direct (non-synonym) matches</li>
<li><strong>Prefix synonym resolution</strong> - Set <code>synonym_resolution_allowed_on_prefix</code> to allow incomplete (prefix) query tokens to resolve to synonyms at every token position</li>
<li><strong>Typo-tolerant synonym resolution</strong> - Set <code>number_of_typos_allowed_when_resolving_synonyms</code> (0, 1, or 2) so misspelled terms can still trigger a synonym expansion; this setting has moved here from typo tolerance</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/search-profiles">Search Profiles</a></li>
</ul>
<hr>
<p><strong>MINOR</strong> Faceting on date fields</p>
<p>Date fields can now be used as facets, so users can filter results by dates such as when a product was created or last updated. Faceting is supported on both core date fields and custom (flow) date fields.</p>
<p>What's New?</p>
<ul>
<li><strong>Custom date field faceting</strong> - Date-typed custom fields are now facetable, joining the existing string, integer, float, and boolean facet types</li>
<li><strong>Core date field faceting</strong> - Enable faceting on built-in date fields such as <code>created_at</code> and <code>updated_at</code> by setting <code>facetable</code> in <code>core_field_overrides</code></li>
<li><strong>Re-index required</strong> - A re-index is required for the change to take effect</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/indexable-fields">Indexable Fields</a></li>
</ul>]]></content>
        <category label="Search" term="Search"/>
        <category label="Product Experience Manager" term="Product Experience Manager"/>
        <category label="Catalogs" term="Catalogs"/>
        <category label="API" term="API"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Redesigned Product & Bundle Editor in Commerce Manager]]></title>
        <id>https://elasticpath.dev/changelog/2026/06/16/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/06/16/2026/changelog"/>
        <updated>2026-06-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MAJOR A Revamped Product Editing Experience]]></summary>
        <content type="html"><![CDATA[<p><strong>MAJOR</strong> A Revamped Product Editing Experience</p>
<p>We've completely redesigned the Product Editor in Commerce Manager, making it faster and easier to manage your catalog with greater clarity and less friction.</p>
<iframe src="https://drive.google.com/file/d/10LBNgcRSLBtGLzYoiHoRg9uw-BHf9K_M/preview" width="640" height="480"></iframe>
<p>What's New?</p>
<ul>
<li><strong>Side-by-side editor</strong> - The editor opens alongside your product list, so you can select and switch between products without losing your place or disrupting your workflow</li>
<li><strong>Preserved search &amp; filter criteria</strong> - Active search and filter settings are retained as you navigate between products, making bulk review and updates far more efficient</li>
<li><strong>Global saving</strong> - Changes are automatically queued as you work across sections; save everything at once with a single button, or discard to revert to the last saved state</li>
<li><strong>Streamlined section navigation</strong> - Product sections are organized into four clear areas: Product Details, Categorization, Pricing, and Inventory</li>
<li><strong>Variation navigator</strong> - For products with variations, switch between them using the variation selector or expand the product list table to navigate child products directly</li>
<li><strong>Reorganized layout</strong> - The most relevant fields are prioritized up front, less frequently updated fields are read-only by default, and empty fields are hidden to reduce clutter, with a secondary view available when needed</li>
<li><strong>Integrated custom attributes</strong> - Attribute templates are built directly into the Product Details tab, with inline value updates, expand/collapse via the toolbar, and a toggle to hide empty fields</li>
<li><strong>Improved categorization</strong> - Assign products to hierarchies, nodes, or tags with ease, using a secondary pane to search, select multiple nodes at once, and remove them with a single click</li>
<li><strong>Redesigned pricing tables</strong> - Pricing is displayed in a structured table with inline value entry, currency visibility toggles, and tax inclusion mode controls; volume and sale pricing options appear only when in use</li>
<li><strong>Unified inventory experience</strong> - Inventory is organized by location for a clearer view of stock levels, with multi-location support and quantity management consistent with the broader inventory section in Commerce Manager</li>
</ul>
<p>Explore the new experience today in the Products section of Commerce Manager</p>]]></content>
        <category label="Commerce Manager" term="Commerce Manager"/>
        <category label="Product Experience Manager" term="Product Experience Manager"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Upcoming deprecation of per_application promotion codes in Rule Promotions]]></title>
        <id>https://elasticpath.dev/changelog/2026/06/16/2026/changelog2</id>
        <link href="https://elasticpath.dev/changelog/2026/06/16/2026/changelog2"/>
        <updated>2026-06-16T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Upcoming deprecation of per_application promotion codes in Rule Promotions]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Upcoming deprecation of <code>per_application</code> promotion codes in Rule Promotions</p>
<p>On September 14, 2026, we will remove the <code>per_application</code> value for the <code>consume_unit</code> field when creating promotion codes for Rule Promotions.</p>
<p>What's Changed?</p>
<ul>
<li><strong><code>consume_unit: per_application</code> removed on September 14, 2026</strong> - After this date, new promotion codes for a Rule Promotion can no longer be created with <code>per_application</code>; set <code>consume_unit</code> to <code>per_checkout</code> or omit the field to use the default</li>
<li><strong>Existing codes are retained</strong> - Promotion codes already created with <code>consume_unit: per_application</code> continue to work as configured</li>
<li><strong>Rule Promotions only</strong> - This change applies only to Rule Promotions. Promotion codes for standard (V1) Promotions are not affected</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/promotions-builder/promotions-builder-codes/create-promotion-codes">Create Promotion Codes</a></li>
<li><a href="https://elasticpath.dev/docs/commerce-manager/promotions-builder/creating-promotion-codes">Creating Promotion Codes in Commerce Manager</a></li>
</ul>]]></content>
        <category label="Promotions Builder" term="Promotions Builder"/>
        <category label="API" term="API"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Custom Discounts and Rule Promotions can coexist at the store level]]></title>
        <id>https://elasticpath.dev/changelog/2026/06/11/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/06/11/2026/changelog"/>
        <updated>2026-06-11T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Custom Discounts and Rule Promotions store-level coexistence]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Custom Discounts and Rule Promotions store-level coexistence</p>
<p>A store can now enable both Custom Discounts and Rule Promotions at the same time without the system rejecting either at the store configuration level.</p>
<p>What's New?</p>
<ul>
<li><strong>Simultaneous store-level configuration</strong> - Custom Discounts and Rule Promotions can both be enabled in a store's configuration without conflict</li>
<li><strong>Per-cart exclusion preserved</strong> - A single cart applies only one promotion system at a time — Custom Discounts or Rule Promotions, never both.</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/carts/put-v-2-settings-cart">Cart settings</a></li>
</ul>]]></content>
        <category label="Carts & Orders" term="Carts & Orders"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Catalog Search: synonyms, stopwords, typo tolerance, and richer indexing controls]]></title>
        <id>https://elasticpath.dev/changelog/2026/06/08/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/06/08/2026/changelog"/>
        <updated>2026-06-08T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Synonym Sets for Catalog Search]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Synonym Sets for Catalog Search</p>
<p>You can now define groups of equivalent or related terms so shoppers find products regardless of the exact wording they use.</p>
<p>What's New?</p>
<ul>
<li><strong>Manage synonym sets</strong> - Create, list, retrieve, update, and delete named synonym sets, scoped to an organization or a store</li>
<li><strong>Multi-way and one-way synonyms</strong> - Treat terms as fully equivalent (<code>sneakers</code>, <code>trainers</code>, <code>running shoes</code>) or map a root term (<code>fruit</code>) to its synonyms (<code>apple</code>, <code>mango</code>, <code>peach</code>) in one direction only</li>
<li><strong>Attach to search profiles</strong> - Reference synonym sets from a search profile's <code>synonym_sets</code> attribute so they apply at search time, with locale and symbol-indexing options per item</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/synonym-sets">Synonym Sets</a></li>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/search-profiles">Search Profiles</a></li>
</ul>
<hr>
<p><strong>MINOR</strong> Stopword Sets for Catalog Search</p>
<p>Define sets of common, low-value words (such as "the", "a", "an", "is") to ignore during search so results stay relevant and free of noise.</p>
<p>What's New?</p>
<ul>
<li><strong>Manage stopword sets</strong> - Create, list, retrieve, update, and delete stopword sets, scoped to an organization or a store</li>
<li><strong>Per-locale sets</strong> - Maintain one stopword set per locale, with a default set for unspecified locales</li>
<li><strong>Asynchronous sync</strong> - Track each set's sync status (<code>pending_sync</code>, <code>synced</code>, <code>sync_failed</code>) directly in API responses</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/stopword-sets">Stopword Sets</a></li>
</ul>
<hr>
<p><strong>MINOR</strong> Handling typographical errors (misspellings) and prefix matching for search profiles</p>
<p>Search profiles now expose fine-grained control over how forgiving and predictive matching is, both at the profile level and per field.</p>
<p>What's New?</p>
<ul>
<li><strong>Typo tolerance</strong> - Configure typo correction with number of typos (misspellings), length thresholds, token-dropping behavior, split/join handling, and synonym typo resolution</li>
<li><strong>Prefix matching</strong> - Treat the last query token as a prefix so results appear as shoppers type (for example, "red app" matches "red apple"), with a profile-level default and per-field overrides</li>
<li><strong>Per-field overrides</strong> - Override <code>num_typos</code> and <code>prefix</code> on individual fields in your field weight configuration</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/search-profiles">Search Profiles</a></li>
</ul>
<hr>
<p><strong>MINOR</strong> Stemming and tokenization controls for indexable fields</p>
<p>Indexable Fields can now fine-tune how text is analyzed, improving recall for descriptive content and giving you control over how terms containing special characters are indexed.</p>
<p>What's New?</p>
<ul>
<li><strong>Stemming</strong> - Enable Snowball stemming per field so a search for "running" also matches "run" or "runs" on both custom and core fields</li>
<li><strong>Token separators and symbols to index</strong> - Control how text is split into tokens and which special characters are preserved, at the collection level or per field</li>
<li><strong>Core field overrides</strong> - Apply stemming, tokenization, and sorting settings to built-in fields like <code>name</code>, <code>description</code>, and <code>sku</code> using <code>core_field_overrides</code></li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/pxm/catalog-search/indexable-fields">Indexable Fields</a></li>
</ul>]]></content>
        <category label="Search" term="Search"/>
        <category label="Product Experience Manager" term="Product Experience Manager"/>
        <category label="Catalogs" term="Catalogs"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Planned changes to pagination on some PXM endpoints]]></title>
        <id>https://elasticpath.dev/changelog/2026/05/27/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/05/27/2026/changelog"/>
        <updated>2026-05-27T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Planned changes to pagination on some endpoints to align closer with the platform standard.]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Planned changes to pagination on some endpoints to align closer with the platform standard.</p>
<p>We're planning to introduce some minor changes to the way pagination works on some endpoints on or after 1st September 2026. We do not expect these changes to cause problems with existing customer implementations in most cases but are announcing in advance as there is a slim possibility that this may be a breaking change for some.</p>
<p>The following endpoints will be affected:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/products</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/products/{productID}/children</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/products/{productID}/nodes</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/products/{productID}/custom-relationships</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/products/{productID}/custom-relationships/{customRelationshipSlug}/products</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/hierarchies</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/hierarchies/nodes</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/hierarchies/{hierarchyID}/nodes</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/hierarchies/{hierarchyID}/children</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/hierarchies/{hierarchyID}/nodes/{nodeID}/children</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/hierarchies/{hierarchyID}/nodes/{nodeID}/products</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">GET /pcm/custom-relationships</span><br></span></code></pre></div></div>
<p>For more details see: <a href="https://elasticpath.dev/docs/api/pxm/products/get-all-products#pagination">Product Pagination</a></p>]]></content>
        <category label="Product Experience Manager" term="Product Experience Manager"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Cart Total Condition Support for Cart Discount Actions]]></title>
        <id>https://elasticpath.dev/changelog/2026/05/19/2026/changelog</id>
        <link href="https://elasticpath.dev/changelog/2026/05/19/2026/changelog"/>
        <updated>2026-05-19T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[MINOR Promotions Builder now supports carttotal as an action condition on cartdiscount actions]]></summary>
        <content type="html"><![CDATA[<p><strong>MINOR</strong> Promotions Builder now supports <code>cart_total</code> as an action condition on <code>cart_discount</code> actions</p>
<p>What's New?</p>
<ul>
<li>You can now gate a <code>cart_discount</code> action behind a cart total threshold using the <code>condition</code> field. For example, you can create tiered <code>cart_total</code> discounts using multiple <code>cart_total</code> conditions in a single promotion.</li>
</ul>
<p>For details see:</p>
<ul>
<li><a href="https://elasticpath.dev/docs/api/promotions-builder/create-rule-promotion">Promotions Builder API Overview</a></li>
</ul>]]></content>
        <category label="Promotions Builder" term="Promotions Builder"/>
    </entry>
</feed>